2017-08-26 117 views
0

我很新裝配,現在我試圖瞭解cmp如何工作。下面要說的寫在wiki瞭解cmp指令

cmp arg2, arg1 

執行ARG1和ARG2之間的比較操作。比較 通過從arg1(有符號)減去arg2來執行,結果 可以被稱爲Temp。 溫度然後被丟棄

這是什麼意思「Temp然後被丟棄」?它存儲在哪裏?我怎樣才能訪問這個比較結果?有人可以解釋嗎?

+0

@Carcigenicate * ax? Cos AFAIK通常與'je'搭配使用。但是je需要知道條件是真是假。 –

+1

請注意,您指的是* wikibooks *,它是* wikis *的特定集合。 A * wiki *只是用戶可以編輯的一種網站。因此,Wikibooks絕對不是x86組裝定義的主要資源(這是一個很好的例子,爲什麼依賴專家文檔比用戶生成的文檔更好)。使用谷歌找到另一個來源,並解釋! –

+1

'je'不需要知道條件是真還是假,'je'是'jz'的別名,'jz'是'如果設置了零標記則跳轉'。所以無論最後一條指令是否修改ZF,都會預測下一個「je」是否會跳轉(ZF = 1)或不是(ZF = 0)。新的asm程序員沒有得到它的有趣後果之一是編寫像'sub ax,1''cmp ax,0''jne myLoop'這樣的代碼......在那裏不需要'cmp',已經以足夠的方式爲該jne工作設置了ZF(但更合理的是使用'jnz myLoop'別名,即讀作「jump not zero loop」 - 幾乎是英語。 – Ped7g

回答

4

cmp arg2, arg1執行與sub arg2, arg1相同的操作,除了沒有任何操作數被修改。 不存儲區別。

然而,標誌寄存器更新,並且可以在一個條件跳轉中使用,像跳如果相等(JE),最通常爲cmp之後的下一指令。

與其他指令相比,您可以比較兩個值而不會破壞它們中的任何一個。如果你做了sub arg2, arg1而他們碰巧是平等的,那麼其中之一將會是零。隨着cmp他們都在那裏。