我的问题不是太大,但我不明白,我想要求一些帮助。
我们正在学习汇编.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我不确定这是不是问题。
答案 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寄存器中而不是相反。