Question

Je suis coincé écrire mon programme Voici ce que je voulais faire:

  1. afficher un message de bienvenue dans une console
  2. Attendre que l'utilisateur imput un nombre de 0 à 9]
  3. comparer ce nombre à 0
  4. 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

Était-ce utile?

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
scroll top