计算机第3章 指令系统(一)_第1页
计算机第3章 指令系统(一)_第2页
计算机第3章 指令系统(一)_第3页
计算机第3章 指令系统(一)_第4页
计算机第3章 指令系统(一)_第5页
已阅读5页,还剩116页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章

指令系统

n★★

§3.1概述

了解:

•指令及指令系统;

•指令的格式;

指令中的操作数类型。

3

一、指令与指令系统

指令:

控制计算机完成某种操作的命令

指令系统:

处理器所能识别的所有指令的集合

指令的兼容性:

同一系列机的指令都是兼容的o

4

二、指令格式

指令中应包含的信息:

「执行的操作

<运算数据的来源

:运算结果的去向

5

指令格式:

'零操作数指令操作码

单操作数指令操作码操作数

双操作数指令操作码操作数,操作数

<多操作数指令三操作数及以上

7

三、指令中的操作数

r表征参加操作的数据本身一立即数

「寄存器

表征数据存放的地方、地址

存储器

★¥

*

8

操作数:

立即数操作数:

表示参加操作的数据本身,可以是8位或16位

例:MOVAX,1234H

MOVL,22H

•立即数无法作为目标操作数

立即数可以是无符号或带符号数,其数值应在

可取值范围内★*

9

操作数:

寄存器操作数:

表示参加运算的数存放在指令给出的寄存器中,

可以是16位或8位。

•例:MOVAX,BX

MOVDL,CH

10

寄存器操作数

只有AX、BX、CX、DX可用于16位,也可拆

成两个8位用

•不允许用立即数对段寄存器直接赋值

H.Cj|II/11*\

■—-/《/■1MM

MOVAX,1234H\

MOVDS,axJ</

•cs段寄存器不允许被赋值

★¥

_____/

11

存储器操作数:

表示当前参加运算的数存放在存储器的某一个

存储器操作数

若兵给出偏移地址而没给出段地址,则默认使用

DS段,通过加段跨越前缀可改变默认关系

MOVAX,[1200H]

MOVAX,ES:[1200H]

对于双操作数指令来说,不允许两操作数同为存

储器操作数

//-*-I—1-*\

movax,[11OOH][5

mov[1200H],ax★*

13

J、指令字长与机器字长

指令字长由操作码的长度、操作数地址长度、

操作数个数决定;

8088/8086CPU采用变字长指令格式;

机器字长:

计算机能够直接处理的二进制数的位数。

14

五、指令的执行速度

指令的字长影响指令的执行速度

(常用指令的执行时间见表3・4)

对不同的操作数,指令执行的时间不同:

存储器——>立即数——寄存器

>

快!

15

§3.2寻址方式

寻找操作数所在地址的方法

★¥

*

16

一、立即寻址

指令中的源操作数是立即数,即源操作数是参

加操作的数据本身

•例:MOVAX,1234Hr—\/

MOV

17

指令中直接给出操作数的

偏移地址

例:MOVAX,[1200H]

偏移地址_

1200H22H

AHAL1201HX1±1H

1122¥

18

直接寻址方式下,操作数的段地址默认为数据

段,但允许段重设,即由指令定义段。

例:MOVAX,ES:[1200H]

19

三、寄存器寻址

参加操作的操作数在CPU的通用寄存器中。

例:MOVAX,BX

movBL,AX

四、寄存器间接寻址

参与操作的操作数存放在内存中,其偏移地址

为指令中的寄存器的内容。「

例:MOVAX,[BX]代

设(BX)=1200HMOV段

BX,SLDI—►默认在数据段DS

BP----------默认在堆栈段SS

22

寄存器间接寻址

基址寻址(间址寄存器为基址寄存

寄存器器BX,BP)

间接寻址

变址寻址(间址寄存器为变址寄存

器SLDI)

23

寄存器间接寻址举例

设DS=1200H,SS=1000H,;X=0001H,;P=0010H

SI=0011H,DI=0100H

movAL,[BX]12001单元内容送AL

movAL,[BP]10010单元内容送AL

movAL,[SI]12011单元内容送AL

movAX,[DI];

°oO

功能?

24

该寻址方式的形式多样,参见P103

25

0000

设DS=1000H,BX=j000A,分别选中不同的一

维表格,再通过偏移l0014

量即可以获得所选

表格中的具体单元

26

六、基址、变址寻址

操作数的偏移地址为一个基址寄存器的内容加

上一个变址寄存器的内容,操作数的段地址由

选择的基址寄存器决定

•例:MOVAX,[BX+SI]

七、基址、变址、相对寻址

操作数的偏移地址为一个基址寄存器的内容加

上一个变址寄存器的内容,再加上一个位移量。

•操作数的段地址由选择的基址寄存器决定

例:MOVAX,[BP+SI+DATA]

该寻址方式的形式多样,参见P104

28

设要选中二维表格中+单元的第3个字节,

已知DS=1000H,则可使BX=0100H,

SI=OOOAH,DATA=2

MOVAL,[BX+SI+DATA]★★

■■K29

八、隐含寻址

指令隐含了的一个或两个操作数的地址,即操

作数在默认的地址中

例:MULL

指令的执行:ALXBLAX

30

§3.38086指令系统

从功能上包括六大类:

r数据传送

算术运算

逻辑运算和移位

串操作

程序控制

I处理器控制

31

一、数据传送

通用数据传送

•输入输出

地址传送

标志位操作

32

1.通用数据传送

r一般数据传送指令

堆栈操作指令

<交换指令

查表转换指令

I字位扩展指令

特点:

该类指令的执行对标志位不产生影响

33

一般数据传送指令

一般数据传送指令MOV

格式:MOVdest,src

操作:srcdest

例:MOVAL,L

34

一般数据传送指令

•两操作数字长必须相同;

两操作数不允许同时为存储器操作数;

两操作数不允许同时为段寄存器;

在源操作数是立即数时,目标操作数不能是段

寄存器;

IP和CS不作为目标操作数,FLAGS一般也不

作为操作数在指令中出现。

35

一般数据传送指令

判断下列指令的正确性:

MOVAL,X

MOVAX,[SI]05H

MOV[BX][BP],BX

MOVDS,1000H

MOVDX,09H

MOV[1200],[SI]

36

一般数据传送指令应用例

将(*)的ASCII码2AH送入内存51000H开始的

100个箪元中:DS=5000H

MOVAX,5000H

MOVDS,AX

MOVDI,1000H

MOVCX,64H

MOVAL,2AH

AGAIN:MOV[DI],AL

INCDI;DI+1

DECCX;CX-1

JNZAGAIN;CXWO则继续*X-

HLT2A100.asm/

37

数据段中的分布

送上2AH后数据段中相应存储单元的内容改

变如下:

DS:10002A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2A

DS:10102A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2A

DS:10202A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2A

DS:10302A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2A

DS:10402A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2A

DS:10502A2A2A2A2A2A2A2A-2A2A2A2A2A2A2A2A

DS:10602A2A2A2A000000000000000000000000

偏移地址[DI]

38

堆栈操作的原则

先进后出

以字为单位

40

堆栈操作指令

压栈指令PUSH

格式:PUSHOPRD

•出栈指令POP

格式:POPOPRD

压栈指令PUSH

•指令执行过程:

(SP)-(SP)-2

(SP)T-操作数高字节

(SP)-2-操作数低字节

42

压栈指令的操作

设AX=1234H,SP=1200H

执行PUSHAX指令后堆栈区的状态:

43

出栈指令POP

•指令执行过程:

(SP)——>操作数低字节

(SP)+1-操作数高字节

(SP)-(SP)+2

J*44

出栈指令的操作

执行POPAX

堆栈区的状态:代

PUSH码

45

堆栈操作指令说明

•指令的操作数必须是16位的;

操作数可以是寄存器或存储器两单元,但不能

是立即数;

•不能从栈顶弹出一个字给CS;

•PUSH和POP指令在程序中一般成对出现;

PUSH指令的操作方向是从高地址向低地址,而

POP指令的操作正好相反。

★★

46

堆栈操作指令例

PUSHAX

PUSHBX

POPAX

POPBX

如此,会使AX和

BX的内容互换

初始栈底★

47

48

查表指令

•格式:

XLAT

说明:用BX的内容代表表格首地址,AL内容

为表内位移量,BX+AL得到要查找元素的偏

移地址

•操作:[BX+AL]——►AL

•例:教材第教2页

49

查表指令例

6

数据段中存放有一42000H+030

310:

张ASCII码转换表,32P

设首地址为2000H,•••2,

现欲查出表中第1139

个代码的ASCII码419公

(设DS=4000H)42000H+11

•••B,

45

46

F,

50

51

字位扩展指令

将符号数的符号位扩展到高位;

指令为零操作数指令,采用隐含寻址,隐含的

操作数为及

•无符号数的扩展规则为在高位补0

52

字节到字的扩展指令

•格式:

CBW

・操作:将AL内容扩展到AX

•规则:若最高位=1,则执行后AH=FFH

若最高位=0,则执行后AH=00H

53

字到双字的扩展指令

格式:

CWD

操作:将AX内容扩展到DXAX

规则:若最高位=1,贝U执行后DX=FFFFH

若最高位=0,则执行后DX=0000H

54

字位扩展指令例

MOV44H

CBW;执行结果

MOVAX,OAFDEH

CWD

MOVAL,86H

CBW

★¥

*

55

2.输入输出指令

指令的格式及操作

指令的两种寻址方式

指令对操作数的要求

56

指令寻址方式

•直接寻址

直接给出8位端口地址,可寻址256个端口

•MlWtI

16位端口地址由DX指定,可寻址64K个端口

*4

58

I/O指令例

INAX,80H

MOVDX,2400H

INAL,DX

OUTDX,AX

OUT35H,AL

J*59

数据寄存器特有的习惯用法

AX:累加器。中间运算结果也多放于AX中;所

有I/O指令都通过AX与接口传送信息

BX:基址寄存器。在间接寻址中用于存放基地

址)

•CX:计数寄存器。用于在循环或串操作指令

中存放计数值

•DX:数据寄存器。在间接寻址的I/O指令中存

放I/O端口地址;在32位乘除法运算时,>、

放J

位数)*

3.地址传送指令

r取偏移地址指令LEA

<LDS指令

:LES指令

61

62

LEA指令

•比较下列指令:符号

地址

LEASLDATA1、

MOVSLDATA1.DATA1

MOVDX,

LEADX,

BX=1100H

63

Datasegment

DATA1DW1234H

DW1010H

DW1A0CH

DATAends

设DS=1000H

LEASLDATA1

MOVSI,[DATA1]

64

LEA指令在程序中的应用

将数据段中首地址为MEM1的50个字节的数据

传送到同一逻辑段首地址为MEM2的区域存放。

编写相应的程序段

LEA指令在程序中的应用

66

LEA指令在程序中的应用

J—CI

LEADLMEM2

MOVCL,50

NEXT:MOVAL,[SI]

MOV[DI],AL

INCSI

INCDI

DECCL

JNZNEXT

LEAasm★

HLT

67

取远地址指针指令

LDSreg,MEM32

LESreg,MEM32

指令中源操作数是存储器某4个连续单元的偏

移地址,目标操作数是间址寄存器。

68

LDS指令例

DS=5000H

AX=2233H5120计134H

[12H

OOH

60H

33H

22H

LESDL[1200H]

MOVAX,ES:[DI]

41700H

m

4.标志位操作指令

「LAHF

隐含操作数AH

SAHF

PUSHF

隐含操作数FLAGS

〔POPF

LAHF,SAHF易

•LAHF;将FLAGS中的5位装入AH的对应位

D7DO

AH

D15••••DO

FLAGSSFZFAFPFCF

•SAHF;执行与LAHF相反的操作

76420--------------------'SZAPC★>

______/

・,

PUSHF,POPF

针对FLAGS的堆栈操作指令

将标志寄存器压栈或从堆栈弹出

74

例:编写一个程序,在屏幕上输出一个大写字母A

DOS的2号子功能:从屏幕上输出一个字符,

该字符的ASCH码存放在DL中

所有的DOS子功能的调用器功能号都是放在

AH中的(见P170)

75

codesegment

Assumecs:code

Start:movdl941h

movah,02h

int21h

movah,4ch

int21h

Codeends

Endstart

/r*76

二、算术运算类指令

r加法运算指令

减法运算指令

乘法指令

I除法指令

算术运算指令的执行大多

对状态标志位会产生影响

77

f普通加法指令ADD

<带进位位的加法指令ADC

「加1指令INC

加法指令对操作数的要

求与MOV指令相同

*4

78

一般数据传送指令mov

注:

•两操作数字长必须相同;

两操作数不允许同时为存储器操作数;

两操作数不允许同时为段寄存器;

在源操作数是立即数时,目标操作数不能是段

寄存器;

IP和CS不作为目标操作数,FLAGS一般也不

作为操作数在指令中出现。

79

ADD指令

•格式:

ADD0PRD1,0PRD2

•操作:

0PRD1+0PRD20PRD1

ADD指令的执行对全部6个

状态标志位都产生影响★★

______/

■■■■

ADD指令例

MOVAL,78H

ADDAL,99H

指令执行后6个状态标志位的状态

★★

81

ADD指令例

01111000

+10011001

口00010001

标志位状态:CF=SF=

AF=ZF=

★★

PF=OF=

*

82

ADC指令

指令格式、对操作数的要求、对标志位的影响

与ADD指令完全一样

•指令的操作:

0PRD1+0PRD2+CF___»0PRD1

•ADC指令多用于多字节数相加,使用前要先将

CF清零。

★年

______/

83

ADC指令例

有两个四字节无符号数相加,这两个数分别放

在偏移地址为2000H和3000H开始的存储单元,

低位在前,高位在后,要求进行运算,得到的

和放在2000H开始的内存单元

2000H78H3000H44H2000HBCH

2001H56HI3001HEEH2001H44H

2002H34H十3002H22H2002H57H

2003H12H3003H11H2003H

84

可用如下程序实现多字节加法

CLC;清进位位CF

MOVSI,2000H;取第一个数的首地址

MOVAX,[SI];将第一个数的低16位取到AX

MOVDI,3000H;取第二数个的首地址

ADDAX,[DI];数一和数二的低16位相加

MOV[SI],AX;低16位相加结果送到

2000H,2001H单元

MOVAX,[SI+2];数一高16位送到AX中

;两位数的高16位连同进位位相加

MOV[SI+2],AX;高16位相加的结果送到A4

2002H,2003H年

85

INC指令

不能是段寄存器

格式:或立即数

操作:

0PRD+1OPRD

例:INC;YTEPTR[BX]

常用于在程序中修改地址指针*4

86

2.减法指令

C普通减法指令SU

考虑借位的减法指令S

<减1指令DEC

比较指令CMP

<求补指令NEG

减法指令对操作数的要求

与对应的加法指令相同

87

SUB指令

格式:

SUB0PRD1,0PRD2

•操作:

0PRD1-0PRD20PRD1

对标志位的影响与ADD指令同

★¥

*

88

SBB指令

指令格式、对操作数的要求、对标志位的影响

与SUB指令完全一样

•指令的操作:

0PRD1-0PRD2-CF0PRD1

SBB指令多用于多字节数相减,使用前要先

将CF清零。i4

89

DEC指令

格式:

•操作:

OPRD-1OPRD

寸操作数的要求与INC相同

指令常用于在程序中修改计数值

90

应用程序例

MOVBL,2

NEXT1:MOVCX,OFFFFH

NEXT2:DECCX

JNZNEXT2

DECBL

JNZNEXT1

HLT

NEG指令

8/16位寄存器或

存储器操作数

0-OPRDOPRD

指令的两点注意请

参见教材P121

用0减去操作数,相当于

对该操作数求补码

CMP指令

格式:

CMP0PRD1,0PRD2

•操作:

0PRD1-0PRD2

指令执行的结果不影响目标操作数!

93

CMP指令

用于比较两个数的大小,可作为条件转移指令

转移的条件

指令对操作数的要求及对标志位的影响与SUB

指令相同

★★

CMP指令

两个无符号数的比较:

CMPAX,匚二

二二3XCF=O

二二:3XCF=1

两个带符号数的比较

CMPAX,匚二

两个数的大小由OF和SF共同决定

rOF和SF状态相同AX>BX

〔OF和SF状态不同

AX<BX

95

LEABX,MAXGOON:DECCL

LEASLBUFJNZNEXT

MOVCL,20MOV[BX],AL

MOVAL,[SI]HLT

NEXT:INCSI

CMPAL,[SI]

JNCGOONCF=0转

程序功能

XCHG[SI],AL

96

程序功能

BUFXXH

XXH

找20个数中最大的数,XXH

并将其存放在MAX单

元中

MAX

97

3.乘法指令

无符号的乘法指令MUL

带符号的乘法指令IMUL

乘法指令采用隐含寻址,隐含的是存放被乘

数的累加器AL或AX及存放结果的AX,DX;

若运算结果的高位全为0或1,表示其为无效

数据,OF=CF=0

操作码后所跟的操作数不能使立即数」¥

_____/

98

99

数为负数,要先将操作数求补码,运算后再将结

果求补。最终还要对运算结果进行修正。

101

IMUL指令例

设:AL=FEH,CL=11H,求AL与CL的乘积。

•若为无符号数,则MULCL

结果:AX=10DEH

若将两操作数看作有符号数,则:

IMULCL

指令执行后:AX=FFDEH=-34o

102

4.除法指令

无符号除法指令DIVOPRD

有符号除法指令IDIVOPRD

「AL=|$

若OPRD是字节数,则执行AX/OPRD

.一人11=余数

「AX=W

若是双字节数,则执行

OPRDDXAX/OPRD,DX=余数

指令要求被除数是除数的双倍字长★★

103

5.BCD码调整指令

共6条,均为隐含寻址方式,隐含的操作数是

AL或AL、AH;

不能单独使用,要紧跟在相应的算术运算指令

之后;

执行结果为压缩BCD码或扩展BCD码表示的

进制数。

104

加法指令应用例

计算2658+3619二?

结果存放在SUM单元。

•设被加数和加数的

每一位都以ASCH码数

形式存放在内存中,段

低位在前,高位在

后。

105

加法指令应用例

LEASLSTRING1INCSI

LEADLSTRING2INCDI

LEABX,SUMINCBX

MOVCX,4DECCX

CLCJNZNEXT

NEXT:MOVAL,[SI]

ADCAL,[DI]

AAA

MOV[BX],AL

106

SuccesswithMoneyandJoy

附落人生心语

•成功是一种观念

•致富是一种义务

•快乐是一种权利

•每个人都有能力、有义

务、有权利办到成功

致富快乐

附赠人生心语

成成功不是打败别人

功成功不是超越别人

成功不是名、利、权的获得

致拥有健康的身体

丰足的物质生活

富平衡的心理状态

又才能拥有成功

快SuccesswithMoneyandJoy

战胜自己

乐贡献自己

扮演好自己的历史角色

才能超越自己

融入成功里

附赠人生心语

知人者智,自知者明,胜人者力,自

胜者强。

——老子

附赠人生心语

•成功必须靠百分之九十八的辛勤血

汗,加上百分之二的天才灵感。

•世界上注定只有百分之二十的人会成

功。

附赠人生心语

成犹太谚语中有一句名言,

功会伤人的东西有三个:苦恼、争吵、空的钱包。

其中最伤人的是——空的钱包。

致金钱本身并没有善恶,

但没有钱,

富却的确是一件不幸的事情。

又所以,我们必须学习

快SuccesswithMoneyandJoy

重视财富,

乐管理财富,

更重要的是栗学会

正确地

使用自己的财富。

附赠人生心语

重财---重视自己的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论