0
section .data
intArray dw 100,90,80,70,60
twoNums db ' %d %d ',0,10
num dw 10
numIs db ' %d ',10,0
hello : db 'hello',10,0
section .text
global main
extern printf
main :
mov ebx,intArray
mov esi,0
arrayTravel:
movzx eax,word[intArray+esi]
movzx ebx,word[intArray+esi+2]
push ebx
push eax
push twoNums
call printf
add esp,12
sub eax,ebx
push eax
push numIs
call printf
add esp,8
ret
結果ではなく、あなたがprintf
それがEAX
に印刷された文字の数を返すを呼び出すと、私はトンが、この場合には、そのから12減算90を-78なぜ減算結果が間違っていますか?アセンブリのx86
私はadd espに、12はadd espに、4は両方のregにpopを使用しました。うまく動作します。どうもありがとう。 – matheromqq
@matheromqqあなたの修正がこの場合にはうまくいくかもしれませんが、一般的にはそうしないでしょう。ここで、関数のパラメータ(値渡し)は、関数に渡すためにスタックにコピーされます。ただし、呼び出し規約に別途指示がない限り、呼び出された関数はこれらのコピーを変更する権利があります。したがって、呼び出し側の関数が制御する場所に値を保持する必要があります。 (保存された)レジスタ、スタック、メモリなどのような他のレジスタに保存することができます。一方、あなたが行っているように見えるように、レジスタが保持されていないと仮定すれば、あなたは人生をもっと難しくしています! –