2

ユーザーから文字を読み取り、入力された文字列が整数と見なされるかどうかをチェックする単純なアセンブリ アプリケーションを作成しようとしています。

mov       ebx,esp
input:
get_ch    eax
cmp       eax,0dh
je        continue
push      eax
jmp       input

continue:
put_str    0ah

xor       edx,edx
output:

これは私が迷っているところです...

put_ch    dword ptr [ebx-4][edx]
dec       edx
jmp       output

... [ebx-4] と edx = 0 で、最初の文字を出力できます。その後、スペースやヌル文字を出力しているようです。

MASM を検索できるものを見つけるのに苦労しています。

4

2 に答える 2

1

1) put_ch や get_ch には詳しくありませんが、put_ch dword ptr [ebx-4][edx] には EBX 呼び出しと EDX 呼び出しの間に「,」が必要だと思います。

2) 各反復で EDX を -1 ずつ変更しますが、ポインター (EBX) は常に ebx-4 です。間違っていたら訂正しますが、EBX を変更するべきではありませんか? -4 が各反復実行で実際に EBX から減算されるとは思いません。

3) EBX で行うように、0 から減算すると、アセンブリでは、オーバーフロー フラグ (OF)、または少なくとも SF (符号フラグ) のみを設定すると思います。使用している ASM の実装のフラグを確認し、どのコマンドがどのフラグを設定するかを確認してください。

于 2014-01-23T19:43:18.753 に答える