Remplace:
acExpression DB 7,?,4 DUP(" ")
var1 DB ?
var2 DB ?
Par:
; (5 pour le retour chariot)
acExpression db 5,0
acTampon db 5 dup (" ")
var1 db 0
var2 db 0
; Cette table permet de convertir rapidement
; une valeur ASCII hexdécimale en binaire
tabhex db 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0ah,0bh,0ch,0dh,0eh,0fh
et:
mov si,2 ; déplace le pointeur sur la case mémoire 2
mov var1,[si] ; prend le contenu de la case pointée par
le pointeur et met dans var1
mov si,3 ; déplace le pointeur sur la case mémoire 3
mov var2,[si] ; prend le contenu de la case pointée par le
pointeur et met dans var2
mov dh,var1 ;
par:
; Note: à toi de verifier que l'utilisateur a bien entré des caractères
; valides (de 0 à 9 et de A à F).
; Le principe est assez simple, on doit convertir les données entrées
; par l'utilisateur de l'ascii vers le binaire avant de pouvoir les enregistrer
; dans des variables.
lea di,tabhex ; Table de conversion ASCII->Binaire
lea si,acTampon
xor bx,bx ; On efface bx pour eviter les mauvaises surprises
mov bl,[si]
sub bl,"0" ; Retranche 030h ("0") pour obtenir un indice dans la table
; Et utilise la table pour obtenir la bonne valeur en binaire
; car "A" n'est pas égal à 0Ah après avoir soustrait "0"
mov dh,[di+bx]
shl dh,4 ; Décale le chiffre obtenu: 0X -> X0
inc si ; Deuxième chiffre entré
mov bl,[si]
sub bl,"0"
or dh,[di+bx] ; Ajoute 0X
mov var1,dh ; Premier nombre convertit
inc si ; On passe au deuxième nombre (Troisième chiffre)
mov bl,[si]
sub bl,"0"
mov dl,[di+bx]
shl dl,4
inc si
mov bl,[si]
sub bl,"0"
or dl,[di+bx]
mov var2,dl
; Ici , var1/var2 sont déjà dans dh/dl
;mov dh,var1
;mov dl,var2
-------
Note:
La mode d'adressage "mémoire vers mémoire" n'existe pas avec l'instruction mov (mov var1,[si] / mov var2,[si] est impossible).
Note bien que je n'ai pas testé ce code mais je pense qu'il devrait fonctionner :) Le plus important à savoir est qu'il faut convertir les données de l'ascii vers le binaire.
Voila, bon courage.
f.