小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

80X86指令總結(jié)

 herowuking 2015-09-26

一、數(shù)據(jù)傳送指令

指令名稱

匯編語句格式

功能

影響標(biāo)志位

傳送
move data
mov opd, ops (ops) → opd;分為主存儲(chǔ)器、通用寄存器、段寄存器,不可同時(shí)使用主存儲(chǔ)器,類型要匹配:byte,word,dword
帶符號(hào)擴(kuò)充的傳送
move with sign-extend
movsx opd, ops 將ops的符號(hào)向前擴(kuò)展成與opd相同的數(shù)據(jù)類型后 → opd
ops不能為立即數(shù),
帶0擴(kuò)展的傳送
move with zero-extend
movzx opd, ops 將ops的高位向前補(bǔ)0擴(kuò)展成與opd相同的數(shù)據(jù)類型后 → opd
數(shù)據(jù)交換
exchange
xchg opd, ops 將(opd)與(ops)交換
源操作數(shù)不能是立即操作數(shù)
32位寄存器字節(jié)交換
byte swap
bswap reg
(reg,代表寄存器,下同)
將從第一個(gè)與第四個(gè)字節(jié)交換,將第二個(gè)字節(jié)和第三個(gè)字節(jié)交換
(按字節(jié)反序),32位寄存器
交換并相加
exchange and add
xadd opd, ops 將(opd)與(ops)互換,(opd)+(ops) → opd af,of,pf,
sf,zf,cf
查表轉(zhuǎn)換
table look-up translation
xlat ops 或 xlatb (ds:[bx/ebx+al]) → al (求和之前al作無符號(hào)擴(kuò)展),
一般把數(shù)表的首地址放到bx/ebx中,lea bx, buf  ;al就是在buf中的位置
傳送偏移地址
load effective address
lea reg,ops ops → reg
傳送偏移地址和數(shù)據(jù)段首地址
load data segment register
lds reg, ops (ops)→ reg  
(ops+2/4)→ ds;ops一定是存儲(chǔ)器地址,類型為dword/fword
傳送偏移地址和附加段首地址
load far pointer to extra segment
les/lfs/lgs reg, ops 同上,只是段寄存器分別為es,fs,gs
傳送偏移地址和堆棧首地址
load stack segment
lss reg, ops 同上,段寄存器為ss
進(jìn)棧
push word/dword onto stack
push ops
pushw ops 或pushd ops
16位段:(sp) – 2/4 → sp    (ops) → [sp]; 可以為兩個(gè)字節(jié),
或四個(gè)字節(jié)32位段:(esp) – 2/4 → esp  (ops) → [esp]; 同上
所有16位通用寄存器進(jìn)棧
pushall 16-bit general registers
pusha (sp/esp) –2 → sp/esp 重復(fù)8次壓入ax,cx,dx,bx,sp(指令執(zhí)前),bp,si,di;是先改變sp/esp 再把數(shù)據(jù)寫入
所有32位通用寄存器進(jìn)棧
pushall 32-bit general registers
pushad (sp/esp) – 4 → sp/esp 重復(fù)8次壓入eax,ecx,edx,ebx,
esp(指令執(zhí)行前),ebp,esi,edi;是先改變sp/esp 再把數(shù)據(jù)寫入
出棧
pop a word/dword frome the stack
pop opd 16位段:[sp]→ (opd) ; (sp) + 2/4 → sp   ;可以為兩個(gè)字節(jié),或四個(gè)字節(jié)
32位段:[esp]→ (opd) ; (esp) + 2/4 → esp ;  同上
出棧到所有16位通用寄存器
pop stack into all 16-bit registers
popa 將棧頂?shù)?6個(gè)字節(jié)依次出棧到di,si,bp,丟棄2個(gè)字節(jié),bx,dx,cx,ax,
(sp/esp)+16 → sp/esp  
出棧到所有32位通用寄存器
pop stack into all 32-bit registers
popad 將棧頂?shù)?6個(gè)字節(jié)依次出棧到edi,esi,ebp,丟棄4個(gè)字節(jié),ebx,edx,ecx,eax,
(sp/esp)+32 → sp/esp  
標(biāo)志進(jìn)棧
push flags onto stack
pushf (sp/esp) – 2 → sp/esp
(flags) → [sp/esp]
擴(kuò)展標(biāo)志出棧
push eflags onto stack
pushfd sp/esp – 4 → sp/esp
(eflags) → [sp/esp]
標(biāo)志出棧
pop stack into flags
popf [sp/esp] → flags
sp/esp + 4 → sp/esp
擴(kuò)展標(biāo)志出棧
pop stack into eflags
popfd [sp/esp] → eflags
sp/esp + 4 → sp/esp
標(biāo)志傳送到ah
load ah from flags
lahf (flags7-0) →  ah
將ah傳送到flags
store ah into flags
sahf (ah) → flags7-0 sf,zf,af,pf,cf
輸入
input from port
in opd, ops ([ops]) →  opd;
opd只能是al、ax、eax;ops為立即數(shù)(<255)或者dx
輸出
output to port
out opd, ops (ops) → [opd];
ops只能是al、ax、eax;opd為立即數(shù)(<255)或者dx

二、算術(shù)運(yùn)算指令

指令名稱

匯編語句格式

功能

影響標(biāo)志位

加 1
increment
inc opd (opd) + 1 → opd af,of,pf,
sf,zf

addition
add opd, ops (opd) + (ops) → opd af,of,pf,
sf,zf
帶進(jìn)位加
add with carry
adc opd, ops (opd) + (ops) + cf → opd af,of,pf,
sf,zf
減 1
decrement
dec opd (opd) – 1 → opd af,of,pf,
sf,zf
求補(bǔ)
two's complement negation
neg opd 0 – (opd) → opd af,of,pf,
sf,zf

subtract
sub opd, ops (opd) – (ops) → opd af,of,pf,
sf,zf
帶借位減
subtract with borrow
sbb opd, ops (opd) – (ops) – cf → opd af,of,pf,
sf,zf
比較
compare
cmp opd, ops (opd) – (ops)
一般用于轉(zhuǎn)移前的控制,應(yīng)用于跳轉(zhuǎn)
af,of,pf,
sf,zf
無符號(hào)乘
unsigned multiply
mul ops 字節(jié)乘:(al) * (ops) → ax; 字乘法:(ax) * (ops) → dx:ax;
雙字乘:(eax) * (ops) → edx:eax
cf,of
單操作數(shù)的有符號(hào)乘
signed integer multiply
imul ops 字節(jié)乘:(al) * (ops) → ax; 字乘法:(ax) * (ops) → dx:ax;
雙字乘:(eax) * (ops) → edx:eax
cf,of
雙操作數(shù)的有符號(hào)乘
signed integer multiply
imul opd, ops (opd) * (ops) → opd;opd可為16/32的寄存器,ops可為同類型的寄存器、存儲(chǔ)器或立即數(shù) cf,of
三操作數(shù)的有符號(hào)乘
signed integer multiply
imul opd, ops, n (ops) * n → opd;同上,n為立即數(shù) cf,of
將字節(jié)轉(zhuǎn)換成字
convert byte to word
cbw 將al中的符號(hào)擴(kuò)展到ah中,數(shù)據(jù)的補(bǔ)碼數(shù)值沒有變
將字轉(zhuǎn)換成雙字
convert word to double word
cwd 將ax中的符號(hào)擴(kuò)展到dx的高位中
將字轉(zhuǎn)換成雙字
convert word to double word
cwde 將ax中的符號(hào)擴(kuò)展到eax的高位中
將雙字轉(zhuǎn)換成4字
convert double word to quadword
cdq 將eax中的符號(hào)擴(kuò)展到edx中
無符號(hào)除
unsigned divide
div ops 字節(jié)除:(ax)/(ops)→al(商),ah(余數(shù));字除:(dx:ax)/(ops) → ax(商),
dx(余數(shù)) 雙字除: (edx:eax)/(ops) → eax(商),edx(余數(shù))
af,of,pf,
cf,sf,zf
有符號(hào)除
signed integer divide
idiv ops 字節(jié)除:(ax)/(ops)→al(商),ah(余數(shù));字除:(dx:ax)/(ops) → ax(商),
dx(余數(shù)) 雙字除: (edx:eax)/(ops) → eax(商),edx(余數(shù))
af,of,pf,
cf,sf,zf

三、控制轉(zhuǎn)移指令

指令名稱

匯編語句格式

功能

影響標(biāo)志位

相等/等于0轉(zhuǎn)移
jump if equal/zero
je/jz 標(biāo)號(hào) zf = 1 轉(zhuǎn)移
不相等/不等于0轉(zhuǎn)移
jump if not equal/zero
jne/jnz 標(biāo)號(hào) zf = 0 轉(zhuǎn)移
為負(fù)轉(zhuǎn)移
jump if sign
js 標(biāo)號(hào) sf = 1 轉(zhuǎn)移
為正轉(zhuǎn)移
jump if positive
jns 標(biāo)號(hào) sf = 0 轉(zhuǎn)移
溢出轉(zhuǎn)移
jump if overflow
jo 標(biāo)號(hào) of = 1 轉(zhuǎn)移
無溢出轉(zhuǎn)移
jump if not overflow
jno 標(biāo)號(hào) of = 0 轉(zhuǎn)移
有進(jìn)位轉(zhuǎn)移
jump if carry
jc 標(biāo)號(hào) cf = 1 轉(zhuǎn)移
無進(jìn)位轉(zhuǎn)移
jump if not carry
jnc 標(biāo)號(hào) cf = 0 轉(zhuǎn)移
偶檢驗(yàn)/偶性轉(zhuǎn)移
jump if parity/parity even
jp/jpe 標(biāo)號(hào) pf = 1 轉(zhuǎn)移
奇檢驗(yàn)/奇性轉(zhuǎn)移
jump if no parity/parity odd
jnp/jpo 標(biāo)號(hào) pf = 0 轉(zhuǎn)移
小于/不大于也不等于 轉(zhuǎn)移
jump if less/not greater nor equal
jl/jnge 標(biāo)號(hào) sf ≠ of 轉(zhuǎn)移
不小于/大于或等于轉(zhuǎn)移
jump if not less/greater or equal
jnl/jge 標(biāo)號(hào) sf = of 轉(zhuǎn)移
大于/不小于或不等于轉(zhuǎn)移
jump if greater/not less or not equal
jg/jnle 標(biāo)號(hào) sf = of, 且zf = 0 轉(zhuǎn)移
不大于/小于或等于轉(zhuǎn)移
jump if not greater /less or equal
jng/jle 標(biāo)號(hào) sf ≠ of 或zf =  1 轉(zhuǎn)移
低于/不高于且不等于轉(zhuǎn)移(無符號(hào))
jump if below/not above not equal
jb/jnae 標(biāo)號(hào) cf = 1 轉(zhuǎn)移
不低于/高于或等于轉(zhuǎn)移(無符號(hào))
jump if now below/above or equal
jnb/jae 標(biāo)號(hào) cf = 0 轉(zhuǎn)移
高于/不低于且比等于轉(zhuǎn)移(無符號(hào))
jump if above/not below nor equal
ja/jnbe 標(biāo)號(hào) cf = 0 且 zf = 0 轉(zhuǎn)移
不高于/低于或等于
jump if not above/below or equal
jna/jbe 標(biāo)號(hào) cf = 1 或 zf =1 轉(zhuǎn)移
無條件轉(zhuǎn)移
jump unconditionally
jmp opd 相對(duì)轉(zhuǎn)移:(opd)+ip/eip → ip/eip 近轉(zhuǎn)移:(opd) → ip/eip
遠(yuǎn)轉(zhuǎn)移:(opd) → ip/eip, (opd+2/4) → cs,或根據(jù)描述符決定
cx為0轉(zhuǎn)移
jump if cx is zero
jcxz 標(biāo)號(hào)
或jecxz 標(biāo)號(hào)
若(cx/ecx) = 0 轉(zhuǎn)移
循環(huán)
loop
loop 標(biāo)號(hào)
或loopw/loopd 標(biāo)號(hào)
(cx/ecx) – 1 → cx/ecx, 若(cx/ecx) ≠ 0 則轉(zhuǎn)移
相等/為0循環(huán)
loop if equal/zero
loope/loopz 標(biāo)號(hào) (cx/ecx) – 1 → cx/ecx,若(cx/ecx) ≠ 0 且zf = 1 則轉(zhuǎn)移
不相等/不為0循環(huán)
loop if not equal/not zero
loopne/loopnz 標(biāo)號(hào) (cx/ecx) – 1 → cx/ecx,若(cx/ecx) ≠ 0 且zf = 0 則轉(zhuǎn)移
檢查數(shù)組下標(biāo)邊界
check array index against bounds
bound reg, ops 若reg的索引值小于ops指定的下邊界或大于ops指定的上邊界,則變成5號(hào)異常
調(diào)用子程序
call a procedure
call opd 調(diào)用opd所指定的子程序(32位段的遠(yuǎn)調(diào)用時(shí),CS被擴(kuò)展成4字節(jié)后壓棧) 任務(wù)切換有影響,否則無
從子程序返回
return from procedure
ret [n]
n代表16位常量,[]表可選
從子程序返回到調(diào)用語句的下一個(gè)語句處,若n存在,則(sp/esp)+n → sp/esp;32位段遠(yuǎn)返回時(shí),cs出棧時(shí)改變4字節(jié)的棧指針
中斷調(diào)用
interrupt
int n (flags/eflags) 入棧,0→if,tf;(cs) 入棧;(4*n)→ip,(4*n+2)→cs或根據(jù)idt給eip,cs賦值 0→tf,if,返回時(shí)復(fù)原
溢出中斷
interrupt if overflow
into (flags/eflags) 入棧,0→if,tf;(cs) 入棧;(4*n)→ip,(4*n+2)→cs或根據(jù)idt給eip,cs賦值;of=1時(shí)產(chǎn)生int 4 0→tf,if,返回時(shí)復(fù)原
中斷返回
interrupt return
iret 或iretd(32位段)
或iretf
ip出棧,cs出棧,flags/eflags出棧,根據(jù)nt標(biāo)志做相應(yīng)的處理 都有影響

四、串操作指令

指令名稱

匯編語句格式

功能

影響標(biāo)志位

串傳送
move byte/word string
movs opd, ops
movsb,movsw,movsd
(ds:[si/esi]) → es:[di/edi],(ops所在的段可以取代ds),(si/esi)±1/2/4 → si/esi, (di/edi)±1/2/4 → di/edi
串比較
compare string
cmps ops, opd
cmpsb,compsw,compsd
(ds:[si/esi]) – (es:[di/edi]),(si/esi)±1/2/4 → si/esi,
(di/edi)±1/2/4 →di/edi
af,cf,of,pf,
sf,zf
串搜索
scan string
scas opd
scasb,scasw,scasd
(al/ax/eax) – (es:[di/edi]),(di/edi)±1/2/4 →di/edi af,cf,of,pf,
sf,zf
取字符串
load string
lods ops
lodsb, lodsw,lodsd
(ds:[si/esi]) → al/ax/eax,(ops所在的段可以取代ds),
(si/esi)±1/2/4 →si/esi
存字符串
store string
stos opd
stosb,stosw,stosd
(al/ax/eax)→es:[di/edi],(di/edi)±1/2/4 →di/edi
輸入串
input from port to string
ins opd, dx
insb,insw,insd
([dx]) →es:[di/edi],(di/edi)±1/2/4 →di/edi
輸出串
output string port
outs opd, ops
outsb,outsw,outsd
(ds:[si/esi])→[dx],(si/esi)±1/2/4 →si/esi
重復(fù)前綴
repeat string operation
rep 串操作指令
repe/repz 串操作指令
repne/repnz 串操作指令
若(cx/ecx) ≠ 0,執(zhí)行一個(gè)串操作,(cx/ecx)-1→cx/ecx,返回再做
若(cx/ecx) ≠ 0且zf=1,執(zhí)行一次串操作,(cx/ecx)-1→cx/ecx,返回
若(cx/ecx) ≠ 0且zf=0,執(zhí)行一次串操作,(cx/ecx)-1→cx/ecx,返回

五、位操作指令

指令名稱

匯編語句格式

功能

影響標(biāo)志位

求反
one's complement negation
not opd ▁▁▁▁▁
(opd)→opd
邏輯乘
and
and opd, ops (opd)∧(ops)→opd pf,sf
位測(cè)試
bit test
bt opd, ops 將(ops)作為位偏移(0~31)指明的opd對(duì)應(yīng)位的值→CF cf
位測(cè)試并求補(bǔ)
bit test and complement
btc opd, ops 在bt指令的基礎(chǔ)上,將opd的對(duì)應(yīng)位求反后→opd cf
位測(cè)試并清0
bit test and reset
btr opd, ops 在bt指令的基礎(chǔ)上,將0→opd的對(duì)應(yīng)位 cf
位測(cè)試并置1
bit test and set
bts opd, ops 在bt指令的基礎(chǔ)上,將1→opd的對(duì)應(yīng)位 cf
正向位掃描
bit scan forward
bsf reg, ops 從0位開始掃描ops各位,若均為0,則zf=1,否則將第一個(gè)為1的位置值
→reg,zf=0
zf
反向位掃描
bit scan reverse
bsr reg, ops 從最高位開始掃描ops各位,若均為0,則zf=1,否則,將首先碰到的為1的位置值→reg,zf=0 zf
測(cè)試
test
test opd, ops (ops)∧(opd) sf,zf,pf;
0→of,cf
邏輯加
inclusive or
or opd, ops (opd)∨(ops)→opd sf,zf,pf;
0→of,cf
按位加
exclusive or
xor opd, ops 加法,就是用異或的計(jì)算方法了 sf,zf,pf;
0→of,cf
算術(shù)左移
shift arithmetic left
sal opd, 1 ;sal opd, cl;
sal opd, 8位立即數(shù)
cf中的值是最后移入位的值 sf,zf,pf,cf
邏輯左移
shift logic left
shl opd, 1; shl opd, cl
shl opd, 8位立即數(shù)
cf中的值是最后移入位的值 sf,zf,pf,cf
雙精度左移
double precision shift left
shld opd, reg,八位立即數(shù)
shld opd, reg, cl
將reg的最高n位移入opd的低n位中,reg保持不變,opd最后移入的一位保存在cf中 cf,sf,zf,pf
算術(shù)右移
shift arithmetic rigtht
sar opd,1; sar opd, cl
sar opd, 8位立即數(shù)
將(opd)向右移動(dòng)n個(gè)指定的次數(shù)且最高位保持不變,cf的內(nèi)容為最后移入位的值 sf,zf,pf,cf
邏輯右移
shift logical right
shr opd, 1; shr opd cl
shr opd, 8位立即數(shù)
將(opd)向右移動(dòng)n規(guī)定的次數(shù),最高位補(bǔ)入0,cf的內(nèi)容為最后移入位的值 sf,zf,pf,cf
雙精度右移
double precision shift right
shrd opd, reg,8位立即數(shù)
shrd opd, reg, cl
將reg的最低n位移入opd高n位中,reg保持不變,opd最后移出的一位保存在cf中 cf,sf,zf,pf
循環(huán)右移
rotate rigth
ror opd, 1; ror opd cl
ror opd, 8位立即數(shù)
將目的操作數(shù)的最高位和最低位連接起來,組成一個(gè)環(huán),將環(huán)中的所有位一起向右移動(dòng)n位規(guī)定的數(shù)目(cl或立即數(shù)確定),cf為最后移入位的值 cf
循環(huán)左移
rotate left
rol opd,1; rol opd cl
rol opd, 8位立即數(shù)
同上,向左移動(dòng) cf
帶進(jìn)位的循環(huán)右移
rotate right through carry
rcr opd, 1; rcr opd, cl
rcr opd, 8位立即數(shù)
cf在最低位,與目的操作數(shù)連成環(huán),移動(dòng) cf
帶進(jìn)位的循環(huán)左移
rotate left through carry
rcl opd, 1; rcl opd, cl
rcl opd, 8位立即數(shù)
cf在最高位,與目的操作數(shù)連成環(huán),移動(dòng)指定的位數(shù) cf

六、尋址方式

尋址方式

格式

功能

實(shí)例

寄存器尋址 R 寄存器R的內(nèi)容就是操作數(shù)(R是任意寄存器個(gè)別指令的限制除外)
R可以是ax,bx,cx,dx,cs,ds,ss,es…….
inc bx
寄存器間接尋址 [R]
SS:[R]; 堆棧段
DS:[R]; 數(shù)據(jù)段
操作數(shù)在主存儲(chǔ)器中,而操作數(shù)的偏移地址EA在指明的寄存器中
16位:只能是bx,bp,si,di
32位:通用寄存器(eax,ebx,ecx,edx,edi,esi,ebp,esp)
未指明段時(shí),bp,ebp,esp為堆棧段,其余是數(shù)據(jù)段
mov a, [si]
mov cx, [ebp]
變址尋址 16位:[R+V],[R]+V,V[R]
32位:[R*F+V],
[R*F]+V,V[R*F]
操作數(shù)在主存儲(chǔ)器中,偏移地址EA在指定寄存器R的內(nèi)容乘以比例因子F與給出位移量V的和。
位移量V是不超過16位或不超過32位的二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù)(立即數(shù)),也可以是符合語法規(guī)則的數(shù)值表達(dá)式,變量標(biāo)號(hào),
最后計(jì)算的偏移量是無符號(hào)數(shù),
未明確段時(shí),規(guī)則如上
mov al, [ebx*2]+5
add –2[bp], ax
mov 2*10h[si]

基址加變址尋址 16位:[bx/bp+si/di+V]
        V[bx/bp][si/di]
        V[bx/bp+si/di]
32位:[BR+IR*F+V],
        V[BR][IR*F],
        V[BR+IR*F]
操作數(shù)在主存儲(chǔ)器中,偏移地址EA是指令中基址寄存器的內(nèi)容、變址寄存器的內(nèi)容乘以比例因子、位移量V三項(xiàng)之和
32位時(shí)IR不能是esp,
br中的來確定段
mov ax, 8[bx][si]
mov eax, –6[edi*2][ebp]
立即尋址 n 所提供額操作數(shù)是緊跟在指令碼后面的一個(gè)采用8位、16位或32位二進(jìn)制補(bǔ)碼表示的有符號(hào)書,構(gòu)成指令的一部分
n是立即數(shù),可以是占用1個(gè)字節(jié),2個(gè)字節(jié),4個(gè)字節(jié)的存儲(chǔ)單元,具體的類型必須要表示出來,根據(jù)指令的其它部分來決定,n只能是常數(shù)或結(jié)果為確定值的表達(dá)式,且只能做源操作數(shù)
mov word ptr [si],12h
add eax, -12345678h
直接尋址 段寄存器名:[n]
變量
變量+常量
操作數(shù)在主存儲(chǔ)器中,
n是一個(gè)數(shù)值或數(shù)值表達(dá)式時(shí),直接表明操作數(shù)的偏移地址值,且為無符號(hào)數(shù),[n]不能指明段寄存器,所以加了一個(gè)段說明符,
變量或變量+常量的地址表達(dá)式在匯編過程中被轉(zhuǎn)換成“段寄存器名:[n]”的形式,期中n是匯編程序計(jì)算地址表達(dá)式得到的結(jié)果,
mov ds:[20h], cl
inc buf; (buf是定義的變量)
mov ax, array1
mov array, bx
sub cx, array3
mov dx, array4+3
(array* 是定義的變量)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多