Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 août 2007
-
10 août 2007 à 15:45
Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 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) !!!
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 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
Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 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) !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 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) !!!
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 11 août 2007 à 14:34
tu l'as bien compilé avec nasm [tonfichier].asm ??
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 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) !!!
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 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).
Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 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) !!!
Anakinele
Messages postés70Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention15 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) !!!