ICS汇编学习笔记——8086的指令系统
8086/8088的指令系統(tǒng)包含了六種類型,其中數(shù)據(jù)傳送指令14條,算術(shù)運(yùn)算指令20條,邏輯運(yùn)算指令13條,串操作指令10條,控制轉(zhuǎn)移指令28條,處理器控制指令12條。
1)數(shù)據(jù)傳送類指令(14條)
MOV: 傳送
PUSH、POP:堆棧操作
XCHG:交換
IN、OUT:外設(shè)(端口)輸入輸出
XLAT:轉(zhuǎn)換/換碼/翻譯 DS:[BX+AL]=>AL
LEA、LDS、LES:地址傳送(計(jì)算)
PUSHF/POPF、LAHF/SAHF:標(biāo)志傳送
2)算術(shù)運(yùn)算類指令指令(20條)
ADD、ADC、AAA、DAA: 加法
INC:加"1"
SUB、SBB、AAS、DAS: 減法
DEC:減"1"
CMP:比較;不修改被減數(shù)
NEG:求補(bǔ)指令;x=-x 等價(jià)于0-X
MUL、IMUL、AAM:乘法;
DIV、IDIV、AAD:除法
CBW、CWD、CDQ:累加器有符號(hào)擴(kuò)展 linux CBTW、CWTD、CLTQ
MOVZX:無(wú)符號(hào)擴(kuò)展
MOVSX:有符號(hào)擴(kuò)展
3)邏輯運(yùn)算指令(13條)-位操作指令
NOT: 求反
AND: 與、邏輯乘
OR: 或、邏輯加
XOR: 異或
TEST:位測(cè)試,同AND,不修改操作數(shù)
SHL、SHR、SAL、SAR:邏輯/算術(shù)移位
ROL、ROR、RCL、RCR:循環(huán)移位、帶進(jìn)位循環(huán)移位
4)串操作指令(10條) -數(shù)組操作指令
MOVSx: 串傳送(拷貝) REP MOVS
CMPSx: 串比較 REPZ CMPS
SCASx: 串掃描(搜索某元素) REPNZ SCAS
LODSx: 取字符串(取數(shù)組某元素) LODS
STOSx: 存字符串(寫數(shù)組某元素) (REP) STOS
注:串操作的四大準(zhǔn)備: SI(源串地址)、DI(目的串地址)、CX(計(jì)數(shù)器)、DF(方向)
指令中的x可以取:B(1字節(jié)) W(2字節(jié)) D/L(4字節(jié)) Q(8字節(jié))
5)控制轉(zhuǎn)移類指令(28條)
CALL、RET: 子程序調(diào)用、返回
JMP:無(wú)條件轉(zhuǎn)移指令
JZ/JNZ/JE/JNE、JC/JNC(CF位)、JO/JNO(OF位)、/JS/JNS、JP/JNP/JPE/JNPE:條件轉(zhuǎn)移-按標(biāo)志位轉(zhuǎn)移指令
JA、JAE、JB、JBE:(above/below)條件轉(zhuǎn)移-無(wú)符號(hào)數(shù)比較轉(zhuǎn)移
JG、JGE、JL、JLE:(greater/lower)條件轉(zhuǎn)移-有符號(hào)數(shù)比較轉(zhuǎn)移
LOOP:循環(huán) cx–, jnz L
LOOPE 、LOOPNE:條件循環(huán)
JCXZ:計(jì)數(shù)器CX==0轉(zhuǎn)移
INT n:中斷調(diào)用(BIOS/OS系統(tǒng)調(diào)用)
IRET:中斷返回
INTO:溢出中斷指令
幾種轉(zhuǎn)移(Jcc)
由于地址是一個(gè)32位或64位的數(shù),在轉(zhuǎn)移時(shí)如果直接用絕對(duì)地址放到指令中,會(huì)導(dǎo)致指令的二進(jìn)制編碼很長(zhǎng),因此在實(shí)際中往往采用跳轉(zhuǎn)的目的地址與跳轉(zhuǎn)指令的下一條指令的地址的偏差作為跳轉(zhuǎn)的目標(biāo)。
其中,短轉(zhuǎn)移: 偏差在-128~127之間
判斷單個(gè)標(biāo)志位狀態(tài)
⑴JZ/JE和JNZ/JNE:利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等)
⑵JS和JNS:利用符號(hào)標(biāo)志SF,判斷結(jié)果是正是負(fù)
⑶JO和JNO:溢出標(biāo)志OF,判斷結(jié)果是否產(chǎn)生溢出
⑷JP/JPE和JNP/JPO:奇偶標(biāo)志PF,判斷結(jié)果中最低字節(jié)“1”的個(gè)數(shù)是偶是奇
⑸JC/JB/JNAE和JNC/JNB/JAE:利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位
無(wú)符號(hào)數(shù)的大小用高(Above)低(Below)表示
利用CF確定高低、利用ZF標(biāo)志確定相等(Equal)
兩數(shù)的高低分成4種關(guān)系:
⑴低于(不高于等于):JB(JNAE)
⑵不低于(高于等于):JNB(JAE)
⑶低于等于(不高于):JBE(JNA)
⑷不低于等于(高于):JNBE(JA )
有符號(hào)數(shù)的大(Greater)小(Less)需要組合OF、SF標(biāo)志,并利用ZF標(biāo)志確定相等(Equal)
兩數(shù)的大小分成4種關(guān)系:
⑴小于(不大于等于):JL(JNGE)
⑵不小于(大于等于):JNL(JGE)
⑶小于等于(不大于):JLE(JNG)
⑷不小于等于(大于):JNLE(JG)
6)處理機(jī)控制指令(12條)
CLC: CF=0
CMC: CF取反
STC: CF=1
STD: DF=1
CLD: DF=0
STI: IF=1
CLI: IF=0
HLT:處理機(jī)暫停
WAIT:等待狀態(tài)(FPU異常同步)
ESC:將數(shù)據(jù)傳送給FPU(浮點(diǎn)指令)
LOCK:保證總線的控制
NOP:無(wú)操作 同XCHG AX,AX 占1個(gè)時(shí)鐘,1個(gè)字節(jié)。用于延時(shí)、預(yù)留指令等
總結(jié)
以上是生活随笔為你收集整理的ICS汇编学习笔记——8086的指令系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ICS汇编学习笔记——8086中的寄存器
- 下一篇: ICS汇编学习笔记——操作数寻址方式