3 .2 指令系统

16
3 2 指指指指指指指指数数 数数数 数数数数数数 数数数数数 数数数数数数数 () 数数数数数 数数数数数数 数数数数数数数

Upload: erich-shepard

Post on 01-Jan-2016

67 views

Category:

Documents


0 download

DESCRIPTION

3 .2 指令系统. 按功能分为: 数据传送指令 算术运算指令 位处理指令(逻辑运算指令) 串操作指令 控制转移指令 处理机控制指令. 二、 算术运算指令— 加法指令. 内存. AX , BX CX , DX SI , DI B P , SP. AH,AL CH , CL DH , DL BH , BL. 立即数. DS , ES,SS. 1、 ADD 指令 格式: ADD dest , src 功能: ( dest)  ( dest)+(src) 例如: ADD AX , BX ADDCL , [SI] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 3 .2 指令系统

3 . 2 指令系统

按功能分为:•数据传送指令•算术运算指令•位处理指令(逻辑运算指令)•串操作指令•控制转移指令•处理机控制指令

Page 2: 3 .2 指令系统

二、算术运算指令—加法指令

1 、 ADD 指令

格式: ADD dest , src

功能: (dest) (dest)+(src)

例如:

ADD AX , BX

ADD CL , [SI]

ADD CL , AL

ADD DX , ES

ADD AL , 30H

ADD BYTE PTR [DI] , 12H

AX , BX

CX , DX

SI , DI

BP , SP

AH , AL

CH , CL

DH , DL

BH , BL

DS , ES ,SS

内存

立即数

影响标志位 OF SF ZF AF CF

Page 3: 3 .2 指令系统

CF—— 表示无符号数相加的溢出。

OF—— 表示带符号数相加的溢出。AF——BCD 数运算的调整指令中 , 该位和CF 位会影响是否对低、高 4 位进行调整

1 结果为负0 否则

SF=1 结果为 00 否则

ZF=

1 和的最高位向高位有进位0 否则

CF=

1 两个操作数符号相同,而结果符号与之相反0 否则

OF=

ADD 指令对标志位 SF ZF CF OF AF

1 D3 产生进位0 否则

AF=

Page 4: 3 .2 指令系统

无符号数溢出

0 0 0 0 0 1 1 1

+ 1 1 1 1 1 0 1 1

0 0 0 0 0 0 1 0

有: (+7)+(-5)=+2 OF=0

无: 7+251=2 CF=1

有符号数和无符号数都不溢出

0 0 0 0 0 1 0 0

+ 0 0 0 0 1 0 1 1

0 0 0 0 1 1 1 1

有: (+4)+(+11)=+15 OF=0

无: 4+11=15 CF=0

有符号数溢出

0 0 0 0 1 0 0 1

+ 0 1 1 1 1 1 0 0

1 0 0 0 0 1 0 1

有 :(+9)+(+124)=-123 OF=1

无 :9+124=133 CF=0

有符号数和无符号数都溢出

1 0 0 0 0 1 1 1

+ 1 1 1 1 0 1 0 1

0 1 1 1 1 1 0 0

有: (-121)+(-11)=+124 OF=1

无: 135+245=124 CF=1

n=8bit 带符号数 (-128~127) 无符号数 (0~255)

有符号数溢出 :OF= 最高位进位 异或 次高位进位

Page 5: 3 .2 指令系统

二、算术运算指令—加法指令

2 、 ADC 指令

格式: ADC dest , src

功能: (dest) (dest)+(src)+CF

例如:

ADC AX , BX

ADC CL , [SI]

ADC CL , AL

ADC DX , ES

AX , BX

CX , DX

SI , DI

BP , SP

AH , AL

CH , CL

DH , DL

BH , BL

DS , ES ,SS

内存

立即数

•ADD 、 ADC 影响标志位OF SF ZF AF CF •INC 不影响 CF INC 3

3 、 INC 指令

格式: INC dest

功能: (dest) (dest) + 1

例如: INC CX

Page 6: 3 .2 指令系统

例:双字数据的加法

(DX)= 0002H ( AX ) = 0F365H ( BX ) = 0005H ( CX ) = 0E024H

(DX):(AX)=0002H:F365H 与 (BX):(CX) =0005H:E024H 相加

即是: (DX):(AX) + (BX):(CX)= (DX):(AX)

2F365H+5E024H=8D389H

( 1 )执行后

( AX ) = 0D389H CF=1 OF=0

SF=1 ZF=0

AXF 3 6 5 H

CXE 0 2 4 HADD

AXD 3 8 9 HCF←1

指令序列 (1) ADD AX, CX

(2) ADC DX, BX

DX 0 0 0 2 H

BX 0 0 0 5 H

ADC

DX0 0 0 8 HCF←0

CF=1

( 2 ) 执行后

( DX ) = 0008H CF=0 OF=0

SF=0 ZF=0DEBUG演示

Page 7: 3 .2 指令系统

二、算术运算指令—减法指令

4 、 SUB 指令

格式: SUB dest , src

功能: (dest) (dest) - (src)

(注意操作顺序)

例如:

SUB AX , BX

SUB CL , [SI]

SUB DX , ES

SUB BP , 78H

SUB [SI] , BYTE PTR 64H

AX , BX

CX , DX

SI , DI

BP , SP

AH , AL

CH , CL

DH , DL

BH , BL

DS , ES ,SS

内存

立即数

•影响标志位 OF SF ZF AF CF

Page 8: 3 .2 指令系统

二、算术运算指令—减法指令

5 、 SBB 指令

格式: SBB dest , src

功能: (dest) (dest) - (src) -CF

例如:

SBB AX , BX

SBB CL , [SI]

SBB CL , 56H

AX , BX

CX , DX

SI , DI

BP , SP

AH , AL

CH , CL

DH , DL

BH , BL

DS , ES ,SS

内存

立即数

•SUB 、 SBB 影响标志位OF SF ZF AF CF •DEC 不影响 CF DEC 3

6 、 DEC 指令

格式: DEC dest

功能: (dest) (dest) - 1

例如: DEC CX

DEC CL

Page 9: 3 .2 指令系统

二、算术运算指令—减法指令

7 、 CMP 指令

格式: CMP dest , src

功能: (dest) - (src)

例如:

CMP AX , BX

CMP CL , [SI]

CMP CL , 56H

AX , BX

CX , DX

SI , DI

BP , SP

AH , AL

CH , LD

DH , DL

BH , BL

DS , ES ,SS

内存

立即数

•CMP 影响标志位不保存结果•NEG 不影响标志位 NEG 3

(dest)

8 、 NEG 指令

格式: NEG dest

功能: (dest) + 1 (求补

运算)例如: NEG CL

NEG DX

NEG SI

Page 10: 3 .2 指令系统

二、算术运算指令—加法调整指令 (P78)

9 、 DAA 指令

格 式 : 必 须 紧 跟 在ADD 、 ADC 之后。

•OF 不确定,其余标志位随运算结果而变。•只能在 ADD 或 ADC 之后出现。

>9 , AF=0

AL 低 4位

AF=1

AL←AL+06H

AL 高 4位

>9 , CF=0

CF=1

AL←AL+60H

CF=1

功能:对 AL 中的压缩 BCD码加法结果进行修正。

例如 19+8=27 的 BCD 加法

0001 1001+0000 1000

0010 0001

AF=1

+06H修正

0001 1001+0000 0110

0010 0111

27BCD

Page 11: 3 .2 指令系统

二、算术运算指令—加法调整指令 (1834)BCD+ (2789)BCD=4623D

MOV AL , 34H ;( AL ) =34H

ADD AL , 89H ;( AL ) =34+89=BDH

DAA ;( AL ) =BDH+60H+06H=23H(AF=CF=1 )

MOV AH , AL ;( AH ) =23H

MOV AL , 18H ;( AL ) =18H

ADC AL , 27H ;( AL ) =18+27+1=40H

DAA ;( AL ) =40H+06H=46H ( AF=1 CF=0 )

XCHG AH , AL ; AX= (1834+2789=4623)BCD

DEBUG演示

运算 :

1834H+2789H=40BDHDAA

4623H (4623)BCD

Page 12: 3 .2 指令系统

二、算术运算指令—减法调整指令

10 、 DAS 指令

格式:必须紧跟在 SUB 、 SBB之后。

•OF 不确定,其余标志位随运算结果而变。•只能在 SUB 或 SBB 之后出现。

AL 低 4位

> 9

AF=1

AL←AL 06H﹣

AL 高 4位

> 9

CF=1

AL←AL 60H﹣

功能:对 AL 中的压缩 BCD码减法结果进行修正。

例如 34 ﹣ 89=45 的 BCD减法

0011 0100﹣ 1000 1001

1010 1011

AF=1

﹣ 06H修正

45BCD

CF=1

1010 1011﹣ 0110 0110

0100 0101

BCD 数只能表示无符号数

Page 13: 3 .2 指令系统

二、算术运算指令—乘法指令11 、 MUL 指令

格式: MUL src

功能:若 src 是字节数据,则 AL=dest

若 src是字数据,则 AX=dest

AX ← AL*SRC

DX:AX ← AX*SRC

•AL(AX) 为隐含的乘数寄存器•AX(DX : AX) 为隐含的乘积寄存器•src 不能为立即数。•除 CF 和 OF ,对条件标志位无定义

12 、 IMUL 指令

格式: IMUL src

功能: IMUL 同 MUL 只是针对有符号数。

Page 14: 3 .2 指令系统

二、算术运算指令—乘法指令

00 乘积的高一半为零,无有效数据11 否则MUL 指令 : CF/OF =

00 乘积的高一半是符号扩展,无有效数据11 否则 IMUL 指令 : CF/OF =

•乘法指令对标志位影响:

例:MUL CL ;( AL ) * ( CL )积在 AX 中MUL SI ;( AX ) * ( SI )积在 DX : AX

中MUL AX ;( AX ) * ( AX )积在 DX :

AX 中

Page 15: 3 .2 指令系统

二、算术运算指令—除法指令

•AX(DX : AX) 隐含的被除数寄存器。•AL(AX) 隐含的商寄存器。•AH(DX) 隐含的余数寄存器。•src 不能为立即数。• 对所有条件标志位均无定义。•商溢出错时,产生除法出错中断。

13 、 DIV 指令

格式: DIV src

功能:

若 src 是字节数据,则被除数是 AX

若 src 是字节数据,则被除数是 DX : AX

商: AL ←AX / SRC

余数: AH AX % SRC

商: AX ←DX : AX / SRC

余数: DX DX :AX % SRC14 、 IDIV 指令

格式: IDIV src

功能: IDIV 同 DIV 只是针对有符号数。

Page 16: 3 .2 指令系统

二、算术运算指令—符号扩展指令 •无操作数指令•隐含对 AL 或 AX 进行符号扩展•不影响条件标志位。

15 、 CBW 指令

格式: CBW

功能: 若 (AL) 的最高有效位为 0 ,则 (AH)= 00H 若 (AL) 的最高有效位为 1 ,则 (AH)= 0FFH

16 、 CWD 指令

格式: CWD

功能: 若 (AX) 的最高有效位为 0 ,则 (DX)= 0000H 若 (AX) 的最高有效位为 1 ,则 (DX)= 0FFFFH

例: (AX)=0BA45H=1011 1010 0100 0101B

CBW ; (AX)=0045H

CWD ; (DX)=0FFFFH (AX)=0BA45H