第 3 章 學習 80x86 指令. 本章提要 80x86 的指令格式與分類 搬動資料的指令群...

119
第 3 第 第第 80x86 第第
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    386
  • download

    9

Transcript of 第 3 章 學習 80x86 指令. 本章提要 80x86 的指令格式與分類 搬動資料的指令群...

第 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 至節區暫存器 , 所以:

搬動資料的指令 MOV

搬動資料的指令MOVSX 、 MOVZX

搬動資料的指令 XCHG

搬動資料的指令 XCHG

搬動資料的指令 LAHF 、 SAHF

搬動資料的指令 LAHF 、 SAHF

查表指令 XLAT 、 XLATB

查表指令 XLAT 、 XLATB

Xlat 主要是做為表格式數碼轉換 , 例如:

查表指令 XLAT 、 XLATB

查表指令 XLAT 、 XLATB

PUSH 、 POP

PUSH 、 POP

堆疊指令群

堆疊指令群

堆疊指令群

取位址至暫存器 LEA 、 LDS 、 LES

取位址至暫存器 LEA 、 LDS 、 LES

取位址至暫存器 LEA 、 LDS 、 LES

算術指令 ADD 、 ADC

算術指令 ADD 、 ADC

算術指令 SUB 、 SBB

算術指令 SUB 、 SBB

算術指令 INC 、 DEC 、 NEG

算術指令 INC 、 DEC 、 NEG

比較指令 CMP

比較指令 CMP

整數相乘指令 MUL 、 IMUL

整數相乘指令 MUL 、 IMUL

算術指令 DIV 、 IDIV

算術指令 DIV 、 IDIV

CBW 、 CWD (CWDE 、 CDQ)

CBW 、 CWD (CWDE 、 CDQ)

用 cwd 來算絕對值

用 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 調整指令

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 控制

保護模式下的指令