條件跳轉表
直接轉移指令
指令格式
機器碼
測試標誌
條件說明
符號
jo opr
70of=1
結果有溢位
jno opr
71of=0
結果無溢位
jc opr
72cf=1
小於<
jnc opr
73cf=0
大於或等於
>=
jz/je opr
74zf=1
結果為0
==jnz/jne opr
75zf=0
結果非0
!=js opr
78sf=1
結果為負
<0
jns opr
79sf=0
結果為正
>0
jp/jpe opr
7apf=1
結果中1的個數為偶數
jnp/jpo opr
7bpf=0
結果中1的個數為奇數
間接轉移指令-無符號數
指令格式
機器碼
測試標誌
條件說明
符號
jb/jnae opr
72cf=1
低於/不高於且不等於
<
jnb/jae opr
73cf=0
不低於/高於或等於
>=
jbe/jna opr
76(cf=1)|(zf=1)
低於或等於/不高於
<=
jnbe/ja opr
77(cf=0)&(zf=0)
不低於且不等於/高於
>
間接轉移指令-有符號數
指令格式
機器碼
測試標誌
條件說明
符號
jl/jnge opr
7c(sf^of)=1
小於/不大於且不等於
<
jnl/jge opr
7d(sf^of)=0
不小於/大於或等於
>=
jle/jng opr
7e(sf^of)=1|(zf=1)
小於或等於/不大於
<=
jnle/jg opr
7f(sf^of)=0&(zf=0)
不小於且不等於/大於
>
理解方法:
n: not
e: equal
a: above
b: below
l: less (little的比較級)
g: greater (great的比較級)
less than : 小於
greater than: 大於
(sf^of)=1 --> sf=0,of=1 --> a < b
sf=1,of=0 --> a < b
(sf^of)=0 --> sf=1,of=1 --> a > b
sf=0,of=0 --> a >= b
條件跳轉指令是根據標誌暫存器中的相關標誌位的值來進行跳轉的,因此,條件跳轉指令只能與那些能夠影響標誌暫存器的相關標誌位的指令配合使用;
能夠直接影響標誌暫存器的相關標誌位的指令有:
1、算術運算指令 : add、sub、adc、sbb、inc、dec、neg、mul、div、imul、idiv,等等;
2、按位邏輯運算 : and、or、xor、not,等等;
3、比較運算指令 : cmp、test;
4、移位操作指令 : shr、shl、sar、sal、ror、rol、rcr、rcl;
5、bcd數調整指令: aaa、aas、daa、das、aam、aad;
6、標誌處理指令 : clc、stc、cmc、cld、std、cli、sti;
能夠間接影響標誌暫存器的相關標誌位的指令序列有:
pushf --> pop eax --> modify eax --> push eax --> popf
即:pushf
pop eax
modify eax
push eax
popf
jbe opr
這樣的一系列操作之後,條件轉移指令"jbe opr"也可以根據標誌暫存器的相關標誌位進行轉移;
Linux C語言內聯彙編 條件跳轉
void jump 當sum的約束條件是 r 時,內聯彙編中應該初始化一下,movl 0,0 相當於初始化sum的中轉暫存器 比如下面,編譯器選擇 edx來暫存sum,如果不清零操作,其中的值是不確定的 再看看生成的.s檔案 subq 16,rsp movl 10,4 rbp movl 0,8 rb...
170824 彙編 x86基礎
a.1625 5 王子昂 總結 2017年8月24日 連續第325天總結 b.逆向知識 資料移動分為5種方式 立即數到暫存器 立即數到記憶體 暫存器到暫存器 暫存器到記憶體或記憶體到暫存器 記憶體到記憶體 前4種是所有現代體系都支援的,第五種是x86獨有的,可以通過inc add來直接操作記憶體 另...
X86彙編指令詳解
x86彙編基本分為七大體系 分別是 1 資料傳送指令 2 算術運算指令 3 邏輯運算指令 4 串操作指令 5 控制轉移指令 6 處理器控制指令 7 保護方式指令 先介紹資料傳送指令集 1 資料傳送指令 1.mov 格式 mov destination,source 功能 將s ource中的資料傳送...