MASM comparer les tampons non initialisées
Question
Je suis coincé écrire mon programme Voici ce que je voulais faire:
- afficher un message de bienvenue dans une console
- Attendre que l'utilisateur imput un nombre de 0 à 9]
- comparer ce nombre à 0
- afficher un message si elle est sortie autre
Voici ce que j'ai actuellement:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.data
capt db "SCHiM says: ",0
txt db "Enter a number 0-9:",0
.data?
data db ?
.code
start:
call AllocConsole
push offset txt
call StdOut
push 1
push offset data
call StdIn
mov al, data
cmp al, 0h
jz eqzero
invoke ExitProcess, NULL
eqzero:
push offset capt
call StdOut
push offset data
call StdOut
endloop:
jmp endloop
invoke ExitProcess, NULL
end start
Le programme rassemble et liens parfaitement sans aucun avertissement ou d'erreurs Mais Cmp retourne toujours 1, si j'imprime la valeur des données (avec StdOut), il me montre la valeur exacte que j'ai mis. Alors, pourquoi ça ne marche pas?
Merci à l'avance
La solution
Essayez ceci:
cmp al, '0'
-ou -
cmp al, 48
Pourquoi? Parce que vous êtes intéressé par le caractère « 0 », non numérique 0. Le caractère « 0 » est codé comme 48 dans la plupart des encodages.
Autres conseils
Vous êtes probablement en mouvement adresse données à al en quelque sorte. Essayer
mov al, [data]
pour obtenir la valeur stockée à données .
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow