は「0cmp
に等しい」(つまり、ZF フラグを設定します) 。ただし、call putchar
次の行の は によって設定されたフラグを破棄しているcmp
ため、jz
機能しません (多かれ少なかれ偶然です)。pushf
後で比較するためにフラグを保存する場合は、 andを使用できますが、フラグではなくスタック上の文字が必要になるpopf
ため、これは実際には機能しません。putchar
さて、あなたが述べなかった実際の問題に答えるために。's' を 2 回印刷したいとします。適切に行う方法は次のとおりです。
mov eax, 2 ; init counter
print_loop:
push eax; save the counter since it will be trashed by putchar
push 's'
call putchar
add esp, 4 ; restore the stack pointer since putchar is cdecl
pop eax ; restore the saved counter
dec eax ; decrement it
jnz print_loop ; if it's not yet zero, do another loop
add esp, 4
pop eax
少し短いコードの場合は、別のものに置き換えることができます。