ImageVerifierCode 换一换
格式:DOCX , 页数:104 ,大小:1.10MB ,
资源ID:4002375      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4002375.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第2章 指令系统及汇编语言程序设计.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第2章 指令系统及汇编语言程序设计.docx

1、第2章 指令系统及汇编语言程序设计第2章 指令系统及汇编语言程序设计1 概述一、 指令系统人们要求计算机解决计算或处理信息的问题,首先必须把问题要转换为计算机能识别和执行的一步步操作指令,我们把这种要求计算机执行的各种操作用命令形式写下来,这就称为指令。通常一条指令对应一种基本操作,例如加、减、传送、移位等,一个计算机能执行什么样操作,能做多少种操作,是由该计算机的指令系统所决定的,因此,计算机所能执行的全部指令,就是计算机的指令系统。微处理器的主要功能是由它的指令系统来体现的。目前,一般小型或微型计算机的指令系统可以包括几十种或百余种指令(8086有115条)。每种计算机都有自己固定的指令系

2、统,8086/8088的指令系统和M68000的指令系统具有不同的指令,不能相互兼容,也就是说,8086/8088的指令系统中的指令,只能由8086/8088微处理器所识别和执行,而不能被M68000微处理器所识别和执行。但8086/8088微处理器可以执行8080/8085指令系统中的指令,所以只有同系列微处理器指令系统是相兼容的。二、 指令格式计算机中的指令有操作码字段和操作数字段两部分组成。操作码字段指出计算机所要执行的操作,而操作数字段则指出在指令操作过程中所需的操作数据。例如,加法指令一方面需要指定做加法操作的部分,即操作码字段。另一方面需给出被加数和加数部分,即操作数字段。操作数字

3、段可以是操作数本身,也可以是操作数地址或地址的一部分,还可以是指向操作数地址的指针或其他有关操作数的信息。指令的格式一般是:操作码 操作数 操作数操作数字段可以有一个、二个或三个,通常称为一地址、二地址或三地址指令。例如,单操作数指令,它只需指定一个操作数参加操作,如移位指令、增1、减1指令等,这都是一地址指令。大多数运算指令是双操作指令,如算术和逻辑运算指令,对于这种指令,有的机器采用三地址指令,除指出参加运算的两个操作数以外,还指出运算结果存放地址,现大多数计算机采用二地址指令,此时分别称两个操作数为原操作数和目的操作数。尽管在指令执行前这两个操作数都是原始操作数,但指令执行后将把运算结果

4、存放到目的操作数的地址中去,当然目的操作数的原始数据将会丢失。如果此原始数据在以后的运算中还会用到,那么必须在运算之前给它准备一个副本(即预先存储在内存或寄存器中)。8086/8088的运算指令就采用这种二地址指令。三、 寻址方式指令中操作数字段实质上指出参加操作运算的操作数存放于何处。一般说来,操作数可以存放在指令代码中,称为立即数。操作数也可以存放在CPU的内部寄存器中,称为寄存器操作数。操作数绝大多数存放在存储器中,称为存储器操作数。对于一部分I/O指令来说,操作数可以存放在接口电路的寄存器中。 指定立即数和寄存器操作数的表示方法比较简单。而对存储器操作数来说,一个存储单元的地址就需要2

5、0位,怎样设法使它在指令的操作数字段的表示中减少位数呢?另外,从程序运行时的数据结构来看,操作数常常不是单个的数,往往是成组的以表格或数组形式存放在存储器的某一区域中,在这种情况下,指令用什么方式来指定操作数的地址更好呢?从程序设计的通用性来看,操作数或操作数存放的地址在指令中的指定应具有易于改变的灵活性,因此,需要有多种方式来指定操作数或操作数地址的问题。指令中用于说明操作数所在地址的方法,称为寻址方式。我们知道,计算机只能识别二进制代码,机器指令是由二进制代码组成的,这种指令称为机器码,机器码是由一串0和1组成,没有明显的特征,人们不好记忆,不易理解,易出错。所以,编制程序成为一种十分困难

6、和繁琐的工作。 因而人们就用一些助记符通常是指令功能的英文词的缩写来代替操作码。如8086/8088中,数的传送指令用助记符MOV(MOVE缩写)表示。例:MOV DS,AX 机器码:8ED8。MOV BP,SP 机器码:8BEC。MOV AX,ES:BX 机器码: 268B07这样,每条指令有明显的特征,易于理解和记忆,也不易出错,此即汇编语言阶段。汇编语言书写的指令操作码用助记符代替,操作数也可用符号或符号地址(称为标号)来表示,它与机器指令是一一对应的。本章均用汇编语言格式书写指令。四、指令的执行时间一条指令的执行时间是取指令、取操作数、执行指令及传送结果各个阶段所需时间的总和。详细讨论

7、各种指令的执行时间是个比较复杂的问题,在此,只讨论一些一般的概念。指令的基本执行时间因指令的不同而异,相互之间有很大的差异,而取、存操作数时间又因不同的寻址方式而有所不同。当需要访问存储器以取得操作数时,还需要考虑计算有效地址EA所需要的时间。表1表3所列为执行不同指令所需的时间、执行加法指令时不同的寻址方式所需的时间,以及在不同的寻址方式下计算EA所需的时间。在这些表格中,所有的时间都是以时钟周期数表示的。表1 指令的基本执行时间举例指令寻址方式时钟周期数加法ADD寄存器寄存器3传送MOV寄存器寄存器2整数乘法IMUL16位寄存器乘128154整数除法IDIV16位寄存器除165184移位寄

8、存器移1位2无条件转移JMP直接15条件转移不转移4转移16表2 加法指令的执行时间操作数的寻址方式时钟周期数访问存储器的次数寄存器到寄存器30存储器到寄存器9+EA1寄存器到存储器16+EA2立即数到寄存器40立即数到存储器17+EA2表3 计算有效地址(EA)所需时间寻址方式时钟周期数直接6寄存器间接5寄存器相对9基址变址78相对基址变址1112另外,从表1表3可以看出,不仅不同指令的执行时间差别很大,而且,当同一种指令使用不同寻址方式时,指令的执行时间差别也是很大的。例:假设时钟频率为5MHz,则一个时钟周期为0.2us,求下列指令的执行时间。 寄存器寄存器方式,加法ADD指令。则ADD

9、指令的执行时间:T=30.2=0.6us。 存储器寄存器方式,若存储器使用相对基址变址寻址方式,则:T=(9+EA)0.2=(9+12)0.2=4.2us。如果在此种寻址方式下,求得的存储器有效地址为奇数,则根据IBM PC的规定,需要多访问一次存储器,即要增加4个时钟周期数,则t=(9+12+4)0.2=5us 寄存器存储器方式,此时,若存储器使用相对地址变址方式,则:t=(16+EA)0.2=(16+12)0.2=5.6us。如果此时求得的是奇地址,则需要时间为:t=(16+12+8)0.2=7.2us。可见,即使是同一种ADD指令,不同的寻址方式也可以使它的执行时间相差一个数量级。因此合

10、理选择指令和寻址方式是很重要的,进而可知,用以完成同样功能的不同程序,在占用空间和执行时间上可能有很大的差别。因此,在编制汇编程序时,如果对程序所占的存储空间或程序的执行时间要求不高,那么只需根据题意编制出合乎要求的程序就可以了(当然,如果能提高程序的空间效率和时间效率,则更为理想);若对程序所占有的存储空间或者对于执行的时间要求很高,那么应仔细斟酌程序算法、数据结构及指令与寻址方式的选用,以便编制出符合要求的程序。2 8086/8088的寻址方式一、 几个概念的说明1 操作数的种类数据操作数这类操作数是与数据有关的操作数,即指令中操作的对象是数据,数据操作数又可分为:立即数操作数指令中要操作

11、的数据在指令中。寄存器操作数指令中要操作的数据存放在指定的寄存器中。存储器操作数指令中要操作的数据存放在指定的存储单元中。I/O操作数指令中要操作的数据来自或送到I/O端口。转移地址操作数这类操作数是与转移地址有关的操作数,即指令中操作的对象不是数据,而是要转移的目标地址。转移地址操作数也可分为:立即数操作数、寄存器操作数、存储器操作数。2有效地址EA当操作数是存放在存储器中时,存储器的存储单元的物理地址由两部分组成,一部分是偏移地址,一部分是段地址。在8086/8088的各种寻址方式中,寻找存储单元所需的偏移地址可由各种成分组成,称为有效地址,用EA表示,不同的寻址方式,组成有效地址EA的各

12、部分内容也不一样,详见后面的讨论说明。3段超越存储器操作数寻址时,存储单元的物理地址的另一部分是段地址,对段地址是如何规定的呢?8086/8088指令系统中对段地址有两个基本规定,即所谓的Default(默认)状态。在正常情况下,由寻址方式中有效地址规定的基地址寄存器来确定段寄存器,即只要寻址方式中出现BP寄存器作为基地址,段寄存器一定采用堆栈段SS段寄存器。其余的情况都采用DS段寄存器(注:串处理指令有另外规定)。物理地址=DS16(10H)+偏移地址指令中的操作数也可以不在基本规定的段区域,但是必须在指令中指定段寄存器,这就是段超越。例:MOV AL,2000H ;物理地址=DS16+20

13、00HMOV AL,ES:2000H ;物理地址=ES16+2000H段地址的基本规定和允许超越的情况如下表1所示:表1 段地址的基本规定和允许超越的情况存储器存取方式默认段可“段超越”的段地址段内偏义地址来源取指令CS无IP堆栈操作SS无SP字符串操作原地址DSCS,ES,SSSI字符串操作目标地址ES无DIBP作基址SSCS,DS,ES计算得的EA通用数据读写DSCS,ES,SS计算得的EA二、 与数据有关的寻址方式8086/8088指令中数据(操作数)有7种寻址方式。1立即寻址方式(Immediate addressing)操作数直接存放在指令中,紧跟在操作码之后,它作为指令的操作码字段

14、存放在指令代码中,这种数称为立即数。立即数可以是8位的或16位的,如果是16位立即数,则低位字节数存放在低地址单元中(紧跟在操作码之后),高位字节数存放在高地址单元中。指令码存放形式所示:16位代码段 代码段 OPD8 操作码 指令码 操作数 8位 操作数例1:MOV AL,05H ;AL05H指令执行后,AL=05H,8位数据05H存入AL寄存器。操作的示意图如图所示。指令功能、指令执行过程演示见PPT文档。 MOV AL,05操作示意图例2:MOV AX,1234H ;AX1234H指令执行后,AX=0102H,16位数据存入AX寄存器,其中(AH)=12H,(AL)=34H。操作示意图如

15、图所示。指令功能、执行过程演示见PPT文档。例3:MOV AX,COUNT ;AXCOUNT在汇编语言指令中,可以用符号COUNT代替常数,但是COUNT必须用伪指令EQU来赋值。 立即数寻址方式主要用来对寄存器赋值,由于在执行的过程中,立即数可以从指令队列中直接取得,CPU不必执行总线周期,指令执行速度快。注:立即数只能是整数,只能作为源操作数。2寄存器寻址方式(Register addressing)操作数在寄存器中,指令指定寄存器号。对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP和BP等;对于8位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH和DL等

16、。这种寻址方式由于操作数在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。寄存器这种寻址方式寻找操作数的示意图如下:例:MOV AX,BX ;AXBX 若指令执行前,AX=3064H,BX=1234H 则指令执行后,AX=1234H,BX=1234H指令功能、执行过程演示见PPT文档。除上述两种寻址方式以外,以下介绍的各种寻址方式的操作数都是存放在代码段以外的存储器区段中。3直接寻址方式(Direct addressing)在直接寻址方式中,有效地址EA就在指令代码中,它存放在代码段中指令操作码后面的操作数字段,指令码表示如图。此寻址方式与立即寻址方式相比较,在指令代码中,

17、直接寻址的操作数字段是偏移地址,立即寻址的操作数字段是立即数。由于操作数在正常情况下是存放在数据段中,所以必须先求出操作数的物理地址,然后再按照此地址访问存储器才能取得或存入数据。其寻址方式示意图如图所示。操作数物理地址(PA)为:PA=DS10H+EA8086/8088允许数据存放在数据段以外的其它段中,此时在指令中应指定段超越的段寄存器名,在计算物理地址时应使用指定的段寄存器。例1:MOV AX,1000H;将有效地址EA=1000H单元中的内容传送到AX寄存器。如DS=2000H,从指令可知,EA=1000H。存放源操作数的存储单元的物理地址为:PA=DS10H+EA=20000+100

18、0=21000H。假设指令执行前,AX=7850H,(21000H)=78H,(21001H)=56H。指令执行后:AX=5678H,(21000H)=78H,(21001H)=56H。指令执行情况如图所示。命令功能、执行过程演示见PPT文档。在汇编语言中,可用符号地址代替数值地址,如:例2:MOV AX,VALUE其中VALUE即为存放源操作数的符号地址(有效地址EA),需用伪地址定义,此指令也可写成:MOV AX,VALUE。源操作数的存储单元也可以存放在其它段中,但必须在指令中指定段超越前缀,如:MOV AX,ES:2000HMOV AX,SS:VALUE4寄存器间接寻址方式(Regis

19、ter indirect addressing)操作数的有效地址在基址寄存器BX,BP或变址寄存器SI,DI中,操作数则在存储器中,此种寻址方式示意图如图所示。如果指令指定的寄存器是BX,SI和DI,则操作数必定在数据段中,以DS段寄存器的内容作为段地址,操作数的物理地址为:PA=16DS+BX或 PA=16DS+SI或 PA=16DS+DI如指令中指定的寄存器是BP,则操作数必定在堆栈段中,以SS段寄存器的内容作为段地址,操作数的物理地址为: PA=16SS+BP例1:MOV AX,BX若DS=2000H,BX=1000H,则PA=20000+1000=21000H。指令执行前:AX=804

20、0H,(21000H)=A0H,(21001H)=50H指令执行后:AX=50A0H,(21000H)=A0H,(21001H)=50H例1执行情况示意如图所示。命令功能、执行过程演示见PPT文档。指令中也可以指定段超越前缀来使操作数存放在其它段中。如:例2:MOV AX,SS:BX这时 PA=16SS+BX这种寻址方式适用于表格处理,执行完一条指令后,只需修改寄存器内容,就可以取出表格中的下一项。5寄存器相对寻址(Register relative addressing)(或称直接变址寻址)操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位偏移量(displace men

21、t)之和。对于BX,SI,DI寄存器,段寄存器用DS,对于BP寄存器,段寄存器用SS,其物理地址(PA)为:或这种寻址方式示意如图所示。例1:MOV AX,dispSI 或 MOV AX,SI+disp其中disp为16位偏移量,它是符号地址。实际上disp究竟是8位还是16位偏移量,可由伪指令来定义。如DS=3000H,SI=2000H,disp=3000H。则EA=SI+disp=2000H+3000H=5000H物理地址PA=16DS+EA=30000H+5000H =35000H指令执行前:AX=7A6CH,(35000H)=34H,(35001H)=12H。指令执行后:AX=1234

22、H,(35000H)=34H,(35001H)=12H。例1执行情况示意如图所示。命令功能、执行过程演示见PPT文档。同样,这种寻址方式也可采用段超越。如:例2:MOV DL,ES:dispDI则:EA=disp+di , PA=16ES+disp+DI这种寻址方式也适用于表格处理。6基址变址寻址方式(Based indexed addressing)操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。两个寄存器均由指令指定。如基址寄存器为BX,段寄存器使用DS;基址寄存器为BP,段寄存器使用SS。因此物理地址为:物理地址=16DS+BX+SI ; 物理地址=16DS+BX+DI物理地

23、址=16SS+BX+SI ; 物理地址=16SS+BX+DI这种寻址方式如下图:例1:MOV AX,BXDI 或 MOV AX,BX+DI如DS=3000H,BX=6780H,DI=0041H。则EA=6780H+0041H=67C1H,源操作数存放单元的物理地址为:PA=30000H+67C1H=367C1H。指令执行前:AX=8957H,(367C1H)=34H,(367C2H)=12H。指令执行后:AX=1234H,(367C1H)=34H,(367C2H)=12H。例1执行情况示意如图所示。这种寻址方式使用段超越的格式为:例2:MOV AX,ES:BXSI此寻址方式适用与数组和表格处理

24、。命令功能、执行过程演示见PPT文档。7相对基址变址寻址(Relative based indexed addressing)操作数的有效地址是一个基址寄存器内容,一个变址寄存器的内容和8位或16位偏移量之和。当基址寄存器为BX,段寄存器用DS; 基址寄存器为BP,段寄存器用SS。其物理地址为:这种寻址方式的寻址示意如图所示。例1:MOV AX,dispBXSI 或 MOV AX,dispBX+SI 或 MOV AX,disp+BX+SI如DS=5000H,BX=1C7AH,SI=0135H,disp=0200H。则物理地址为:物理地址=50000H+1C7AH+0135H+0200H=51F

25、AFH指令执行前:AX=765AH,(51FAFH)=78H,(51FB0H)=56H。指令执行后:AX=5678H,(51FAFH)=78H,(51FB0H)=56H。这种寻址方式为堆栈处理提供了方便,一般BP可指向栈顶,从栈顶到数组的首地址可用偏移量表示,变址寄存器可用来访问数组中的某个元素。例1执行情况示意如图所示。命令功能、执行过程演示见PPT文档。练习:若:BX=0158H,DI=10A5H,偏移量(disp)=1B57H,DS=2100H,SS=1100H,BP=0100H,段寄存器按默认段寄存器,计算相对于存储器寻址的各种寻址方式的有效地址和物理地址。解:直接寻址:EA=1B57

26、H ;PA=16DS+EA=21000H+1B57H=22B57H寄存器间接寻址(设寄存器为BX):EA=0158H ;PA=16DS+EA=21000H+0158H=21158H寄存器相对寻址(设寄存器为BP):EA=BP+disp=0100H+1B57H=1C57HPA=16SS+EA=11000H+1C57H=12C57H基址变址寻址(设寄存器为BX和DI):EA=BX+DI=0158H+10A5H=11FDHPA=16DS+EA=21000H+11FDH=221FDH基址变址相对寻址(设寄存器为BP和DI):EA=BP+DI+disp=0100H+10A5H+1B57H=2CFCHPA

27、=16SS+EA=11000H+2CFCH=13CFCH三、与转移地址有关的寻址方式P383 8086/8088指令系统8086/8088CPU指令系统分为7大类(传送指令、算术指令、逻辑运算和移位指令、串操作指令、程序控制指令、处理器控制指令)。一、数据传送类指令数据传送类指令是指令系统中用得最多的一类指令,也是条数最多的一类指令(14条),常用于将原始数据、中间运算结果、最终结果及其他信息在CPU的寄存器和存储器之间进行传送。根据功能的不同,数据传送类指令可分为: 通用数据传送指令:MOV 交换指令:XCHG 堆栈操作指令:PUSH ,POP 地址传送操作指令:LEA,LDS,LES 标志

28、寄存器传送指令:LAHF,SAHF,PUSHF,POPF 累加器专用传送指令:IN,OUT,XLAT1通用数据传送指令MOV 传送指令格式: MOV DST,SRC执行的操作:(DST) (SRC)其中DST表示目的操作数,SRC表示源操作数。功能:此指令把一个字节或一个字操作数从源传送到目的,源操作数内容未变,目的操作数内容和源操作数内容相同。MOV指令有九种形式,如图所示。从累加器送到存储器格式:MOV MEM,AC ;(mem) ac(ac表示AX,AH,AL)从存储器送累加器格式:MOV AX,DISPBPSI;把地址SS10H+(BP)+(SI)+DISP存储单元的内容送AX从存储器

29、或寄存器送到段寄存器格式:MOV segreg,mem/reg ;segreg (mem/reg)其中segreg表示不包括CS的段寄存器(SS,DS,ES),本指令只能是字操作。从段寄存器到寄存器或存储器格式:MOV mem/reg,segreg ;(mem/reg) segreg规定同,但segreg包括CS,即CS,SS,DS,ES。从寄存器到寄存器格式:MOV reg1,reg2 ;reg1 reg2注:两个寄存器之间传送时,只能相同字长的寄存器之间传送,不能在不同字长寄存器之间传送。从寄存器到存储器格式:MOV mem,reg ;(mem) reg此指令可以是字操作,也可以是字节操作

30、。从存储器到寄存器格式:MOV reg,mem ;reg (mem)与传送方向相反,规定相同。立即数送寄存器格式:MOV reg,data ;reg data 8位Data 立即数,ASCII字符。Data数据类型必须与寄存器字长相一致。8位数 16位可以送16位寄存器,但16位数不能送8位寄存器。立即数送存储器格式:MOV mem,data ;(mem) data BYTE PTR 字节操作规定同,但对mem存储操作数必须作数据类型说明。 WORD PTR 字操作注意点: MOV指令的目的操作数不允许用立即数方式,也不允许使用CS段寄存器,而且除源操作数为立即数的情况外,两个操作数中必须有一个是寄存器。不允许mem直接之间传送;也不允许在两个段寄存器之间直接传送。 MOV指令不影响标志位。例1:立即数送通用寄存器或存储器MOV AL,55HMOV

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1