16位組合語言暫存器及指令整理
阿新 • • 發佈:2019-01-27
第一次寫部落格,有點小緊張~
暫存器
通用暫存器
8位暫存器 | 16位暫存器 | 32位暫存器 | 暫存器名稱 |
---|---|---|---|
AH,AL | AX | EAX | 累加暫存器 |
BH,BL | BX | EBX | 基地址暫存器 |
CH,CL | CX | ECX | 計數器暫存器 |
DH,DL | DX | EDX | 資料暫存器 |
SI | ESI | 源變址暫存器 | |
DI | EDI | 源目標暫存器 | |
DH,DL | DX | EDX | 基地址暫存器 |
DH,DL | DX | EDX | 棧頂暫存器 |
段暫存器
標號 | 名稱 |
---|---|
CS | 程式碼段 |
DS | 資料段 |
SS | 棧段 |
ES | 附加資料段 |
GS,FS | 附加資料段(+80386) |
專用暫存器
標號 | 名稱 |
---|---|
IP,EIP | 指令指標 |
Flags | EFlags |
微機CPU指令系統
資料傳送指令
- 傳送指令 MOV
- 傳送-填充指令 MOVSX/MOVZX
- 交換指令 XCHG
- 進棧操作指令 PUSH,PUSHA(80286+),PUSHAD(80386+)
- 出棧操作指令 POP,POPA(80286+),POPAD((80386+))
- 轉換指令 XLAT
- 取有效地址指令 LEA
- 取段暫存器指令 LDS
- 位元組交換指令 BSWP
算數運算指令
加法指令
- 加法指令 ADD
- 帶進位加法指令 ADC
- 加一指令 INC
- 交換相加指令 XADD
減法指令
- 減法指令 SUB
- 帶錯位減(目的運算元-源運算元-標誌位CF) SBB
- 減一指令 DEC
- 求補指令(改變正負) NEG
乘法指令
- 無符號乘法指令 MUL
乘數位數 | 隱含被乘數 | 儲存暫存器 | 例 |
---|---|---|---|
8位 | AL | AX | MUL BL |
16位 | AX | DX-AX | MUL BX |
32位 | EAX | EDX-EAX | MUL ECX |
2. 有符號數乘法指令 IMUL(80286-)同上
除法指令
- 無符號數除法指令 DIV
除數位數 | 隱含被除數 | 商 | 餘數 | 例子 |
---|---|---|---|---|
8位 | AX | AL | AH | DIV BH |
16位 | DX-AX | AX | DX | DIV BX |
32位 | EDX-EAX | EAX | EDX | DIV ECX |
2. 有符號數的除法指令IDIV
型別轉換指令
- 位元組->字 CBW:AL中符號數->AH
- 字->雙字 CWD:AX符號位->DX
- 字變雙字CWDE;80386+:AX符號位->EAX
- 雙字->四字:CDQ;80386+:EAX->EDX
邏輯運算指令
- 邏輯與 AND
- 邏輯或 OR
- 邏輯非 NOT
- 邏輯異或 XOR
移位操作指令
- 算數位移指令SAL(左)/SAR(右)
- 邏輯移位指令(補零) SHL/SHR
- 迴圈右移指令(帶進位) ROL/ROR
處理機制指令
指令 | 效果 |
---|---|
CLC | CF<-0 |
CMC | CF<-{CF} |
STC | CF<- 1 |
CLD | DF<- 0 |
STD | DF<- 1 |
CLI | IF<- 0 |
STI | IF<- 1 |
NOP | 無操作 |
HLT | 停機 |
WAIT | 等待 |
ESC | 換碼 |
LOCK | 封鎖 |