第4章 汇编语言基础-新_第1页
第4章 汇编语言基础-新_第2页
第4章 汇编语言基础-新_第3页
第4章 汇编语言基础-新_第4页
第4章 汇编语言基础-新_第5页
已阅读5页,还剩160页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-5-814.1 汇编语言的基本概念汇编语言的基本概念 4.2 80 x86指令系统指令系统 4.3 80 x86的寻址方式的寻址方式 4.4 8086指令系统指令系统 4.5 80 x86指令系统指令系统 第4章 汇编语言基础本章重点u 8086指令特点指令特点u 8086的寻址方式的寻址方式u 8086的指令格式及数据类型的指令格式及数据类型u 8086的指令集的指令集u 汇编语言(汇编语言(Assembly Language)是面向机器)是面向机器的程序设计语言。的程序设计语言。 u 在汇编语言中,用助记符(在汇编语言中,用助记符(Memoni)代替操作)代替操作码,用地址符号(

2、码,用地址符号(Symbol)或标号()或标号(Label)代)代替地址码书写程序,使程序编写更加简单、容易,替地址码书写程序,使程序编写更加简单、容易,大大提高了编程效率,用汇编语言书写出的程序大大提高了编程效率,用汇编语言书写出的程序就称为汇编语言源程序。就称为汇编语言源程序。 u 汇编语言也称为符号语言。汇编语言也称为符号语言。4.1 汇编语言的基本概念汇编语言的基本概念 4.1 汇编语言的基本概念汇编语言的基本概念 4.1.1 汇编语言的基本语法汇编语言的基本语法 4.1.1.1 汇编语言的语句类型汇编语言的语句类型(1)指令型语句由指令助记符构成,每一条指令性语句都)指令型语句由指令

3、助记符构成,每一条指令性语句都有一条机器码指令与其相对应,即汇编时生成目标代码(机有一条机器码指令与其相对应,即汇编时生成目标代码(机器代码)。器代码)。 (2)指示型语句由伪指令构成,它告诉汇编器应如何对源)指示型语句由伪指令构成,它告诉汇编器应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。这种动作并不会产生机器指令,也不会对目开始和结束等。这种动作并不会产生机器指令,也不会对目标代码有任何影响。标代码有任何影响。 4.1.1 汇编语言的基本语法汇编语言的基本语法 4.1.1.2常量、变量、标号、运算符和表达式常

4、量、变量、标号、运算符和表达式 1常量常量 常量是没有任何属性的纯数值。在汇编期间,它的值已常量是没有任何属性的纯数值。在汇编期间,它的值已能完全确定,且在程序运行中,它也不会发生变化。它可以能完全确定,且在程序运行中,它也不会发生变化。它可以有以下几种类型:有以下几种类型:(1)二进制常量是由一串)二进制常量是由一串“0”和和“1”组成的序列,并以字组成的序列,并以字母母B结尾。例如结尾。例如00110110B是二进制数。是二进制数。(2)八进制常量是以字母)八进制常量是以字母O或或Q结尾的,由结尾的,由07的数字组成的数字组成的序列。例如的序列。例如357Q、65O都是八进制数。都是八进制

5、数。(3)十进制常量是由若干个)十进制常量是由若干个09的数字组成的序列,并以字的数字组成的序列,并以字母母D结尾。可省略结尾。可省略D,数字序列后无任何字母的常数被默认,数字序列后无任何字母的常数被默认为十进制数。例如为十进制数。例如375D、148都是十进制数。都是十进制数。 (4)十六进制常量是由若干个)十六进制常量是由若干个09的数字及的数字及AF的字母组的字母组成的序列,并以字母成的序列,并以字母H结尾。例如结尾。例如5BF8H、3214H。对于以。对于以字母字母AF起头的十六进制数,必须在前边加一个起头的十六进制数,必须在前边加一个0,以便与,以便与标识符区别开,否则汇编程序会将其

6、误认为标识符,汇编时标识符区别开,否则汇编程序会将其误认为标识符,汇编时将报错。将报错。 (5)实数:它由整数、小数和指数部分组成,这是计)实数:它由整数、小数和指数部分组成,这是计算机中的浮点表示法。实数一般用十进制数形式给出,实数算机中的浮点表示法。实数一般用十进制数形式给出,实数的格式如下:的格式如下: 整数部分整数部分.小数部分小数部分指数部分。指数部分。 其中,整数和小数部分合成的数值称为尾数,是带符号其中,整数和小数部分合成的数值称为尾数,是带符号数。指数部分在字母数。指数部分在字母E之后,表示尾数的数量级。例如之后,表示尾数的数量级。例如6.317E-4。 4.1 汇编语言的基本

7、概念汇编语言的基本概念 (6)字符常量和字符串常量:以单引号引起来的单个字符)字符常量和字符串常量:以单引号引起来的单个字符为字符常量。以双引号引起来的单个或多个字符为字符串常为字符常量。以双引号引起来的单个或多个字符为字符串常量。这些字符以量。这些字符以ASC码形式存储在内存中,如:码形式存储在内存中,如:A为字符常量(内存中的为字符常量(内存中的ASCII值为值为41H););“A”为字符串常量(内存中的为字符串常量(内存中的ASCII值为值为41H,00););“ABC”为字符串常量(内存中的为字符串常量(内存中的ASCII值为值为41H,42H,43H,00););“123”为字符串常

8、量(内存中的为字符串常量(内存中的ASCII值为值为31H,32H,33H,00););注意,字符常量的大写与小写代表不同的常量。注意,字符常量的大写与小写代表不同的常量。 4.1 汇编语言的基本概念汇编语言的基本概念 4.1 汇编语言的基本概念汇编语言的基本概念 2变量变量 变量是在程序运行期间可以改变的量,变量名是存放数变量是在程序运行期间可以改变的量,变量名是存放数据的存储单元的符号地址,而该存储单元中的数据是变量的据的存储单元的符号地址,而该存储单元中的数据是变量的值,因此可以用变量名来访问变量。所有的变量都有三种属值,因此可以用变量名来访问变量。所有的变量都有三种属性:性:(1)段值

9、()段值(SEG):变量所在段的段首地址。):变量所在段的段首地址。 (2)偏移量()偏移量(OFFSET):偏移量是):偏移量是16位无符号数,它表位无符号数,它表示从段首地址到变量存储单元位置之间的字节数。示从段首地址到变量存储单元位置之间的字节数。 (3)类型()类型(TYPE):变量的类型是所定义的每个变量所占):变量的类型是所定义的每个变量所占据的字节数。变量类型可以为字节、字、双字、四字或据的字节数。变量类型可以为字节、字、双字、四字或10字字节。变量按标识符的规则取名。变量是由数据定义伪指令来节。变量按标识符的规则取名。变量是由数据定义伪指令来定义的。定义的。 3标号标号 标号是

10、存放某条指令的存储单元的符号地址,常作为转标号是存放某条指令的存储单元的符号地址,常作为转移指令或子程序调用指令的目的操作数。标号有个属性:移指令或子程序调用指令的目的操作数。标号有个属性:段地址、偏移地址和类型。标号的段地址是指标号所指向的段地址、偏移地址和类型。标号的段地址是指标号所指向的指令代码所在段的段首地址。偏移量是指令代码所在段的段首地址。偏移量是16位无符号数,它表位无符号数,它表示从段首地址到标号位置之间的字节数。类似地,上述两个示从段首地址到标号位置之间的字节数。类似地,上述两个属性就确定了标号所指向的指令在存储器中的段地址和偏移属性就确定了标号所指向的指令在存储器中的段地址

11、和偏移地址。地址。 标号的类型有两种:标号的类型有两种:NEAR和和FAR类型。类型。NEAR类型将类型将产生一个两字节的偏移地址,它指定本标号只能被标号所在产生一个两字节的偏移地址,它指定本标号只能被标号所在段的转移指令或调用指令引用,实现段内转移或调用。段的转移指令或调用指令引用,实现段内转移或调用。FAR类型将产生一个包括段地址和偏移地址的四字节转移地址,类型将产生一个包括段地址和偏移地址的四字节转移地址,它指定本标号可被其他段的转移指令和调用指令引用,实现它指定本标号可被其他段的转移指令和调用指令引用,实现段间转移或调用。段间转移或调用。 4.1 汇编语言的基本概念汇编语言的基本概念

12、4运算符和表达式运算符和表达式表达式由操作数和运算符按语法规则组合而成,表达式的计表达式由操作数和运算符按语法规则组合而成,表达式的计算结果是一个确定的值,在汇编期间由汇编程序计算。表达算结果是一个确定的值,在汇编期间由汇编程序计算。表达式中的操作数可以是寄存器名、常量、标号或变量。运算符式中的操作数可以是寄存器名、常量、标号或变量。运算符有以下几种:有以下几种:(1)算术运算符:算术运算符包括:)算术运算符:算术运算符包括:、MOD(模除)。(模除)。算术运算符可用于数值表达式或地址表达式中。当用于地址算术运算符可用于数值表达式或地址表达式中。当用于地址表达式时,只有当其结果有明确的物理意义

13、时才是有效的。表达式时,只有当其结果有明确的物理意义时才是有效的。例如,两个地址相乘或相除是无意义的。在地址表达式中,例如,两个地址相乘或相除是无意义的。在地址表达式中,可以使用可以使用或或,但也必须注意其物理意义。例如,两个不,但也必须注意其物理意义。例如,两个不同段的地址相加也是无意义的。经常使用的形式是地址同段的地址相加也是无意义的。经常使用的形式是地址数数字量,它们是有意义的。字量,它们是有意义的。 4.1 汇编语言的基本概念汇编语言的基本概念 4运算符和表达式运算符和表达式(2)逻辑运算符:逻辑运算符包括)逻辑运算符:逻辑运算符包括NOT、AND、OR、XOR,分别对常数进行按位逻辑

14、非、逻辑与、逻辑或、异或,分别对常数进行按位逻辑非、逻辑与、逻辑或、异或运算。逻辑运算符是按位操作的,它只能用于数值表达式中。运算。逻辑运算符是按位操作的,它只能用于数值表达式中。(3)关系运算符:关系运算符包括)关系运算符:关系运算符包括EQ、NE、LT、GT、LE、GE,分别表示相等、不等、小于、大于、小于等于、分别表示相等、不等、小于、大于、小于等于、大于等于。关系运算符用于比较两个表达式,表达式中的项大于等于。关系运算符用于比较两个表达式,表达式中的项必须是常数或同一段内的变量。对于常数按无符号数比较,必须是常数或同一段内的变量。对于常数按无符号数比较,对于变量则比较它们的偏移量。如果

15、比较结果为对于变量则比较它们的偏移量。如果比较结果为真真,用,用0FFFFH表示;结果为表示;结果为假假,用,用表示。表示。 4.1 汇编语言的基本概念汇编语言的基本概念 4运算符和表达式运算符和表达式(4)分析运算符:)分析运算符:分析运算符用于分解存储器操作数(标号、变量)的各部分分析运算符用于分解存储器操作数(标号、变量)的各部分(段地址、偏移地址、类型等),并返回相应的值。分析运(段地址、偏移地址、类型等),并返回相应的值。分析运算符包括:算符包括:TYPE、LENGTH、SIZE、OFFSET、SEG等。等。TYPE:取类型运算符:取类型运算符格式为:格式为:TYPE 表达式表达式如

16、果表达式是变量,则汇编程序将回送该变量的以字节数表如果表达式是变量,则汇编程序将回送该变量的以字节数表示的类型:示的类型:DB为为1,DW为为2,DD为为4,DF为为6,DQ为为8,DT为为10。如果表达式是标号,则汇编程序将回送代表该标。如果表达式是标号,则汇编程序将回送代表该标号类型的数值:号类型的数值:NEAR为为 -1,FAR为为 -2。如果表达式为常数,。如果表达式为常数,则应回送则应回送0。LENGTH:取变量长度运算符:取变量长度运算符格式为:格式为:LENGTH 变量变量 4.1 汇编语言的基本概念汇编语言的基本概念 对于变量中使用对于变量中使用DUP的的情况,汇编程序将回送分

17、配给该情况,汇编程序将回送分配给该变量的单元数,而对于其他情况则送变量的单元数,而对于其他情况则送1。SIZE:取变量大小运算符:取变量大小运算符格式为:格式为:SIZE 变量变量 汇编程序应回送分配给该变量的字节数。但是,此值是汇编程序应回送分配给该变量的字节数。但是,此值是 LENGTH值和值和TYPE值的乘积。值的乘积。 OFFSET:取偏移地址运算符:取偏移地址运算符格式为:格式为:OFFSET 变量或标号变量或标号汇编程序将回送变量或标号的偏移地址值。汇编程序将回送变量或标号的偏移地址值。 SEG:取段地址运算符:取段地址运算符格式为:格式为:SEG 变量或标号变量或标号汇编程序将回

18、送变量或标号的段地址值。汇编程序将回送变量或标号的段地址值。 4.1 汇编语言的基本概念汇编语言的基本概念 对于变量中使用对于变量中使用DUP的情况,汇编程序将回送分配给该的情况,汇编程序将回送分配给该变量的单元数,而对于其他情况则送变量的单元数,而对于其他情况则送1。 SIZE:取变量大小运算符:取变量大小运算符格式为:格式为:SIZE 变量变量 汇编程序应回送分配给该变量的字节数。但是,此值是汇编程序应回送分配给该变量的字节数。但是,此值是LENGTH值和值和TYPE值的乘积。值的乘积。 OFFSET:取偏移地址运算符取偏移地址运算符 格式为:格式为:OFFSET 变量或标号变量或标号汇编

19、程序将回送变量或标号的偏移地址值。汇编程序将回送变量或标号的偏移地址值。 SEG:取段地址运算符:取段地址运算符 格式为:格式为:SEG 变量或标号变量或标号汇编程序将回送变量或标号的段地址值。汇编程序将回送变量或标号的段地址值。 4.1 汇编语言的基本概念汇编语言的基本概念 4运算符和表达式运算符和表达式(5)属性修改运算符:这类运算符有)属性修改运算符:这类运算符有PTR和和THIS,PTR(修改属性运算符)是用来重新定义已定义过的变量或标号(修改属性运算符)是用来重新定义已定义过的变量或标号的类型。的类型。THIS(类型指定运算符)可以用来改变存储区的(类型指定运算符)可以用来改变存储区

20、的类型,类型,THIS运算符的运算对象是类型(运算符的运算对象是类型(BYTE、WORD、DWORD)或距离()或距离(NESR、FAR),用于规定所指变量或),用于规定所指变量或标号的类型属性或距离属性。标号的类型属性或距离属性。 在计算表达式时,应该首先计算优先级高的运算符,然在计算表达式时,应该首先计算优先级高的运算符,然后从左到右地对优先级相同的运算符进行计算。括号也可以后从左到右地对优先级相同的运算符进行计算。括号也可以改变计算次序,括号内的表达式应优先计算。运算符的优先改变计算次序,括号内的表达式应优先计算。运算符的优先级排列如表级排列如表4.1所示。所示。 4.1 汇编语言的基本

21、概念汇编语言的基本概念 2022-5-82022-5-817174.2 80 x864.2 80 x86指令特点指令特点 指令:指令:u控制计算机完成某种操作的命令控制计算机完成某种操作的命令:u处理器所能识别的所有指令的集合处理器所能识别的所有指令的集合指令的兼容性:指令的兼容性:u同一系列机的指令都是兼容的同一系列机的指令都是兼容的机器语言机器语言:低级语言低级语言, ,它是用二进制代码表示的它是用二进制代码表示的汇编语言汇编语言:中级语言,助记符形式,它是符号化的机器语言中级语言,助记符形式,它是符号化的机器语言高级语言高级语言: :如如Java,C+Java,C+、C C、Fortra

22、nFortran、BasicBasicu数据传送数据传送Data TransferData Transferu算术运算算术运算ArithmeticArithmeticu逻辑运算和移位逻辑运算和移位logiclogicu串操作串操作string manipulationstring manipulationu控制转移类控制转移类control transfercontrol transferu处理器控制处理器控制processor control processor control 80888088和和80868086的指令系统是完全相同的;的指令系统是完全相同的;80868086的指令系统共包

23、含的指令系统共包含9292种基本指令,按照功能分为种基本指令,按照功能分为6 6大类:大类:指令中应包含的信息指令中应包含的信息运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作1. 1. 指令的基本构成指令的基本构成 标号:标号:操作码操作码操作数操作数;注释;注释 ,它表示本指令的它表示本指令的操作操作类型类型,用助记符形式表,用助记符形式表示,是指令语句中的关示,是指令语句中的关键字,键字,不可缺省不可缺省,必要,必要时可在指令助记符的前时可在指令助记符的前面加上一个或多个面加上一个或多个“前前缀缀”,从而实现某些附,从而实现某些附加操作加操作。标号是标号是给该

24、指令所在地给该指令所在地址取的名字址取的名字,必须后跟冒,必须后跟冒号号“:”,它可以,它可以缺省缺省。属于标识符,必须遵循一属于标识符,必须遵循一定的规则定的规则。操作数是操作数是参加本指令运算参加本指令运算的的数据数据,有些指令不需要操,有些指令不需要操作数,可以缺省;有些指令作数,可以缺省;有些指令需要两个操作数,这时必须需要两个操作数,这时必须用逗号(,)将两个操作数用逗号(,)将两个操作数分开;有些操作数可以用表分开;有些操作数可以用表达式来表示。达式来表示。用来对指令功能加以说用来对指令功能加以说明,给阅读程序带来方便,明,给阅读程序带来方便,是可选项,允许缺省,如果是可选项,允许

25、缺省,如果带注释则必须用分号(;)带注释则必须用分号(;)开头,汇编程序不对它做任开头,汇编程序不对它做任何处理何处理。操作码操作码目的目的操作数,操作数,源源操作数操作数12字节字节17字节字节立即数操作数、立即数操作数、寄存器操作数、寄存器操作数、存储器操作数存储器操作数(1)指令的基本构成指令的基本构成一条一条80868086指令包含有操作码和操作数两部分,指令的长度在指令包含有操作码和操作数两部分,指令的长度在1717个字节之间个字节之间指明指明操作类型操作类型( (助记助记符符) )指明指令指明指令操作对象操作对象或或操作对象存放操作对象存放地址地址8 8位数位数1616位数位数无符

26、号数无符号数00H00H0 0FFH(0255)FFH(0255)0000H0000H0 0FFFFHFFFFH(065535)(065535)带符号数带符号数80H7FH(-128+127)80H7FH(-128+127)8000H7FFFH8000H7FFFH(-32768+32767)(-32768+32767)1 1)立即数操作数)立即数操作数即即常数常数,不因指令的执行而改变,可以是字节(,不因指令的执行而改变,可以是字节(8 8位)、位)、字(字(1616位);可以是有符号数或无符号数,但数的取值范位);可以是有符号数或无符号数,但数的取值范围必须符合相应字长数的规定。围必须符合相

27、应字长数的规定。注意:立即数操作数只能用作源操作数注意:立即数操作数只能用作源操作数,不能用作目的操作数,不能用作目的操作数2 2)寄存器操作数)寄存器操作数 寄存器操作数存放在寄存器操作数存放在CPUCPU的的8 8个个通用寄存器或通用寄存器或4 4个段寄存器中,个段寄存器中,既可以用作源操作数也可以用既可以用作源操作数也可以用作目的操作数作目的操作数;但;但CSCS一般不作一般不作为目的操作数为目的操作数; 个别指令将个别指令将FLAGSFLAGS作为操作数作为操作数AHALBLCLDLDHCHBHDXCXBXAXSPBPDISI目的变址寄存器源变址寄存器基址指针寄存器堆栈指针寄存器通用寄

28、存器通用寄存器中AX、BX、CX、DX、SI、DI、BP、SP存放字操作数;AH、AL、BH、BL、CH、CL、DH、DL存放字节操作数;3 3)存储器操作数)存储器操作数u存储器操作数可以是字节、字、双字,分别存在存储器操作数可以是字节、字、双字,分别存在1 1个、个、2 2个、个、4 4个存储单元中;它个存储单元中;它既可以用作源操作数也可以用作目的操既可以用作源操作数也可以用作目的操作数作数;u注意:对大多数指令,注意:对大多数指令,不允许源操作数和目的操作数同时不允许源操作数和目的操作数同时为存储器操作数为存储器操作数,即不允许存储器到存储器的操作。,即不允许存储器到存储器的操作。u存

29、储器单元的地址由两部分组成:段基址和偏移地址(也存储器单元的地址由两部分组成:段基址和偏移地址(也叫有效地址),叫有效地址),所以各种存储器操作,都涉及到段寄存器。所以各种存储器操作,都涉及到段寄存器。u一条指令的执行时间应包括取指令、取操作数、执行指令一条指令的执行时间应包括取指令、取操作数、执行指令及传送结果及传送结果4 4部分时间,通常用部分时间,通常用时钟周期时钟周期数来表示;数来表示;u不同的指令在执行时间上有很大差别。不同的指令在执行时间上有很大差别。2. 2. 指令的执行时间指令的执行时间p寄存器操作数的指令执行速度最快;寄存器操作数的指令执行速度最快;p立即操作数作为指令的一部

30、分存放在指令队列中,因此执行立即操作数作为指令的一部分存放在指令队列中,因此执行 指令时不需要访问内存,执行速度也比较快;指令时不需要访问内存,执行速度也比较快;p存储器操作数放在内存单元中,首先由存储器操作数放在内存单元中,首先由BIUBIU计算出计算出2020位物理位物理 地址,然后再执行存储器的读写操作,指令的执行速度最慢。地址,然后再执行存储器的读写操作,指令的执行速度最慢。例如:例如:CPUCPU的时钟频率为的时钟频率为5MHz5MHz,即一个时钟周期为,即一个时钟周期为0.20.2微秒,微秒,则寄存器到寄存器之间的传送指令的执行时间为:则寄存器到寄存器之间的传送指令的执行时间为:

31、t=2X0.2=0.4 t=2X0.2=0.4微秒微秒再如:立即操作数传送到寄存器的指令执行时间为:再如:立即操作数传送到寄存器的指令执行时间为: t=4X0.2=0.8 t=4X0.2=0.8微秒微秒4.2.2 指令流水线和并行控制指令流水线和并行控制1并行控制技术并行控制技术 并行控制技术是指计算机同时执行多个任务或多条指令或并行控制技术是指计算机同时执行多个任务或多条指令或同时对多个数据项进行处理的技术。早期的计算机是基于同时对多个数据项进行处理的技术。早期的计算机是基于冯冯诺伊曼的体系结构,采用的是串行处理方式,计算机的各诺伊曼的体系结构,采用的是串行处理方式,计算机的各个操作只能串行

32、地完成,某一时刻只能进行一个操作。这类计个操作只能串行地完成,某一时刻只能进行一个操作。这类计算机也称为串行计算机。随着计算机技术的发展,现代计算机算机也称为串行计算机。随着计算机技术的发展,现代计算机均具有不同程度的并行性。均具有不同程度的并行性。 并行处理计算机主要指以下两种类型的计算机:并行处理计算机主要指以下两种类型的计算机:能同时能同时执行多条指令或同时处理多个数据项的单中央处理器计算机;执行多条指令或同时处理多个数据项的单中央处理器计算机;多处理机系统。多处理机系统。4.2 80 x86指令系统指令系统 2流水线流水线 流水线是流水线是Intel首次在首次在486芯片中开始使用的。

33、它是将指令芯片中开始使用的。它是将指令的执行过程分解为若干段,每段进行一部分处理。一条指令的执行过程分解为若干段,每段进行一部分处理。一条指令顺序流过所有段即执行完毕获得结果。当本条指令在本段已顺序流过所有段即执行完毕获得结果。当本条指令在本段已被处理完毕而进入下段时,下条指令即可流入本段。因此,被处理完毕而进入下段时,下条指令即可流入本段。因此,在整个流水线上可以同时处理若干条指令。若各段的执行时在整个流水线上可以同时处理若干条指令。若各段的执行时间均为一个时钟节拍,则在正常情况下每拍可以输出一个结间均为一个时钟节拍,则在正常情况下每拍可以输出一个结果,即完成一条指令。这就可加快处理机的速度

34、。这种指令果,即完成一条指令。这就可加快处理机的速度。这种指令重叠、处理部件连续工作的计算机(或处理器),称为流水重叠、处理部件连续工作的计算机(或处理器),称为流水线计算机(或处理器)。线计算机(或处理器)。4.2 80 x86指令系统指令系统 图4.3 流水线工作情况时 间 单 位第 一 条 指 令第 二 条 指 令第 三 条 指 令取 指 译 码 地 址 生 成 执 行 写 结 果取 指 译 码 地 址 生 成 执 行 写 结 果取 指 译 码 地 址 生 成 执 行 写 结 果0 1 2 3 4 5 6 74.2 80 x86指令系统指令系统 2022-5-82022-5-828284

35、.3 80 x864.3 80 x86寻址方式寻址方式操作码操作码目的目的操作数,操作数,源源操作数操作数指明指明操作类型操作类型( (助记助记符符) )指明指令指明指令操作对象操作对象或或操作对象存放地址操作对象存放地址寻址方式寻址方式是指是指CPUCPU寻找操作数或操作数地址寻找操作数或操作数地址的方法的方法 对象:对象:目的操作数、目的操作数、源操作数源操作数1. 1. 立即寻址立即寻址(Immediate Addressing)(Immediate Addressing)n源操作数是一个源操作数是一个立即数立即数,8 8位或位或1616位的整数;位的整数;n操作数直接放在操作码的后面,

36、作为指令的一部分,存放操作数直接放在操作码的后面,作为指令的一部分,存放 在代码段里;在代码段里;若为若为1616位则低位则低8 8位在低地址单元,高位在低地址单元,高8 8位在高位在高 地址单元存放。地址单元存放。例:例: MOV AL,05HMOV AL,05H指令执行后指令执行后: : (AL)=05H(AL)=05H例:例: MOV AX,3064HMOV AX,3064H指令执行后指令执行后: (AX)=3064H: (AX)=3064H立即寻址方式立即寻址方式.操作码操作码64H64H30H30H代代码码段段64H64H.30H30HALALAHAH指指令令.操作码操作码05H05

37、H代代码码段段05H05H.ALAL指指令令使用场合:使用场合:经常用于给寄存器赋初值。经常用于给寄存器赋初值。注意:注意:只能用于源操作数字段只能用于源操作数字段,不能,不能 用于目的操作数字段。用于目的操作数字段。2 2 直接寻址(直接寻址(Direct AddressingDirect Addressing)n数据总是在数据总是在内存中内存中,内存单元的有效地址(偏移地址)由,内存单元的有效地址(偏移地址)由 指令直接指出指令直接指出n1616位偏移地址必须用位偏移地址必须用 括起来括起来n1616位偏移地址直接放在操作码后面,与操作码一起存放在内位偏移地址直接放在操作码后面,与操作码一

38、起存放在内 存的代码段;低存的代码段;低8 8位在前,高位在前,高8 8位在后位在后n默认段为默认段为DSDS数据段,允许段超越。如数据段,允许段超越。如MOV AXMOV AX,ES:ES: 1000H1000H MOV AL, 4000H MOV AL, 4000H ;将;将DS:4000HDS:4000H之内容送入之内容送入AL(AL(字字 节操作)节操作)MOV 2000H, BXMOV 2000H, BX;将;将BLBL之内容送入之内容送入DS:2000HDS:2000H 将将BHBH之内容送入之内容送入DS:2001H DS:2001H 注意:注意:MOV AX, 2510HMOV

39、 AX, 2510H与与MOV AX, 2510HMOV AX, 2510H的区别!的区别!MOVMOV操作码操作码02H02H31H31H0111010101110101100110111001101123102H23102H23103H23103H代码段代码段数据段数据段AHAHALAL例如:例如:MOV AX, 3102HMOV AX, 3102H (字操作)(字操作)设设DS=2000HDS=2000H,则物理地址为:,则物理地址为:2000H2000H* *10H+3102H=23102H10H+3102H=23102H功能:功能:将将DS:3102HDS:3102H之内容送入之内容

40、送入ALAL将将DS:3103HDS:3103H之内容送入之内容送入AHAH直接寻址必须先直接寻址必须先求出操作数的物理地址求出操作数的物理地址,然后再访问存储器,然后再访问存储器才能取得操作数才能取得操作数又如:用符号地址代替数值地址。又如:用符号地址代替数值地址。 MOV AXMOV AX,VALUE VALUE VALUEVALUE:有效操作数单元的符号:有效操作数单元的符号 地址。但必须在程序的地址。但必须在程序的 开始处予以定义。开始处予以定义。直接寻址方式直接寻址方式6000H6000H.操作码操作码00003131.50H50H30H30H.6 0 0 0 06 0 0 0 03

41、 1 0 03 1 0 0+ +6 3 1 0 06 3 1 0 063100H63100H30H30H50H50HAHAHALAL代代码码段段数数据据段段DSDS例:例:MOV AXMOV AX,3100H3100H(DSDS)=6000H , (63100H)=3050H =6000H , (63100H)=3050H 则则: :(AXAX)= = 3050H3050H如:如:VALUEVALUE在附加段中,在附加段中, 则应指定段跨越。则应指定段跨越。 MOV AXMOV AX,ESES:VALUEVALUE注意:注意:(1 1)直接寻址方式)直接寻址方式隐含的段寄存器是隐含的段寄存器是

42、 DSDS,8086/80888086/8088允许段允许段跨越跨越, ,即即允许使用允许使用 CS SS ESCS SS ES作为段寄存器,这时,必须在指令中特作为段寄存器,这时,必须在指令中特别标明。别标明。 (2 2)IBM PCIBM PC机中规定机中规定双操作数不能同时为内存,指令必须有双操作数不能同时为内存,指令必须有一个操作数使用寄存器一个操作数使用寄存器方式,这就是常常先要把一个变量送到方式,这就是常常先要把一个变量送到寄存器去的原因。寄存器去的原因。例:例:要处理某存放在存储器里的变量,可以用直接寻址方式把变量要处理某存放在存储器里的变量,可以用直接寻址方式把变量先取到一个寄

43、存器中再作处理。先取到一个寄存器中再作处理。n操作数在寄存器中,指令指定寄存器号。操作数在寄存器中,指令指定寄存器号。n对于位操作数,寄存器可以是对于位操作数,寄存器可以是: : ,, ,, 以及以及段寄存器段寄存器。n对于位操作数,寄存器可以是对于位操作数,寄存器可以是: : ,。,。3. 3. 寄存器寻址(寄存器寻址(Register AddressingRegister Addressing)这种寻址方式因为操作数在寄存器中这种寻址方式因为操作数在寄存器中, ,不需要访问存储器,不需要访问存储器,运算速度较高运算速度较高。例:例:指令执行前指令执行前:(AX)3064 (SS)1234

44、MOV SS,AX指令执行后指令执行后:(SS) (AX)指令执行前:指令执行前:指令执行后指令执行后:寄存器寻址方式寄存器寻址方式SSSSAXAX3064H3064H3064H3064H1234H1234H3064H3064H3064H保持不变保持不变4.4.寄存器间接寻址寄存器间接寻址(Register Indirect Addressing)(Register Indirect Addressing)n与寄存器的寻址方式不同,指令中指定的寄存器的内容不是与寄存器的寻址方式不同,指令中指定的寄存器的内容不是 操作数而是操作数的操作数而是操作数的偏移地址偏移地址;n操作数本身在操作数本身在内

45、存内存中中n能做这种用途的寄存器叫做能做这种用途的寄存器叫做地址指针寄存器地址指针寄存器。它们是。它们是SISI、DI DI 、BXBX、BPBP,也简称为,也简称为间址寄存器,间址寄存器, 使用时加使用时加 。选择选择SISI、DI DI 、BXBX作间址寄存器时,操作数在数据段,作间址寄存器时,操作数在数据段, 段基址由段基址由DSDS决定;决定;如果用如果用BPBP,则操作数在堆栈段,段基址由,则操作数在堆栈段,段基址由SSSS决定。决定。无论选择哪一个间址寄存器,都允许段超越。无论选择哪一个间址寄存器,都允许段超越。注意:注意:例:例:MOV BX,DI (DS)=6000H (DI)

46、=2000H PA=62000H (62000H)=50A0H (BX)=50A0H寄存器间接寻址方式寄存器间接寻址方式 MOV BX,DI6000H6000H2000H2000HDSDSDIDI6 0 0 0 06 0 0 0 02 20 00 00 0+ +6 2 0 0 06 2 0 0 0.AOHAOH50H50H.62000H62000H50H50HA0HA0HBLBLBHBH数数据据段段注意:注意:MOV BX,DIMOV BX,DI和和 MOV BX,DIMOV BX,DI的区别!的区别!例:例: MOV BP, AX执行前:执行前: (SS)=1000H , (BP)=3000

47、H , (AX)=1234H执行后:执行后:PA=13000H (13000H)=1234H1000H1000H3000H3000HSSSSBPBP1 0 0 0 01 0 0 0 03 30 00 00 0+ +1 3 0 0 01 3 0 0 0.34H34H12H12H.13000H13000H12H12H34H34HALALAHAH堆堆栈栈段段寄存器间接寻址方式寄存器间接寻址方式 MOV BP, AX指令中可以指定指令中可以指定段跨越前缀段跨越前缀来取得其他来取得其他段中的数据。段中的数据。例:例:MOV ES:DI, AX MOV DX, DS:BP这种寻址方法可以用于表格处理。这种

48、寻址方法可以用于表格处理。5.5.寄存器相对寻址寄存器相对寻址 (Register relative addressing) (Register relative addressing) EAEA= =(BX)(BX)(SI)(SI)(DI)(DI)+ +8位位移量8位位移量16位位移量16位位移量(BP)(BP)n操作数存放操作数存放在在内存内存中中n操作数的有效偏移地址是操作数的有效偏移地址是指令指定的间址寄存器的内容和指令指定的间址寄存器的内容和指令中给出的一个指令中给出的一个8 8位或位或1616位地址偏移量之和位地址偏移量之和PA=16d (DS)+PA=16d (DS)+(BX)(

49、BX)(SI)(SI)(DI)(DI)+ +8位位移量8位位移量16位位移量16位位移量PA=16d (SS)+PA=16d (SS)+ (BP)(BP)+ +8位位移量8位位移量16位位移量16位位移量除有除有段跨越前缀段跨越前缀之外,形成物理地址有二种方式:之外,形成物理地址有二种方式:例:例: MOV AX, COUNT BP或或MOV AX, COUNT+BP或或MOV AX, COUNT+BP COUNT为为16位位移量。位位移量。指令执行前指令执行前: (SS)=5000H, (BP)=3000H,COUNT=2040H,(AX)=1234H 寄存器相对寻址方式寄存器相对寻址方式M

50、OV AX,COUNTBPOPOPOPOP40H40H20H20H.48H48H55H55H.55H55H48H48H存储器存储器操操作作码码位移量位移量COUNTCOUNT代代码码段段堆堆栈栈段段55040H55040H50000H50000HAHAHALAL指令执行后指令执行后:EA=PA=(AX)=5040H55040H5548H用途:这种寄存器相对寻址方式常用于用途:这种寄存器相对寻址方式常用于表格处理表格处理。 表格首地址表格首地址COUNT 修改间址寄存器来取得表格中的值。修改间址寄存器来取得表格中的值。例:某数据表的首地址为例:某数据表的首地址为COUNT 欲读取表中第欲读取表中

51、第10个数据个数据,存放到(存放到(AL)中。中。 第第10个数据的有效地址个数据的有效地址: EA= COUNT + 9MOV SI , 09HMOV AL , SI+COUNT *相对寻址方式也可以使用段跨越前缀相对寻址方式也可以使用段跨越前缀 MOV DL,ES:STRINGSIn操作数的操作数的有效地址是一个基址寄存器和一个变址寄存器的内有效地址是一个基址寄存器和一个变址寄存器的内容之和容之和,基址寄存器名和变址寄存器名均有指令指定。,基址寄存器名和变址寄存器名均有指令指定。(BP)(BP)+ +(DI)(DI)(SI)(SI)EA=EA=(BX)(BX)+ +(DI)(DI)(SI)

52、(SI)EA=EA=6. 6. 基址基址-变址寻址(变址寻址(Based indexed addressingBased indexed addressing)n操作数存放操作数存放在在内存内存中中除有除有段跨越前缀段跨越前缀之外,形成物理地址有二种方式:之外,形成物理地址有二种方式:PA=16d(DSPA=16d(DS)+)+ (BX)(BX)+ +(DI)(DI)(SI)(SI)PA=16d(SPA=16d(SS S)+)+ (BP)(BP) + +(DI)(DI)(SI)(SI)例:例: MOV AX, BXSI或或 MOV AX, BX+SI执行指令前执行指令前: (DS)=3200H

53、, (BX)=0456H, (SI) =1094H (334EAH)=4567H执行指令后执行指令后: EA= PA= (AX)=基址加变址寻址方式基址加变址寻址方式 MOV AX,BX+SI.67H67H45H45H存储器存储器32000H32000H334EAH334EAH45H45H67H67HALALAHAH数数据据段段.14EAH334EAH4567H用途:这种寻址方式同样适用于用途:这种寻址方式同样适用于数组或表格数组或表格处理。处理。表格首地址放在基址寄存器中表格首地址放在基址寄存器中,用变址寄存器来访问数组中的元素。用变址寄存器来访问数组中的元素。 二个寄存器都能修改,二个寄存

54、器都能修改,所以比相对寻址方式更灵。所以比相对寻址方式更灵。这种寻址方式允许段跨越。这种寻址方式允许段跨越。使用段跨越前缀格式使用段跨越前缀格式: MOV AX,ES:BXSIMOV AX, BXBPMOV AX, SIDIn操作数操作数有效地址是一个基址寄存器和一个变址寄存器的内有效地址是一个基址寄存器和一个变址寄存器的内容和容和8位或位或16位位移量之和位位移量之和 。(BP)(BP) + +(DI)(DI)(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量EA=EA=(BX)(BX) + +(DI)(DI)(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量

55、EA=EA=7. 7. 基址基址-变址变址-相对寻址(相对寻址( Based indexed Based indexed relative addressing relative addressing)n操作数存放操作数存放在在内存内存中中除有除有段跨越前缀段跨越前缀之外,形成物理地址有二种方式:之外,形成物理地址有二种方式:(DI)(DI)PA=16d(SSPA=16d(SS)+)+ (BP)(BP) + +(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量(DI)(DI)PA=16d(DSPA=16d(DS)+)+ (BX)(BX) + +(SI)(SI)+ +8位位移量8

56、位位移量16位位移量16位位移量例:例:MOV AX, MASKBXDIMOV AX, MASK BX+DIMOV AX,MASK+BX+DI执行指令前执行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H执行指令后执行指令后:EA=PA=(AX)= 相对基址加变址相对基址加变址MOV AX, MASK+BX+DIOPOPOPOP34H34H12H12H.50H50H40H40H存储器存储器30000H30000H32A7AH32A7AH40H40H50H50HALALAHAH数数据据段段操操作作码码位移位移量量MASKMASK

57、代代码码段段2A7AH32A7AH4050H用途:用途:这种寻址方式为这种寻址方式为堆栈堆栈处理提供方便:处理提供方便:(BP) 栈顶(一般栈顶(一般 BP 可指向栈顶)可指向栈顶)从栈顶到数组的首地址可以用位移从栈顶到数组的首地址可以用位移量表示量表示(MASK). 变址寄存器(变址寄存器(SI)或()或(DI)指指向数组中某个元素。向数组中某个元素。MOV AX, DATABXBPMOV AX, DATASIDI8.8.隐含寻址隐含寻址n操作码本身隐含地指明了操作数或部分操作数的地址。操作码本身隐含地指明了操作数或部分操作数的地址。如:如:MUL BL;MUL BL;ALxBL AX AL

58、xBL AX CPUCPU的寻址方式总结的寻址方式总结获得操作数所在地址的寻址方式:获得操作数所在地址的寻址方式:u立即寻址立即寻址u直接寻址直接寻址u寄存器寻址寄存器寻址u寄存器间接寻址寄存器间接寻址u寄存器相对寻址寄存器相对寻址u基址基址-变址寻址变址寻址u基址基址-变址变址相对寻址相对寻址u隐含寻址隐含寻址MOV AX, 3102HMOV AX, 3102HMOV AL, 4000H MOV AL, 4000H MOV AL,BL MOV AL,BL MOV AX,SIMOV AX,SIMOV AX,DATABXMOV AX,DATABXMOV AX, BXSIMOV AX, BXSIM

59、OV AX, DATADIBX MOV AX, DATADIBX MUL BLMUL BL2022-5-82022-5-853534.4 80864.4 8086指令系统指令系统 DATA DATA 8 8位或位或1616位的立即数位的立即数 OPRD OPRD 各种类型的操作数各种类型的操作数 REG REG 通用寄存器,长度可以使通用寄存器,长度可以使8 8位或位或1616位位memmem 存储器操作数存储器操作数accacc累加器操作数累加器操作数destdest目的操作数目的操作数srcsrc源操作数源操作数dispdisp8 8位或位或1616位的位移量,可用符号地址表示位的位移量,

60、可用符号地址表示SEGREGSEGREG 段寄存器段寄存器CSCS、DSDS、SSSS、ESESportport输入输出端口输入输出端口( (地址地址) )( )( )表示寄存器的内容表示寄存器的内容 表示存储器操作数,括号内容表示偏移表示存储器操作数,括号内容表示偏移地址地址1. 1. 数据传送类指令数据传送类指令功功 能能: :实现实现CPUCPU内部寄存器之间、内部寄存器之间、CPUCPU和存储器之间以及和存储器之间以及CPUCPU和和I/OI/O端口之间的端口之间的数据传送数据传送。 存储器存储器 寄存器寄存器 I/OI/O 特特 点点: : 含两个操作数,当指令中仅列出一个操作数时,

温馨提示

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

评论

0/150

提交评论