Afficher le contenu d'un registre [Résolu]

Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 10 août 2007 à 15:45 - Dernière réponse :
Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 15 août 2007 à 10:29
Bonjour !

Grand débutant en ASM je cherche 'simplement' (rien ne semble simple en asm !) à afficher dans la console le contenu d'un registre choisi au départ. Concrétement : si une interruption X renvoi un résultat dans le registre Y, comment afficher le contenu de ce registre ?
(J'utilise NASM).

Autre question (secondaire) tant que j'y suis : comment générer un fichier .EXE avec NASM ?

Merci d'avance !

Très amicalement, Anakinele (Membre depuis le 25/08/2004) !!!
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 10 août 2007 à 22:10
3
Merci
Pour afficher le contenu des registres simplement ? Je n'en ai aucune idée ...




Pour créer un .EXE ?? Voilà !!


Pour Window$:


nasmw -fobj [tonfichier].asm
alink -oPE [tonfichier]


Pour M$-DOS:


nasm

[tonfichier].asm

<f>
</f>

Merci cs_ghuysmans99 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_ghuysmans99
Meilleure réponse
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 14 août 2007 à 10:36
3
Merci
Pour l'utiliser (16bits) :

Mov SI,Msg
Call PrintStr
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>

Merci cs_ghuysmans99 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_ghuysmans99
Meilleure réponse
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Dernière intervention
14 février 2014
- 14 août 2007 à 17:28
3
Merci
salut,

message ;= l'adresse du label.
[message] ;= la valeur de la case memoire definie par l'adresse du label
offset [message] ;= la valeur de l'offset de la case memoire definie par l'adresse du label = l'adresse du label.

pour afficher le mois: (dh en BCD)
convertir les 4 bits de poinds fort en nombre ascii
movzx ax,dh
shr al,4
add al,'0'
mov [azmonth],al ;ou sortie ecran directe de al

convertir les 4 bits de poids faible en ascii
movzx ax,dh
and al,0fh
add al,'0'
mov [azmonth+1],al ;ou sortie ecran directe de al

finir par zero terminal ou autre puis afficher la chaine azmonth
mov byte [azmonth+2],0

@++

Merci cs_patatalo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_patatalo
Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 11 août 2007 à 12:19
0
Merci
Merci beaucoup ghuysmans99, ça marche impec !
Aussi dingue que ça puisse paraître, je n'avais trouvé aucun site où il était clairement et simplement expliqué comment générer un .EXE avec NASM !

Pour ma première question, si quelqu'un a la réponse ça m'intéresse évidemment toujours...

Très amicalement, Anakinele (Membre depuis le 25/08/2004) !!!
Commenter la réponse de Anakinele
Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 11 août 2007 à 12:39
0
Merci
Je me suis enthousiasmé un peu vite...
Lorsque je créé l'EXE du programme (dont le code est ci-dessous) puis que je le lance, j'ai le message d'erreur "[monprog].exe a rencontré un problème et doit fermer, etc..."

---------CODE---------- (Ce prog écrit simplement toutes les lettres de l'aphabet... oui je sais je débute !)
BITS 32           
SEGMENT .code       

..start:      ;J'ai rajouté ça après car j'avais le WARNING : "no entry point specified"

mov AX,3                ;Efface l'écran
int 10h

mov AL,'A'              ;Enregistre 'A'
mov AH,0Eh              ;Enregistre la fonction

Ecriture:     int 10h             ;Ecrit le caractère
              inc AL              ;Incrémente AL
              cmp AL,'Z'          ;Compare AL et 'Z'
              JBE Ecriture        ;Recommence si AL < 'Z'

mov AH,2                ;Place le curseur pour le txt 'Press any key...'
mov DX,2*256+0
int 10h

mov AX,4C00h            ;Fin du programme
--------------------------------------------------------------

Très amicalement, Anakinele (Membre depuis le 25/08/2004) !!!
Commenter la réponse de Anakinele
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 11 août 2007 à 14:34
0
Merci
tu l'as bien compilé avec nasm [tonfichier].asm ??
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Commenter la réponse de cs_ghuysmans99
Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 11 août 2007 à 14:42
0
Merci
Oui, au niveau compilation je crois pas faire d'erreur...
J'ai refait un test avec un code épuré (voir ci-dessous) et je n'ai aucun message d'erreur à la compilation mais toujours la même erreur au lancement
---------CODE-----------
..start:

mov ah,09h
mov edx,message  ;J'ai mis EDX au lieu de DX car j'avais le message "Warning 32 bit offset in 16 bit field"
int 21h

mov ah,4ch
int 21h

message db 'Hello world',10,13,'$'
-----------------------------

J'ai suivi un tuto (Benoit M.) sous TASM en 16 bits. Je devais écrire mov dx,offset message y a-t-il un équivalent de "offset" sous NASM et celui-ci est-il nécessaire ici (c'est peut-être mon problème) ?

Merci d'avance !

Très amicalement, Anakinele (Membre depuis le 25/08/2004) !!!
Commenter la réponse de Anakinele
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 11 août 2007 à 19:47
0
Merci
pour afficher une chaîne :

PrintStr:
;In  -> DS:SI=Str
;Out -> --
 Push ax
 Push bx
  .debut:
   Lodsb    ; ds:si -> al
   Cmp al,0    ; fin chaine ?
   Jz .fin
   Mov ah,0Eh    ; appel au service 0x0e, int 0x10 du bios
   mov bx,07h    ; bx -> attribut, al -> caractere ascii
   Int 10h
   Jmp .debut
   
  .fin:
   Pop bx
   Pop ax
Ret

_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Commenter la réponse de cs_ghuysmans99
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Dernière intervention
14 février 2014
- 12 août 2007 à 11:52
0
Merci
salut,

ton code ne peux pas fonctionner, tu spécifie la directive [BITS 32] mais tu écris du code [BITS 16]. Il va te falloir apprendre et comprendre les diférents modes de fonctionnement du processeur x86 pour faire de l'asm.

il existe plein de codes 16 bits (pour BIOS/DOS) sur ce site et tu trouvera aussi quelques sources en 32 bits (pour Windows).

regarde cette source de nasman: http://www.asmfr.com/codes/EXEMPLES-SIMPLES-FICHIERS-ECRITS-AVEC-NASM_34175.aspx

@++
Commenter la réponse de cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Dernière intervention
14 février 2014
- 12 août 2007 à 11:59
0
Merci
petite précision avec nasm:
nasm                     ;= tasm
mov ax,message    ;= mov ax,offset [message]
mov ax,[message]  ;= mov ax,[message]

@++
Commenter la réponse de cs_patatalo
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 12 août 2007 à 13:28
0
Merci
juste ... c'est en fait le code pour un secteur de boot ...

_______________________________________________________________________
J'ai glissé, chef !<f></f>
Commenter la réponse de cs_ghuysmans99
Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 13 août 2007 à 15:41
0
Merci
Merci beaucoup à vous deux patatalo et ghuysmans99 !

patatalo > Merci pour le lien, je vais potasser ! Juste une question : quelle est la différence entre message et [message] ?
D'autant plus que TASM semble toujours nécessiter des crochets [ ] !
ghuysmans99 > Je comprends le code pour afficher une chaine mais je ne sais pas où/comment spécifier la chaine à afficher.
En plus, je cherchais à afficher la valeur d'un registre suite à l'appel d'une fonction :
exemple (cf : http://heim.ifi.uio.no/~stanisls/helppc/int_1a-4.html) :
mov ah,04
int 1ah
Je lis sur la page dont j'ai mis le lien : "DH = month in BCD
", donc DH contient le mois.
Question : comment afficher le mois contenu à présent dans DH ?

Encore merci pour vos réponses et merci d'avance pour la suite !

Très amicalement, Anakinele (Membre depuis le 25/08/2004) !!!
Commenter la réponse de Anakinele
Messages postés
70
Date d'inscription
mercredi 25 août 2004
Dernière intervention
15 août 2007
- 15 août 2007 à 10:29
0
Merci
Merci à tous les deux, je crois pouvoir me débrouiller avec ce que vous m'avez fourni comme info !
Je vais prendre le temps d'approffondir et je poserai peut-être d'autres questions par la suite si j'ai de nouveau un gros problème sans solution...

@+

Très amicalement, Anakinele (Membre depuis le 25/08/2004) !!!
Commenter la réponse de Anakinele

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.