[英]Assembly x86 sub arithmetical instruction
我的問題不太大,但是我不明白,我想尋求幫助。
我們正在學習Assembly .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,不確定是否是問題所在。
子指令確實像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,而不是相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.