0

私は自分のプログラムを書くのに行き詰まっています。

  1. コンソール内にウェルカム メッセージを表示する
  2. ユーザーが 0 から 9 までの数字を入力するのを待ちます]
  3. その数を 0 と比較します
  4. 存在する場合はメッセージを表示し、そうでない場合は終了します

これが私が現在持っているものです:

.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 

プログラムは、警告やエラーなしで完全にアセンブルおよびリンクしますが、cmp は常に 1 を返します。データの値を (StdOut を使用して) 出力すると、入力した正確な値が表示されます。

前もって感謝します

4

2 に答える 2

2

これを試して:

cmp al, '0'

-また-

cmp al, 48

なんで?数値の 0 ではなく、文字 '0' に関心があるためです。文字 '0' は、ほとんどのエンコーディングで 48 としてエンコードされます。

于 2010-10-03T13:48:20.950 に答える
1

おそらく、データのアドレスをなんらかの方法で移動しています。data に格納されている値を取得してみ てください。mov al, [data]

于 2010-10-03T13:36:53.097 に答える