Je cherchais le moyen d'afficher un registre... Je pensais qu'il existait une petite fonction du bios qui permettait de le faire, et pi en fait non ;-(
Donc on est obligé de faire soi même une fonction pour afficher un registre, par exemple AX...
En fait j'affiche d'abord AH, puis avec la même fonction j'affiche AL.
Les valeurs sont affichées en Hexadécimal.
Aucun registre n'est modifié par ma fonction.
Source / Exemple :
;------------------------SEGMENT DE DONNEES-------------------------
;-------------------------------------------------------------------
_data segment public
hex db '0123456789ABCDEF'
_data ends
;------------------------SEGMENT DE CODE----------------------------
;-------------------------------------------------------------------
_code segment public
assume cs:_code, ss:_stack
START:
mov ax, _data ;synchronise les segments data et ds
mov ds, ax
mov ax, 123Fh ;on choisit une valeur à afficher par exemple 123Fh
call AFFICHER_AX ;on appelle la procédure d'affichage de AX
mov ax, 4C00h ;fonction de fin du prog correcte
int 21h ;int 21h (retour au dos)
AFFICHER_AX:
push ax
xchg ah, al ;on échange ah et al
call AFFICHER_AL;de cette manière on affiche ah
xchg ah, al ;on rééchange ah et al
call AFFICHER_AL;pour afficher al
pop ax
ret
AFFICHER_AL:
push si bx ax ;(ax doit être tout en bas de la pile)
mov si, ax ;(dans le registre SegmentIndex on mets ax soit 12h)
shr si, 4 ;(on décale de 4bits pour ne garder que x1h)
and si, 0Fh ;on se débarrasse du 1er quartet il reste 01h
add si, Offset hex ;on additionne à 01h l'@ de la chaine on obtient l'@ de '1'
mov al, [ds:[si]] ;on récupère le '1' dans al
mov ah, 0Eh ;on prépare l'affichage avec la fonction OE du bios
int 10h ;on affiche
pop ax ;on restaure ax
push ax ;et on le rebalance dans la pile
mov si, ax ;on recommence avec ax
and si, 0Fh ;mais cette fois plus décalage(on s'occupe du 2e octet)
add si, Offset hex
mov al, [ds:[si]]
mov ah, 0Eh
int 10h
pop ax bx si ;on restaure les registres
ret
_code ends
;--------------------------------------------------------------------
;------------------------SEGMENT DE LA PILE--------------------------
;--------------------------------------------------------------------
_stack segment stack
db 100h dup (?) ;déclare une pile de 256 octets
_stack ends
;--------------------------------------------------------------------
;------------------------SAUT AU DEBUT DU PROGRAMME------------------
end START
;--------------------------------------------------------------------
Conclusion :
Possibilité d'améliorer le code, de le compléter en affichant les registres en décimal...
Si vous avez des commentaires, ou autres n'hésitez pas à poster...
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.