Voilà j'aimerais pouvoir afficher le contenu d'un registre exemple AH et de la pile avec les fonctions bios et version du dos. (je tourne sous nasm pour dos)
Merci
Voilà j'aimerais pouvoir afficher le contenu d'un registre exemple AH et de la pile avec les fonctions bios et version du dos. (je tourne sous nasm pour dos)
Merci
Salut Mikevador02,
Ma première question serait : en quelle notation voudrais tu afficher ces valeurs ? (Héxadécimal,décimal,binaire...)
Salut, ha effectivement ben en hexadecimal sa me suffit , je veux bien connaitre les autres methodes pour apprendre. Sinon je dois convertir avec la calculette windowsEnvoyé par AznOod
Pour un affichage en héxadécimal:
Pour un affichage en binaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 A4BITS PROC NEAR ; convertit les 4 bits de AL en ASCII et affiche push ax push dx cmp al,10 ; si < 10 c'est un chiffre jb chiffre lettre: add al,'A'-10 ; convertie en code ASCII d'une lettre jmp affiche chiffre: add al,'0' ; convertie en code ASCII d'un chiffre affiche: mov dl,al mov ah,2 int 21h ; affiche le code ASCII pop dx pop ax ret A4BITS ENDP
Je suis pas à l'abris d'une erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 AFFBIN PROC NEAR ; affiche un nombre dans AL sous forme binaire pushf push bx push cx mov bl,al mov cx,8 ; 8 bits affiche: rcl bl,1 ; bit de gauche de BL dans CF xor al,al adc al,48 ; 48 et CF pour obtenir le code ASCII mov dl,al mov ah,2 int 21h ; affiche le code ASCII loop affiche pop cx pop bx popf ret AFFBIN ENDP
merci c'est super cool
De rien
J'ai oublier de préciser que pour la procédure en héxadécimal, il faut que tu appliques un masque sur AL du style :
sinon ca risque de ne pas fonctionner si AL>15
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 A4BITS PROC NEAR ; convertit les 4 bits de AL en ASCII et affiche push ax push dx and al,0fh cmp al,10 ; si < 10 c'est un chiffre
En effet, la procédure ne convertit que les 4 bits de poids faible de AL.
-Voilà je vois pas trop comment le masque agit surtout qu'il correspond a 36 en dec. et aussi $0f pourqoi en fait il y a F et pas h ?Envoyé par AznOod
-Mais si je comprend bien on masque les 4 bits de poid lourd donc cette instuction serai aussi bonne je pense:
and al,0Fh
C'est exact
$0f est équivalent à 0fh, $ signifiant héxadécimal ...
La procédure est ensuite facilement modifiable afin de convertir non plus 4bits, mais un registre comme ax ou encore eax, en sachant qu'il faudra le convertir par paquets de 4 bits ...
-Oui j'ai essayer avec le decalage a droite : shr al,4Envoyé par AznOod
Je debute mais pour les variables sa a l'air compliqué car mois ici j'utilise
cx (donc cl) comme variable pour stocker al, je peux faire sa? car cx sert pour les loop (compteur) enfin si je fait push cx et pares pop cx (sa dois etre correct)
ou bien il faut que je stock en mémoire mais nasm est différent je comprend pas encore bien car il gere pas les segemt:offset enfin faut aussi savoir ou le mettre en memoire car si la case est déja prise par dos, buggg ...
je vais te donner un exemple pour convertir ax en héxadécimal avec une syntaxe compatible avec NASM:
J'espère que cela t'aidera
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 PRINT_HEXA: push ax push cx push dx mov cx,4 ; 4*4 bits pour AX (2*4 pour AL,8*4 pour EAX) LOOP: push cx ; pas obligatoire si tu ne modifies pas CX dans le loop rol ax,4 ; décale à la première éxecution du loop les 4 bits de ; poids forts de AX ; dans les 4 bits de poids faibles de AL car ils devront ; être afficher en premier et ainsi de suite lors des ; autres boucles ... push ax ; Sauve AX and al,$0f ; Ne garde que les 4 bits de poids faibles de AL cmp al,10 ; si < 10 c'est un chiffre jb CHIFFRE LETTRE: add al,'A'-10 ; convertit en code ASCII d'une lettre jmp AFFICHE CHIFFRE: add al,'0' ; convertit en code ASCII d'un chiffre AFFICHE: mov dl,al mov ah,2 int 21h ; affiche le code ASCII pop ax ; Restaure AX pop cx ; Idem à push CX loop LOOP pop dx pop cx pop ax ret
Sinon, il y a aussi la possiblitée de stocker les codes ASCII convertis dans un emplacement mémoire afin de tous les affichés ensuite à l'aide d'une interruption qui affiche une chaîne de caractères ...
merci encore pour ton aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager