Afficher le contenu d'un registre

Résolu
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 15 août 2007 - 10 août 2007 à 15:45
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre 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) !!!

13 réponses

cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 août 2007 à 22:10
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>
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2007 à 10:36
Pour l'utiliser (16bits) :

Mov SI,Msg
Call PrintStr
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
3
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
14 août 2007 à 17:28
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

@++
3
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 15 août 2007
11 août 2007 à 12:19
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) !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 15 août 2007
11 août 2007 à 12:39
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) !!!
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 août 2007 à 14:34
tu l'as bien compilé avec nasm [tonfichier].asm ??
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
0
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 15 août 2007
11 août 2007 à 14:42
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) !!!
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 août 2007 à 19:47
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>
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 août 2007 à 11:52
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

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

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

_______________________________________________________________________
J'ai glissé, chef !<f></f>
0
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 15 août 2007
13 août 2007 à 15:41
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) !!!
0
Anakinele Messages postés 70 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 15 août 2007
15 août 2007 à 10:29
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) !!!
0
Rejoignez-nous