收藏 分享(赏)

第2章指令系统及汇编程序设计word03.ppt

上传人:11xg27ws 文档编号:5788677 上传时间:2019-03-17 格式:PPT 页数:437 大小:4.90MB
下载 相关 举报
第2章指令系统及汇编程序设计word03.ppt_第1页
第1页 / 共437页
第2章指令系统及汇编程序设计word03.ppt_第2页
第2页 / 共437页
第2章指令系统及汇编程序设计word03.ppt_第3页
第3页 / 共437页
第2章指令系统及汇编程序设计word03.ppt_第4页
第4页 / 共437页
第2章指令系统及汇编程序设计word03.ppt_第5页
第5页 / 共437页
点击查看更多>>
资源描述

1、2019年2月24日星期日,1,微机原理与接口技术,2019年2月24日星期日,2,指令系统及汇编语言程序设计,1 概述 一、指令系统 人们要求计算机解决计算或处理信息的问题,首先必须把问题要转换为计算机能识别和执行的一步步操作步骤,我们把这种要求计算机执行的各种操作用命令形式写下来,这就称为指令。,2019年2月24日星期日,3,指令系统及汇编语言程序设计,通常一条指令对应一种基本操作,例如加、减、传送、移位等,一个计算机能执行什么样操作,能做多少种操作,是由该计算机的指令系统所决定的,因此,计算机所能执行的全部指令,就是计算机的指令系统。 微处理器的主要功能是由它的指令系统来体现的。,20

2、19年2月24日星期日,4,指令系统及汇编语言程序设计,目前,一般小型或微型计算机的指令系统可以包括几十种或百余种指令(8086有115条)。每种计算机都有自己固定的指令系统,8086/8088的指令系统和M68000的指令系统具有不同的指令,不能相互兼容,,2019年2月24日星期日,5,指令系统及汇编语言程序设计,也就是说,8086/8088的指令系统中的指令,只能由8086/8088微处理器所识别和执行,而不能被M68000微处理器所识别和执行。但8086/8088微处理器可以执行8080/8085指令系统中的指令,所以只有同系列微处理器指令系统是相兼容的。,2019年2月24日星期日,

3、6,指令系统及汇编语言程序设计,二、指令格式计算机中的指令有操作码字段和操作数字段两部分组成。操作码字段指出计算机所要执行的操作,而操作数字段则指出在指令操作过程中所需的操作数据。例如,加法指令一方面需要指定做加法操作的部分,即操作码字段。,2019年2月24日星期日,7,指令系统及汇编语言程序设计,另一方面需给出被加数和加数部分,即操作数字段。操作数字段可以是操作数本身,也可以是操作数地址或地址的一部分,还可以是指向操作数地址的指针或其他有关操作数的信息。,2019年2月24日星期日,8,指令系统及汇编语言程序设计,指令的格式一般是:,操作码 操作数 操作数,操作数字段可以有一个、二个或三个

4、,通常称为一地址、二地址或三地址指令。例如,单操作数指令,它只需指定一个操作数参加操作,如移位指令、增1、减1指令等,这都是一地址指令。,2019年2月24日星期日,9,指令系统及汇编语言程序设计,大多数运算指令是双操作指令,如算术和逻辑运算指令,对于这种指令,有的机器采用三地址指令,除指出参加运算的两个操作数以外,还指出运算结果存放地址,现大多数计算机采用二地址指令,此时分别称两个操作数为原操作数和目的操作数。,2019年2月24日星期日,10,指令系统及汇编语言程序设计,尽管在指令执行前这两个操作数都是原始操作数,但指令执行后将把运算结果存放到目的操作数的地址中去,当然目的操作数的原始数据

5、将会丢失。如果此原始数据在以后的运算中还会用到,那么必须在运算之前给它准备一个副本(即预先存储在内存或寄存器中)。 8086/8088的运算指令就采用这种二地址指令。,2019年2月24日星期日,11,指令系统及汇编语言程序设计,三、寻址方式指令中操作数字段实质上指出参加操作运算的操作数存放于何处。一般说来,操作数可以存放在指令代码中,称为立即数。操作数也可以存放在CPU的内部寄存器中,称为寄存器操作数。操作数绝大多数存放在存储器中,称为存储器操作数。对于一部分I/O指令来说,操作数可以存放在接口电路的寄存器中。,2019年2月24日星期日,12,指令系统及汇编语言程序设计,指定立即数和寄存器

6、操作数的表示方法比较简单。而对存储器操作数来说,一个存储单元的地址就需要20位,怎样设法使它在指令的操作数字段的表示中减少位数呢?另外,从程序运行时的数据结构来看,操作数常常不是单个的数,往往是成组的以表格或数组形式存放在存储器的某一区域中,在这种情况下,指令用什么方式来指定操作数的地址更好呢?,2019年2月24日星期日,13,指令系统及汇编语言程序设计,从程序设计的通用性来看,操作数或操作数存放的地址在指令中的指定应具有易于改变的灵活性,因此,需要有多种方式来指定操作数或操作数地址的问题。指令中用于说明操作数所在地址的方法,称为寻址方式。,2019年2月24日星期日,14,指令系统及汇编语

7、言程序设计,我们知道,计算机只能识别二进制代码,机器指令是由二进制代码组成的,这种指令称为机器码,机器码是由一串0和1组成,没有明显的特征,人们不好记忆,不易理解,易出错。所以,编制程序成为一种十分困难和繁琐的工作。,2019年2月24日星期日,15,指令系统及汇编语言程序设计,因而人们就用一些助记符通常是指令功能的英文词的缩写来代替操作码。如8086/8088中,数的传送指令用助记符MOV(MOVE缩写)表示。 例:MOV DS,AX 机器码:8ED8。MOV BP,SP 机器码:8BEC。MOV AX,ES:BX 机器码:268B07,2019年2月24日星期日,16,指令系统及汇编语言程

8、序设计,这样,每条指令有明显的特征,易于理解和记忆,也不易出错,此即汇编语言阶段。 汇编语言书写的指令操作码用助记符代替,操作数也可用符号或符号地址(称为标号)来表示,它与机器指令是一一对应的。 本章均用汇编语言格式书写指令。,2019年2月24日星期日,17,指令系统及汇编语言程序设计,汇编语言指令的特点 源程序中要使用指令,指令是最小的代码单元。指令分为两种,一种叫硬指令,另一种叫伪指令。 硬指令是机器事实上存在的指令 例如: MOV AX,1234在源程序中写下这条指令,生成可执行文件 后,反汇编仍然存在这条指令。,2019年2月24日星期日,18,指令系统及汇编语言程序设计,伪指令是告

9、诉编译器的一些说明性语句, 编译器承认,而CPU中无此指令。例如: X1 DW 0 这是一条用伪指令DW定义字变量的语句,编译 器会将它在数据段中产生一个字的空间且初始 化为0。程序中并没有X1这个变量,其它指令操 作该变量都会被编译成从X1的地址读写数据。,2019年2月24日星期日,19,指令系统及汇编语言程序设计,四、指令的执行时间 一条指令的执行时间是取指令、取操作数、执行指令及传送结果各个阶段所需时间的总和。详细讨论各种指令的执行时间是个比较复杂的问题,在此,只讨论一些一般的概念。,2019年2月24日星期日,20,指令系统及汇编语言程序设计,指令的基本执行时间因指令的不同而异,相互

10、之间有很大的差异,而取、存操作数时间又因不同的寻址方式而有所不同。当需要访问存储器以取得操作数时,还需要考虑计算有效地址EA所需要的时间。,2019年2月24日星期日,21,指令系统及汇编语言程序设计,表1表3所列为执行不同指令所需的时间、执行加法指令时不同的寻址方式所需的时间,以及在不同的寻址方式下计算EA所需的时间。在这些表格中,所有的时间都是以时钟周期数表示的。,2019年2月24日星期日,22,指令系统及汇编语言程序设计,另外,从表1表3可以看出,不仅不同指令的执行时间差别很大,而且,当同一种指令使用不同寻址方式时,指令的执行时间差别也是很大的。 表4列出了8086/8088常用指令的

11、执行时间。,2019年2月24日星期日,23,指令系统及汇编语言程序设计,例:假设时钟频率为5MHz,则一个时钟周期为0.2us,求下列指令的执行时间。 寄存器寄存器方式,加法ADD指令。则ADD指令的执行时间:T=30.2=0.6us。,2019年2月24日星期日,24,指令系统及汇编语言程序设计,存储器寄存器方式,若存储器使用相对基址变址寻址方式,则:T=(9+EA)0.2=(9+12)0.2=4.2us。如果在此种寻址方式下,求得的存储器有效地址为奇数,则根据IBM PC的规定,需要多访问一次存储器,即要增加4个时钟周期数,则t=(9+12+4)0.2=5us,2019年2月24日星期日

12、,25,指令系统及汇编语言程序设计,寄存器存储器方式,此时,若存储器使用相对地址变址方式,则:t=(16+EA)0.2=(16+12)0.2=5.6us。如果此时求得的是奇地址,则需要时间为:t=(16+12+8)0.2=7.2us。,2019年2月24日星期日,26,指令系统及汇编语言程序设计,可见,即使是同一种ADD指令,不同的寻址方式也可以使它的执行时间相差一个数量级。因此合理选择指令和寻址方式是很重要的,进而可知,用以完成同样功能的不同程序,在占用空间和执行时间上可能有很大的差别。,2019年2月24日星期日,27,指令系统及汇编语言程序设计,因此,在编制汇编程序时,如果对程序所占的存

13、储空间或程序的执行时间要求不高,那么只需根据题意编制出合乎要求的程序就可以了(当然,如果能提高程序的空间效率和时间效率,则更为理想)。,2019年2月24日星期日,28,指令系统及汇编语言程序设计,若对程序所占有的存储空间或者对于执行的时间要求很高,那么应仔细斟酌程序算法、数据结构及指令与寻址方式的选用,以便编制出符合要求的程序。,2019年2月24日星期日,29,指令系统及汇编语言程序设计,2 8086/8088的寻址方式 一、几个概念的说明 1操作数的种类 数据操作数这类操作数是与数据有关的操作数, 即指令中操作的对象是数据,数据操作数 又可分为:,2019年2月24日星期日,30,指令系

14、统及汇编语言程序设计,立即数操作数指令中要操作的数据在指令中。 寄存器操作数指令中要操作的数据存放在指定的寄存器中。 存储器操作数指令中要操作的数据存放在指定的存储单元中。 I/O操作数指令中要操作的数据来自或送到I/O端口。,2019年2月24日星期日,31,指令系统及汇编语言程序设计,转移地址操作数 这类操作数是与转移地址有关的操作数,即指令中操作的对象不是数据,而是要转移的目标地址。 转移地址操作数也可分为:立即数操作数、寄存器操作数、存储器操作数。,2019年2月24日星期日,32,指令系统及汇编语言程序设计,2有效地址EA 当操作数是存放在存储器中时,存储器的存储单元的物理地址由两部

15、分组成,一部分是偏移地址,一部分是段地址。在8086/8088的各种寻址方式中,寻找存储单元所需的偏移地址可由各种成分组成,称为有效地址,用EA表示,不同的寻址方式,组成有效地址EA的各部分内容也不一样,详见后面的讨论说明。,2019年2月24日星期日,33,指令系统及汇编语言程序设计,3段超越 存储器操作数寻址时,存储单元的物理地址的另一部分是段地址,对段地址是如何规定的呢?8086/8088指令系统中对段地址有两个基本规定,即所谓的Default(默认)状态。,2019年2月24日星期日,34,指令系统及汇编语言程序设计,在正常情况下,由寻址方式中有效地址规定的基地址寄存器来确定段寄存器,

16、即只要寻址方式中出现BP寄存器作为基地址,段寄存器一定采用堆栈段SS段寄存器。其余的情况都采用DS段寄存器(注:串处理指令有另外规定)。,2019年2月24日星期日,35,指令系统及汇编语言程序设计,物理地址=DS16(10H)+偏移地址指令中的操作数也可以不在基本规定的段区域,但是必须在指令中指定段寄存器,这就是段超越。 例:MOV AL,2000H ;物理地址=DS16+2000HMOV AL,ES:2000H ;物理地址=ES16+2000H 段地址的基本规定和允许超越的情况如下表1所示:,2019年2月24日星期日,36,指令系统及汇编语言程序设计,二、与数据有关的寻址方式 8086/

17、8088指令中数据(操作数)有7种寻址方式。,说明操作数所在地址的寻址方式,立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 基址变址相对寻址,2019年2月24日星期日,37,与数据有关的寻址方式,1立即寻址方式 操作数直接存放在指令中,紧跟在操作码之后,它作为指令的操作码字段存放在指令代码中,这种数称为立即数。立即数可以是8位的或16位的,如果是16位立即数,则低位字节数存放在低地址单元中(紧跟在操作码之后),高位字节数存放在高地址单元中。指令码存放形式如图所示:,2019年2月24日星期日,38,与数据有关的寻址方式,例1:MOV AL,05H ;AL05H

18、,指令执行后,AL=05H,8位数据05H存入AL寄存器。 操作的示意图如图所示。,指令功能,执行过程,演示,2019年2月24日星期日,39,与数据有关的寻址方式,例2:MOV AX,0102H ;AX0102H,指令执行后,AX=0102H,16位数据存入AX寄存器,其中(AH)=01H,(AL)=02H。 操作示意图如图所示。,演示,2019年2月24日星期日,40,与数据有关的寻址方式,例3:MOV AX,COUNT ;AXCOUNT在汇编语言指令中,可以用符号COUNT代替常数,但是COUNT必须用伪指令EQU来赋值。,2019年2月24日星期日,41,与数据有关的寻址方式,立即数寻

19、址方式主要用来对寄存器赋值,由于在执行的过程中,立即数可以从指令队列中直接取得,CPU不必执行总线周期,指令执行速度快。 注:立即数只能是整数,只能作为源操作数。,2019年2月24日星期日,42,与数据有关的寻址方式,2寄存器寻址方式操作数在寄存器中,指令指定寄存器号。对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP和BP等;对于8位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH和DL等。这种寻址方式由于操作数在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。,2019年2月24日星期日,43,与数据有关的寻址方式,这种寻址方式寻找操作

20、数的示意图如下:,2019年2月24日星期日,44,与数据有关的寻址方式,例:MOV BX,AX ;BXAX若指令执行前,AX=3064H,BX=1234H则指令执行后,AX=124H,BX=1234H除上述两种寻址方式以外,以下介绍的各种寻址方式的操作数都是存放在代码段以外的存储器区段中。,指令功能,执行过程,演示,2019年2月24日星期日,45,与数据有关的寻址方式,3直接寻址方式(Direct addressing),在直接寻址方式中 ,有效地址 EA 就在指令代码中,它存放在代码段中指令操作码后面的操作数字段,指令码表示如图。,2019年2月24日星期日,46,与数据有关的寻址方式,

21、此寻址方式与立即寻址方式相比较,在指令代码中,直接寻址的操作数字段是偏移地址,立即寻址的操作数字段是立即数。 由于操作数在正常情况下是存放在数据段中,所以必须先求出操作数的物理地址,然后再按照此地址访问存储器才能取得或存入数据。,2019年2月24日星期日,47,与数据有关的寻址方式,操作数物理地址(PA)为: PA=DS10H+EA 其寻址方式示意图如图所示。,物理地址,2019年2月24日星期日,48,与数据有关的寻址方式,8086/8088允许数据存放在数据段以外的其它段中,此时在指令中应指定段超越的段寄存器名,在计算物理地址时应使用指定的段寄存器。,2019年2月24日星期日,49,与

22、数据有关的寻址方式,例1:MOV AX,1000H;将有效地址EA=1000H单元中的内容传送到AX寄存器。 如DS=2000H,从指令可知,EA=1000H。 存放源操作数的存储单元的物理地址为: PA=DS10H+EA=20000+1000=21000H。 假设指令执行前,AX=7850H, (21000H)=78H,(21001H)=56H。 指令执行后:AX=5678H, (21000H)=78H,(21001H)=56H。 指令执行情况如图所示。,指令功能,执行过程,演示,2019年2月24日星期日,50,与数据有关的寻址方式,在汇编语言中,可用符号地址代替数值地址,如: 例2:MO

23、V AX,VALUE 其中VALUE即为存放源操作数的符号地址(有效地址EA),需用伪地址定义,此指令也可写成:MOV AX,VALUE。源操作数的存储单元也可以存放在其它段中,但必须在指令中指定段超越前缀,如: MOV AX,ES:2000H MOV AX,SS:VALUE,2019年2月24日星期日,51,与数据有关的寻址方式,4寄存器间接寻址方式操作数的有效地址在基址寄存器BX,BP或变址寄存器SI,DI中,操作数则在存储器中,此种寻址方式示意图如图所示。,物理地址,2019年2月24日星期日,52,与数据有关的寻址方式,如果指令指定的寄存器是BX,SI和DI,则操作数必定在数据段中,以

24、DS段寄存器的内容作为段地址,操作数的物理地址为:PA=16DS+BX或 PA=16DS+SI或 PA=16DS+DI,2019年2月24日星期日,53,与数据有关的寻址方式,如指令中指定的寄存器是BP,则操作数必定在堆栈段中,以SS段寄存器的内容作为段地址,操作数的物理地址为:PA=16SS+BP,2019年2月24日星期日,54,与数据有关的寻址方式,例1:MOV AX,BX 若DS=2000H,BX=1000H, 则PA=20000+1000=21000H。 指令执行前:AX=8040H, (21000H)=A0H, (21001H)=50H 指令执行后:AX=50A0H, (21000

25、H)=A0H, (21001H)=50H 例1执行情况示意如图所示。,指令功能,执行过程,演示,2019年2月24日星期日,55,与数据有关的寻址方式,指令中也可以指定段超越前缀来使操作数存放在其它段中。如:例2:MOV AX,SS:BX这时 PA=16SS+BX这种寻址方式适用于表格处理,执行完一条指令后,只需修改寄存器内容,就可以取出表格中的下一项。,2019年2月24日星期日,56,与数据有关的寻址方式,5寄存器相对寻址(或称直接变址寻址)操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位偏移量(displacement)之和。,2019年2月24日星期日,57,与数

26、据有关的寻址方式,2019年2月24日星期日,58,与数据有关的寻址方式,对于BX,SI,DI寄存器,段寄存器用DS,对于BP寄存器,段寄存器用SS,其物理地址(PA)为:,2019年2月24日星期日,59,与数据有关的寻址方式,这种寻址方式示意如图所示。,物理地址,2019年2月24日星期日,60,与数据有关的寻址方式,例1: MOV AX,dispSI 或 MOV AX,SI+disp 其中disp为16位偏移量,它是符号地址。 实际上disp究竟是8位还是16位偏移量,可由伪指令来定义。,2019年2月24日星期日,61,与数据有关的寻址方式,如DS=3000H,SI=2000H,dis

27、p=3000H。 则EA=SI+disp=2000H+3000H=5000H 物理地址PA=16DS+EA=30000H+5000H=35000H 指令执行前:AX=7A6CH, (35000H)=34H,(35001H)=12H。 指令执行后:AX=1234H, (35000H)=34H,(35001H)=12H。,2019年2月24日星期日,62,与数据有关的寻址方式,例1执行情况示意如图所示。,指令功能,执行过程,演示,2019年2月24日星期日,63,与数据有关的寻址方式,同样,这种寻址方式也可采用段超越。如: 例2:MOV DL,ES:dispDI 则:EA=disp+DI,PA=1

28、6ES+disp+DI 这种寻址方式也适用于表格处理。,2019年2月24日星期日,64,与数据有关的寻址方式,6基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。两个寄存器均由指令指定。,2019年2月24日星期日,65,与数据有关的寻址方式,如基址寄存器为BX,段寄存器使用DS;基址寄存器为BP,段寄存器使用SS。 因此物理地址为: 物理地址=16DS+BX+SI ; 物理地址=16DS+BX+DI 物理地址=16SS+BP+SI ; 物理地址=16SS+BP+DI,2019年2月24日星期日,66,与数据有关的寻址方式,这种寻址方式如下图:,物理地址,2019年

29、2月24日星期日,67,与数据有关的寻址方式,例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。,2019年2月24日星期日,68,与数据有关的寻址方式,例1执行情况示意如图所示。,2019年2月24日星期日,69,与数据有关的寻址方式

30、,这种寻址方式使用段超越的格式为: 例2:MOV AX,ES:BXSI 此寻址方式适用与数组和表格处理。,指令功能,执行过程,演示,2019年2月24日星期日,70,与数据有关的寻址方式,7相对基址变址寻址操作数的有效地址是一个基址寄存器内容,一个变址寄存器的内容和8位或16位偏移量之和。当基址寄存器为BX,段寄存器用DS;当基址寄存器为BP,段寄存器用SS;,2019年2月24日星期日,71,与数据有关的寻址方式,其物理地址为:,2019年2月24日星期日,72,与数据有关的寻址方式,这种寻址方式的寻址示意如图所示。,2019年2月24日星期日,73,与数据有关的寻址方式,例1:MOV AX

31、,dispBXSI 或 MOV AX,dispBX+SI 或 MOV AX,disp+BX+SI 如DS=5000H,BX=1C7AH, SI=0135H,disp=0200H。 则物理地址为: 物理地址=50000H+1C7AH+0135H+0200H =51FAFH,2019年2月24日星期日,74,与数据有关的寻址方式,例1执行情况示意如图所示。,指令功能,执行过程,演示,2019年2月24日星期日,75,与数据有关的寻址方式,练习: 若:BX=0158H,DI=10A5H,偏移量(disp)=1B57H,DS=2100H,SS=1100H,BP=0100H,段寄存器按默认段寄存器,计算

32、相对于存储器寻址的各种寻址方式的有效地址和物理地址。,2019年2月24日星期日,76,与数据有关的寻址方式,直接寻址: 寄存器间接寻址(设寄存器为BX): 寄存器相对寻址(设寄存器为BP): 基址变址寻址(设寄存器为BX和DI): 基址变址相对寻址(设寄存器为BP和DI):,直接寻址: EA=1B57H ; PA=16DS+EA=21000H+1B57H=22B57H,寄存器间接寻址(设寄存器为BX): EA=0158H ; PA=16DS+EA=21000H+0158H=21158H,寄存器相对寻址(设寄存器为BP): EA=BP+disp=0100H+1B57H=1C57H PA=16S

33、S+EA=11000H+1C57H=12C57H,基址变址寻址(设寄存器为BX和DI): EA=BX+DI=0158H+10A5H=11FDH PA=16DS+EA=21000H+11FDH=221FDH,基址变址相对寻址(设寄存器为BP和DI): EA=BP+DI+disp=0100H+10A5H+1B57H=2CFCH PA=16SS+EA=11000H+2CFCH=13CFCH,2019年2月24日星期日,77,8086/8088指令系统,3 8086/8088指令系统8086/8088CPU指令系统分为6大类(传送指令、算术指令、逻辑运算和移位指令、串操作指令、程序控制指令、处理器控制

34、指令)。,2019年2月24日星期日,78,8086/8088指令系统,一、数据传送类指令 数据传送类指令是指令系统中用得最多的一类指令,也是条数最多的一类指令(14条),常用于将原始数据、中间运算结果、最终结果及其他信息在CPU的寄存器和存储器之间进行传送。根据功能的不同,数据传送类指令可分为:,2019年2月24日星期日,79,8086/8088指令系统,通用数据传送指令:MOV 交换指令:XCHG堆栈操作指令:PUSH ,POP地址传送操作指令:LEA,LDS,LES标志寄存器传送指令:LAHF,SAHF,PUSHF,POPF累加器专用传送指令:IN,OUT,XLAT,2019年2月24

35、日星期日,80,8086/8088指令系统,1通用数据传送指令 MOV 传送指令 格式:MOV DST,SRC 执行的操作:(DST) (SRC) 其中DST表示目的操作数,SRC表示源操作数。 功能:此指令把一个字节或一个字操作数从源传送到目的,源操作数内容未变,目的操作数内容和源操作数内容相同。 演示,2019年2月24日星期日,81,8086/8088指令系统,MOV指令有九种形式,如图所示。,2019年2月24日星期日,82,8086/8088指令系统,从累加器送到存储器 格式:MOV MEM,AC ;(mem) ac(ac表示AX,AH,AL) 从存储器送累加器 格式:MOV AX,

36、DISPBPSI;把地址SS10H+(BP)+(SI)+DISP存储单元的内容送AX,8086/8088指令系统,从存储器或寄存器送到段寄存器 格式:MOV segreg,mem/reg ;segreg (mem/reg) 其中segreg表示不包括CS的段寄存器(SS,DS,ES),本指令只能是字操作。,2019年2月24日星期日,84,8086/8088指令系统,从段寄存器到寄存器或存储器 格式:MOV mem/reg,segreg ;(mem/reg) segreg 规定同,但segreg包括CS,即CS,SS,DS,ES。,8086/8088指令系统,从寄存器到寄存器 格式:MOV r

37、eg1,reg2 ;reg1 reg2 注:两个寄存器之间传送时,只能相同字长的寄存器之间传送,不能在不同字长寄存器之间传送。,2019年2月24日星期日,86,8086/8088指令系统,从寄存器到存储器 格式:MOV mem,reg ;(mem) reg 此指令可以是字操作,也可以是字节操作。 从存储器到寄存器 格式:MOV reg,mem ; reg (mem)与传送方向相反,规定相同。,2019年2月24日星期日,87,8086/8088指令系统,立即数送寄存器 格式:MOV reg,data ;reg dataData是8位或16位立即数,ASCII字符。Data数据类型必须与寄存器

38、字长相一致。8位数可以送16位寄存器,但16位数不能送8位寄存器。,2019年2月24日星期日,88,8086/8088指令系统,立即数送存储器 格式:MOV mem,data ;(mem) data 规定同,但对mem存储操作数必须作数据类型说明。,数据类型,BYTE PTR 字节操作,WORD PTR 字操作,2019年2月24日星期日,89,8086/8088指令系统,注意点: MOV指令的目的操作数不允许用立即数方式,也不允许使用CS段寄存器,而且除源操作数为立即数的情况外,两个操作数中必须有一个是寄存器。不允许mem直接之间传送;也不允许在两个段寄存器之间直接传送。 MOV指令不影响

39、标志位。,8086/8088指令系统,在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令MOV AL, 050AH ;非法指令,修正:;mov ax,050ahMOV SI, DL ;非法指令,修正:;mov dh,0;mov si,dx,非法指令两个操作数类型不一致,8086/8088指令系统,当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明,非法指令无法确定是字节量还是字量操作,MOV BX+SI, 255;非法指令,修正:;mov byte ptr bx+si,255;byte ptr 说明是字节操作

40、;mov word ptr bx+si,255;word ptr 说明是字操作,8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数),非法指令两个操作数都是存储器,MOV buf2, buf1 ;非法指令,修正:;假设buf2和buf1是两个字变量;mov ax,buf1;mov buf2,ax;假设buf2和buf1是两个字节变量;mov al,buf1;mov buf2,al,8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活,非法指令段寄存器的操作有一些限制,MOV DS, ES ;非法指令,修正:;mov ax,es;mov ds

41、,axMOV DS, 100H ;非法指令,修正:;mov ax,100h;mov ds,axMOV CS, SI ;非法指令;指令存在,但不能执行,2019年2月24日星期日,94,8086/8088指令系统,例1:立即数送通用寄存器或存储器 MOV AL,55H MOV AX,55AAH MOV CX,0F943H MOV BYTE PTRBX, 12H ;DS:BX 12H MOV WORD PTRBX+SI,100H ; DS:BX+SI 100H,2019年2月24日星期日,95,8086/8088指令系统,用Debug来观察寄存器与内存数据的变化,过程如下所示。 Microsoft

42、 Windows XP Version 5.1.2600 (C) Copyright 1985-2001 Microsoft Corp. C:Documents and Settingsshsdebug -a100 0AF5:0100 mov ax,55 0AF5:0103 mov ax,55aa 0AF5:0106 mov cx,f943 0AF5:0109 mov byte ptrbx,12 0AF5:010C mov word ptrbx+si,100 0AF5:0110,2019年2月24日星期日,96,8086/8088指令系统,-t=0af5:100AX=0055 BX=0000

43、CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF5 ES=0AF5 SS=0AF5 CS=0AF5 IP=0103 NV UP EI PL NZ NA PO NC0AF5:0103 B8AA55 MOV AX,55AA,执行完第一条指令,AX=0055,2019年2月24日星期日,97,8086/8088指令系统,-tAX=55AA BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF5 ES=0AF5 SS=0AF5 CS=0AF5 IP=0106 NV UP EI

44、 PL NZ NA PO NC0AF5:0106 B943F9 MOV CX,F943,执行完第二条指令,AX=55AA,2019年2月24日星期日,98,8086/8088指令系统,-tAX=55AA BX=0000 CX=F943 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF5 ES=0AF5 SS=0AF5 CS=0AF5 IP=0109 NV UP EI PL NZ NA PO NC0AF5:0109 C60712 MOV BYTE PTR BX,12 DS:0000=CD,执行完第三条指令,CX=F943,2019年2月24日星期日,99

45、,8086/8088指令系统,-d ds:0000,000f0AF5:0000 CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 59 05 8A 03 . O.Y,查看当前的内存数据,00=CD,2019年2月24日星期日,100,8086/8088指令系统,-tAX=55AA BX=0000 CX=F943 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF5 ES=0AF5 SS=0AF5 CS=0AF5 IP=010C NV UP EI PL NZ NA PO NC0AF5:010C C7000001 MOV WORD PT

46、R BX+SI,0100 DS:0000=2012,执行完第四条指令,2019年2月24日星期日,101,8086/8088指令系统,-d ds:0000,000f0AF5:0000 12 20 FF 9F 00 9A EE FE-1D F0 4F 03 59 05 8A 03 . O.Y.,查看当前的内存数据,00=12,2019年2月24日星期日,102,8086/8088指令系统,-tAX=55AA BX=0000 CX=F943 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF5 ES=0AF5 SS=0AF5 CS=0AF5 IP=0110

47、NV UP EI PL NZ NA PO NC0AF5:0110 21725F AND BP+SI+5F,SI SS:005F=2020,执行完第五条指令,2019年2月24日星期日,103,8086/8088指令系统,-d ds:0000,000f0AF5:0000 00 01 FF 9F 00 9A EE FE-1D F0 4F 03 59 05 8A 03 O.Y.,查看当前的内存数据,0001=0001,DEBUG中标志位的符号表示,2019年2月24日星期日,104,8086/8088指令系统,2堆栈操作指令 PUSH ,POP 堆栈是在存储器(内存)中开辟出的一个存储区,位于堆栈段

48、中。 堆栈是以“后进先出”的方式进行数据操作。,2019年2月24日星期日,105,8086/8088指令系统,从8086/8088的堆栈组织形式来看,堆栈是从高地址向低地址方向生长的,堆栈只有一个出、入口,所以只有一个堆栈指针寄存器SP,它的内容在任何时候都指向当前的栈顶(在开始时,它指在堆栈的最低部,最高的地址),也就是最近入栈数据的所在存储单元,如图所示。,2019年2月24日星期日,106,8086/8088指令系统,2019年2月24日星期日,107,8086/8088指令系统,堆栈的操作有两种,入栈和出栈。 PUSH 入栈指令 格式:PUSH SRC 执行的操作:(SP-1)(SP

49、-2) (SRC);SP SP-2其中SRC是入栈的字操作数(只能是字操作数),除了不允许用立即数外,寄存器、段寄存器(全部)和存储器操作数都能入栈。,2019年2月24日星期日,108,8086/8088指令系统,执行的操作内容为: SRC=字数据(高位字节先入栈,低位字节后入栈),送入SP-1和SP-2的两个存储单元。 SP指针的内容随之减2,SP=SP-2 演示,2019年2月24日星期日,109,8086/8088指令系统,例1:将3125压入堆栈。 MOV AX,3125 PUSH AX 指令执行前:SP=2500H ,SS=5000H ,AX=3125H。则物理地址=52500H。 指令执行后:AX=3152H ,SP=24FEH。 例1执行情况示意图如图所示。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报