第 3 章 學習 80x86 指令
本章提要 80x86 的指令格式與分類 搬動資料的指令群 算術指令群、邏輯運算指令群 平移與旋轉指令 流程控制與旗標控制指令 字串處理指令群 I/O 指令群、 CPU 控制指令群
80x86 的指令格式 [ 前置指令 ] 指令 [ 運算元 1 [, 運算元 2 [, 運算元 3 ]]] 其中, [ ] 內的項目依指令之性質而使用, 有的指令可以加上前置指令, 有的不能。 指令與運算元之間要以空格隔開, 而運算 元之間要以逗號隔開。
80x86 指令的分類 資料傳送指令群 算術運算指令群 位元運算指令群 流程控制指令群 字串處理指令群 I/O 指令群 系統控制指令群
資料傳送指令群
算術運算指令群
位元運算指令群
流程控制指令群
字串處理指令群
I/O 指令群
系統控制指令群
80x86 的 3 種定址法 暫存器定址法 Register addressing mode 立即定址法 Immediate addressing mode 記憶位址定址法 Memory addressing mode
記憶位址定址法的分類 直接定址法 Direct addressing mode 間接定址法 Indirect addressing mode 基底定址法 Based addressing mode 索引定址法 Indexed addressing mode 基底索引定址法 Based indexed addressing mode
暫存器定址法
節區暫存器之間不能互傳資料:
立即定址法 立即定址法的資料是儲存於指令本身:
立即定址法
直接定址法
間接定址類的定址法
間接定址法
基底定址法
索引定址法
基底索引定址法
間接定址類的寫法 mov ax, [bx + di + 6] mov ax, [bx + 6] [di] mov ax, 6 [bx + di] mov ax, [bx] [di] [6]
搬動資料的指令 MOV
記憶位址上的資料不能直接互相 mov, 所 以:
搬動資料的指令 MOV 只有一般暫存器的值才能 mov 至節區暫 存器, 所以:
搬動資料的指令 MOV
搬動資料的指令 MOVSX 、 MOVZX
搬動資料的指令 XCHG
搬動資料的指令 LAHF 、 SAHF
查表指令 XLAT 、 XLATB
Xlat 主要是做為表格式數碼轉換, 例如:
查表指令 XLAT 、 XLATB
PUSH 、 POP
堆疊指令群
取位址至暫存器 LEA 、 LDS 、 LES
算術指令 ADD 、 ADC
算術指令 SUB 、 SBB
算術指令 INC 、 DEC 、 NEG
比較指令 CMP
整數相乘指令 MUL 、 IMUL
算術指令 DIV 、 IDIV
CBW 、 CWD (CWDE 、 CDQ)
用 cwd 來算絕對值
認識 BCD BCD 為 Binary Coded Decimal 的簡寫, 就是以 Binary 來表示十進數的意思。
BCD 調整指令
aaa: (Ascii Adjust after Addition)
aas: (Ascii Adjust after Substraction)
aam: (Ascii Adjust after Multiplication)
aad: (Ascii Adjust before Division)
daa: (Decimal Adjust AL after Addition)
das: (Decimal Adjust After Substraction)
BCD 調整指令
邏輯運算指令群
邏輯運算的真值表
邏輯運算指令
平移與旋轉指令
移動方式 shr shl 和 sal
移動方式 sar
邏輯與算術移動說明 mov ah,82h ; 82h 即有號數的 -126 sar ah,1 ;除以 2
邏輯與算術移動說明
旋轉指令群
旋轉方向 ror rol
旋轉方向 rcr 及 rcl
旋轉指令
位元測試與設定指令群
位元測試指令 bt
旗標設定指令群
旗標設定指令
跳躍指令群
條件式跳躍指令 jxx
跳躍指令
呼叫副程式及返回主程式的指令
進入及離開高階函式
中斷指令群
中斷指令
迴圈指令群
迴圈指令
字串處理
字串處理指令群
字串處理指令
前置迴圈指令群
字串指令及其配用之前置指令 與指位器
前置迴圈指令
I/O 指令群
I/O 指令
延時、補空指令 NOP
記憶位址範圍檢查指令 BOUND
Real 模式的 CPU 控制
保護模式下的指令