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