汇编x86子算术指令

时间:2017-05-23 09:23:16

标签: assembly x86

我的问题不是太大,但我不明白,我想要求一些帮助。

我们正在学习汇编.x86语言,我陷入了SUB算术指令。

这是代码:

INCLUDE Irvine32.inc

.data

val_A    DWORD   1234h
val_B    DWORD   144h

.code

main proc

MOV     EAX, val_B   ;This works
SUB     EAX, val_A

CALL    WriteInt
CALL    Crlf

INVOKE  ExitProcess, 0
main endp

.stack
dw      100 dup(? )

end main

当我尝试这样说时:

MOV    EAX, val_A
MOV    EBX, val_B
SUB    EBX, EAX

它不起作用。我们了解到[SUB]算术输入与[MOV]和[ADD]一样工作,但当我尝试将其用作[SUB reg / reg]时,绝对不会只显示EAX寄存器中的内容。 我使用Visual Studio我不确定这是不是问题。

1 个答案:

答案 0 :(得分:0)

子指令 像MOV和ADD一样工作。 它确实作为SUB reg / reg工作。 当您尝试将SUB用作:

MOV EAX, val_A
MOV EBX, val_B
SUB EBX, EAX

你没有改变EAX,就像你说的那样,寄存器EAX没有改变。 那是因为结果保存在EBX中。 要将(1234h - 123h)的结果输入EAX寄存器,您应该编码:

MOV EAX, val_A
MOV EBX, val_B
SUB EAX, EBX

再说一遍,SUB指令 像MOV一样工作, 为什么结果会进入第一个寄存器。例如:

MOV EAX, 1234h

将数字1234h放在EAX寄存器中而不是相反。