我想在線查找彙編語言函數「je」的用法。我讀過je表示如果平等就跳,這正是我想要的。這個函數的實際用法是什麼,換句話說,如何輸入這個函數來檢查一個值,如果它等於某個值就跳轉?彙編語言je跳轉函數
請讓我知道。
順便說一句,我使用NASM,如果這有所作爲。
我想在線查找彙編語言函數「je」的用法。我讀過je表示如果平等就跳,這正是我想要的。這個函數的實際用法是什麼,換句話說,如何輸入這個函數來檢查一個值,如果它等於某個值就跳轉?彙編語言je跳轉函數
請讓我知道。
順便說一句,我使用NASM,如果這有所作爲。
比方說,你要檢查EAX
等於5
,並執行基於該比較的結果不同的動作。換句話說,一個if語句。
; ... some code ...
cmp eax, 5
je .if_true
; Code to run if comparison is false goes here.
jmp short .end_if
.if_true:
; Code to run if comparison is true goes here.
.end_if:
; ... some code ...
嗯,我終於找到了我的答案。 :P基本上你在cmp電話後打電話給je label_to_jump_to。
如果cmp顯示兩個值相等,je會跳轉到指定的標籤。如果沒有,它將繼續執行。
Edsger Dijkstra一定討厭裝配工;它充滿了GOTO's :-) – 2009-10-17 19:15:46
它不必遵循'CMP'指令,儘管這是最常見的情況。正如其他人所說,'Jcc'指令可以遵循任何設置'FLAGS'的指令。這包括幾乎所有的算術指令和其他一些算術指令。 – bcat 2009-10-17 19:17:54
通常,您將在je
之前加上cmp
(或test
或等價物),這會在EFLAGS寄存器中設置一個標誌。這裏有一個link到NASM中的一個簡單的echo服務器,可以幫助你。忽略惱人的Google廣告。
爲je
一個例子的使用可能是:
cmp eax, ebx
je RET_FAIL
jmp RET_SUCCESS
RET_FAIL:
push 1
pop eax
ret
RET_SUCCESS:
push 0
pop eax
ret
如果在FLAGS
寄存器中的「等於標誌」(也被稱爲「零標誌」)設置這將跳。這是算術運算的結果,或者像TEST
和CMP
這樣的指令。
例如:(如果沒記錯的話這是正確的:-)
cmp eax, ebx ; Subtract EBX from EAX -- the result is discarded ; but the FLAGS register is set according to the result. je .SomeLabel ; Jump to some label if the result is zero (ie. they are equal). ; This is also the same instruction as "jz".
我必須說je func是測試零標誌是否設置,然後跳轉到其他地方或繼續下一個指令。
test cx, cx
je some_label
測試指令只是做一個位與所述兩個操作數,並根據該AND結果設置標誌。 je指令然後使用零標誌來決定跳轉還是繼續。
上面的代碼用於檢查cx是否爲零。
注意:je不是測試相等,而是測試在此之前由某些指令設置的ZERO標誌。
這裏使用了哪種彙編語法? – 2013-02-20 18:19:18
如果我沒有記錯,這應該是有效的NASM。 – bcat 2013-02-22 21:18:13
它可以檢查除EAX之外的其他任何寄存器嗎? – 2015-01-11 11:02:47