比較和條件跳轉
CMP
- 比較兩個操作數,相當於SUB指令,但是相減的結果不保存到第一個操作數,而是根據相減的結果來改變零標志位。當兩個操作數相等時,零標志位Z置為1。
- 兩個操作數不相等時,零標志位Z被置為0,而且如果第一個操作數大於第二個操作數,符號位S被置為0;如果第一個操作數小於第二個操作數,符號位S被置為1。
TEST
- 兩個操作數進行與操作,結果不保存,但是會改變標志位的結果。
- 可以用這個指令來判斷eax是否等於0。
JUMPS
- 所有的跳轉指令都會指向程序將會跳轉的地址
JMP跳轉
- 無條件跳轉,總是跳轉到指定的地址
JE JZ 結果不為零跳轉
- 兩個跳轉指令是等價的,書寫不同而已,零標志位Z被置為1時跳轉
JNE JNZ 結果為零跳轉
- 與JE JZ相反,零標志位為0時,跳轉
JS 結果為負跳轉
- 當比較的結果為負時跳轉,即符號位S為1時跳轉
JNS 結果不為負跳轉
- 與JS相反,當符號位S為0時,跳轉
JP JPE 結果中1的個數為偶數跳轉
- 比較的結果中,1的個數要是偶數,奇偶標志P會被置為1,則跳轉
JNP JNPE 結果中1的個數為奇數跳轉
- 與JP JPE相反,當比較的結果中1的個數為奇數,奇偶標志位P被置為0時,跳轉。
JO 結果溢出跳轉
- 當發生溢出的時候,溢出標志O被置為1,跳轉
JNO 結果沒有溢出跳轉
- 與JO相反,當溢出標志O為0時,跳轉,即沒有發生溢出時。
JB JNAE 小於跳轉(無符號數)
- 第一個操作數小於第二個操作數時跳轉,即進位借位標志位C被置為1
JNB JAE 大於跳轉(無符號數)
- 與JB JNAE相反,當借位進位標志位為0時跳轉,
JBE JNA 小於等於跳轉(無符號數)
- 小於或者等於的時候跳轉,需要判斷兩個標志位,當進位借位標志C被置為1或者零標志Z被置為1時,跳轉。
JNBE JA 大於跳轉(無符號數)
- 與JBE相反,當進位借位標志C和零標志位Z都為0時,才會跳轉。
JL JNGE 小於跳轉(有符號數)
- 小於的時候跳轉,與JB不同,這個指令根據符號標志位S來決定是否跳轉
- 溢出標志O與符號標志S不同時,跳轉