簡體   English   中英

匯編x86子算術指令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM