收藏 分享(赏)

汇编与组成第4章3.ppt

上传人:hwpkd79526 文档编号:8270367 上传时间:2019-06-17 格式:PPT 页数:25 大小:308.50KB
下载 相关 举报
汇编与组成第4章3.ppt_第1页
第1页 / 共25页
汇编与组成第4章3.ppt_第2页
第2页 / 共25页
汇编与组成第4章3.ppt_第3页
第3页 / 共25页
汇编与组成第4章3.ppt_第4页
第4页 / 共25页
汇编与组成第4章3.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、4.3 80x86 CPU的指令系统,80x86 CPU的指令集是在8086/8088 CPU的指令系统上发展起来的。8086/8088 指令系统是基本指令集,80286、80386、80486和Pentium指令系统是在基本指令集上进行了扩充。扩充指令的一部分是增强的8086/8088基本指令和一些专用指令;另一部分是系统控制指令,即特权指令,它们对80286、80386、80486和Pentium保护模式的多任务、存储器管理和保护机制提供了控制能力。,80x86 CPU采用了变字长的机器指令格式,由115个字节组成一条指令。一般格式如下图所示:,本节先介绍80x86的寻址方式,然后着重介绍

2、用于运行应用程序的80x86指令。,4.3.1 80x86寻址方式指令中的寻址方式是用来确定操作数地址以找到指令所需的操作数。在80x86 CPU中,8086和80286的字长是16位,一般情况下只处理8位和16位操作数,只是在乘、除指令中才会有32位操作数;80386及其后继机型的字长为32位,因此它除可处理8位和16位操作数外,还可处理32位操作数,在乘、除法情况下可产生64位操作数。本节下面所述例子中,如处理的是32位操作3数,则适用于80386及其后继机型。,1立即寻址方式和寄存器寻址方式 (1)立即寻址方式(Immediate Addressing)立即数寻址是指指令所需的操作数直接

3、在指令代码中,随着取指令一起取到CPU中。这种操作数称为立即数。立即数可以是8位或16位的。对于80386及其后继机型则可以是8位或32位的。这种寻址方式如下图所示:,【例4-1】 下述汇编指令的源操作数都采用立即寻址方式。MOV AL,5 ;将8位立即数05H送入AL中MOV AX,0B064HMOV BX,“ AB “MOV EAX,12345678H,立即数用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。在汇编指令中,立即数若是数值常数可直接书写,若是字符常数则应加上引号。,在汇编指令中,立即数若是以AF开始

4、的十六进制数,则必须在数前面加上0,如上述第二条指令,否则汇编程序会将立即数当作符号处理。,寄存器寻址是指指令所需的操作数存放在CPU的寄存器(通用寄存器或段寄存器)中,通过指令中的寄存器地址去找到操作数。,(2)寄存器寻址方式(Register Addressing),在汇编指令中,寄存器地址直接用寄存器名表示,如用AX、BX、AL、BH、EAX、EBX、DS、ES等,这些寄存器可以是8位的、16位的或32位的。这种寻址方式如下图所示:,【例4-3】 MOV BL,AL;将AL中的内容送到BL中MOV DS,AXMOV ECX,EDX,【例4-2】 指令“MOV AX,BX”的源和目的操作数

5、都采用寄存器寻址方式,该指令完成将BX中的内容送到AX中。如指令执行前(AX) 3064H,(BX) 1234H;则指令执行后,(AX) 1234H,(BX)保持不变。,2存储器寻址方式,操作数地址(物理地址)是根据段基值(或段选择器)和偏移地址通过一定的方法得到。段基址在实模式和保护模式下可从不同的途径取得。偏移地址是指存放操作数的存储单元与段起始地址(段基址)之间的字节距离。在80x86里,把按寻址方式计算出来的操作数偏移地址称为有效地址EA(Effective Address)。,在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示,其形式为:段基值(或选段择器):偏移地址,存储器操作

6、数的寻址方式不同,则形成有效地址EA的方法就不同。有效地址EA可以由4个地址分量的某种组合求得,它们分别是: 位移量 它是指令代码中的一个8位、16位或32位二进制数,但它不是立即数,而是一个地址量。在源程序中,位移量通常以符号地址(变量名或标号)的形式出现,也可以是常数,经汇编后,这些符号地址的偏移地址或常数就转换为指令代码中的位移量。 基地址 即基址寄存器或基址指针的内容。 变址量 即变址寄存器的内容。 比例因子(Scale Factor) 它是80386及其后继机型新增加的寻址方式中的一个术语,其值可为1,2,4或8。在含比例因子的寻址方式中,可用变址寄存器的内容乘以比例因子来取得变址值

7、。,16/32位寻址时有效地址4种分量的组成,8086/80286只能使用16位寻址,而80386及其后继机型则既可用32位寻址,也可用16位寻址。在这两种情况下,对以上4个地址分量的组成有不同的规定,如下表所示:,对不同的存储器寻址方式,构成其有效地址EA的地址分量是不同的,但这些寻址方式的有效地址的计算都可以用下式表示:,EA= 基地址 +(变址量 比例因子)+位移量,下面具体讨论6种存储器寻址方式。,(1)直接寻址方式(Direct Addressing)直接寻址是指指令所需的操作数存放在存储单元中,操作数的有效地址EA直接由指令代码中的位移量提供,即EA只包含位移量这一种地址分量。此时

8、,位移量的值就是操作数的有效地址,如下图所示:,上式中的每一个地址分量均可空缺,但比例因子只能与变址寄存器同时使用。, 用数值地址表示EA在采用直接寻址方式的汇编指令中,如用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能省略。例如,传送指令源操作数的有效地址用数值地址表示:,MOV BX,DS: 1000H ,这条指令完成将当前数据段偏移1000H个字节的字单元内容1234H送入BX中,如上图所示,其中源操作数的有效地址EA是1000H。“MOD R/M”是指令代码中的寻址字段。, 用符号地址表示EA 在源程序中,常用符号地址表示存放操作数的存储单元,因此在汇编指令中,可用符

9、号地址表示的直接寻址方式来存取操作数。,操作数如果存放在数据段中,则指令中不必给出数据段寄存器名(即默认使用DS);如果操作数不是存放在数据段中,则必须给出段寄存器名。例如:,MOV BX,VAR ;将VAR指向的字单元内容送到BX中 MOV DA_BYTE,0FH ;将立即数0FH置入DA_BYTE指向的字节单元 MOV CL,DA+3 ;把由DA地址偏移3个字节的字节单元内容送到CL中,上述3条指令分别等价于:,MOV BX,DS:VARMOV DS:DA_BYTE,0FHMOV CL,DS:DA+3,(2)寄存器间接寻址方式(Register Indirect Addressing)寄存

10、器间接寻址是指指令所需的操作数在存储单元中,操作数的有效地址EA直接从基址寄存器或变址寄存器中获得,即EA是包含基址寄存器内容(或变址寄存器内容)的一个地址分量。这种寻址方式如下图所示:,这种寻址方式实际上是将有效地址事先存放在一个寄存器中,因此这个寄存器就如同一个地址指针。,由于用寄存器作为地址指针,因此在程序中只要修改间址寄存器的内容,就可以用同一条指令访问不同的存储单元。这种寻址方式的使用格式如下:MOV CH,SIMOV DI,BXMOV AL,BXMOV CX,BP上述指令分别等价于:MOV CH,DS:SIMOV DS:DI,BXMOV AL,DS:BXMOV CX,SS:BP,寄

11、存器寻址方式在16位寻址时可用的寄存器是BX、BP、SI和DI;在32位寻址时可用EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI等8个通用寄存器。凡使用BP、ESP和EBP时,其默认段为SS段。其他寄存器的默认段为DS寄存器。,(3)寄存器相对寻址方式(Register Relative Addressing)(也称变址寻址方式或基址寻址方式)指令所需的操作数在存储单元中,操作数的有效地址EA是两个地址分量之和:基址寄存器(或变址寄存器)的内容与指令中指定的位移量之和。这种寻址方式如下图所示 :,这种寻址方式若使用的是变址寄存器称为变址寻址方式;若使用的是基址寄存器称为基址寻址

12、方式。它所允许使用的寄存器及与其对应的默认段情况与寄存器间接寻址方式中所说明的相同。,在汇编指令中,位移量部分可用数值表示,也可用符号地址表示(此时用符号地址的偏移地址作为位移量),其寻址方式的使用格式如下:MOV AX,10HSI;位移量为8位常数,EA=10H+(SI),默认段寄存器DSMOV TAB1BP,CL;位移量为符号地址TAB1的16位偏移地址,默认段寄存器是SS,寄存器相对寻址方式常用来访问顺序存放在主存中的一维数组、表、字符串等。其典型用法是将指令中不能修改的位移量作为基准地址,而将变址或基址寄存器内容作为修改量。例如数组的起始单元位置是固定的,因此由指令中的位移量给出;而被

13、访问的数组元素相对其起始单元的距离由变址或基址寄存器提供,通过修改寄存器的内容就可以访问数组中不同的元素。,【例4-4】 如右图所示,一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且都占2个字节单元。从数组的首址起依次存放各数组元素ARY(0)、ARY(1)、ARY(2)、ARY(i)、。传送指令:MOV AX,ARYSI可用来访问数组中的元素,指令中的符号地址ARY指向该数组的首址;变址寄存器SI的内容表示所访问元素与数组首址之间的字节距离,则所访问元素的有 效地址:EA= ARY的偏移地址+( SI)当SI内容为0时,将访问ARY(0)元素;SI内容为1*2时访问ARY(1)元

14、素;SI内容为 i*2时访问ARY(i),即通过修改SI的内容可以访问数组中任何一个元素。右图给出了访问数组元素ARY(2)的寻址过程。,用寄存器相对寻址方式访问一维数组,(4)基址变址寻址方式(Based Indexed Addressing)指令所需的操作数在主存单元中,操作数的有效地址EA是三个地址分量之和:基址寄存器内容、变址寄存器内容与指令中的位移量(0位、8位、16位或32位)之和,称为基址变址寻址方式,如下图所示:,基址变址寻址方式的位移量可用数值或符号地址表示,其使用格式如下:MOV AX,200HBXSI;位移量为16位常数,EA=200H+(BX)+(SI),默认段寄存器为

15、DSMOV AX,ARRAYBPSI;位移量为符号地址ARRAY的16位偏移地址,默认段寄存器为SSMOV BPDI,DL;位移量为0,EA=(BP)+(DI),默认段寄存器为SS由于基址变址寻址方式中有两个地址分量可以在程序执行过程中进行修改,因此常用来访问存放在主存中的二维数组。,【例4-8】 如右图所示,ARRAY数组是10行、10列的二维数组,按行存放在主存堆栈段中。从数组的首址ARRAY起依次存放各数组元素:第0行元素为ARRAY(0,0)ARRAY(0,9)共10个,第1行元素为ARRAY(1,0)ARRAY(1,9),。每个元素占用一个字节单元。可以用指令: MOV AL,ARR

16、AYBPSI,访问数组中的某个元素ARRAY(i,j),指令中的位移量ARRAY指向数组首址;BP存放被访问行的起始位置相对数组首址的距离,即i *10;SI存放被访问数组元素相对本行首址的距离,即j,则要访问元素的有效地址:,EA ARRAY的偏移地址 +( BP)+( SI),段基值隐含由SS给出。,右上图给出了访问数组第1行第8列元素ARRAY(1,8)的寻址过程 。,(5)比例变址寻址方式(Scaled Indexed Addressing)指令所需的操作数在主存单元中,操作数的有效地址EA是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以EA由3种成分组成。这种寻址方式

17、如下图所示:,这种寻址方式与相对寄存器寻址相比,增加了比例因子,其优点在于:对于元素大小为2,4,8字节的数组,可以在变址寄存器中给出数组元素下标,而由寻址方式控制直接用比例因子把下标转换为变址值。,【例4-5】 MOV EAX,COUNTESI * 4;如要求把双字数组COUNT中的元素3送到EAX中,用这种寻址方式可直接在ESI中放入3,选择比例因子4(数组元素为4字节长)就可以方便地达到目的,如下图所示,而不必像在相对寄存器寻址方式中那样,要把变址值直接装入寄存器中。,(6)基址比例变址寻址方式(Based Scaled Indexed Addressing)指令所需的操作数在主存单元中

18、,操作数的有效地址是变址寄存器的内容乘以比例因子,加上基址寄存器的内容,再加上位移量(0位、8位或32位)之和,所以有效地址EA由4种成分组成。这种寻址方式如下图所示。,这种寻址方式比基址变址方式增加了比例因子,便于对元素为2,4,8字节的二维数组进行处理。,【例4-10】 MOV EAX,TABLEEBPEDI*4,3串操作寻址方式(String Addressing)80x86提供专门的串操作指令,这些指令所用的操作数也在存储器中,但它们不能使用上述寻址方式,而是隐含使用变址寄存器SI、ESI、DI或EDI,如下图所示。串操作指令规定,隐含使用SI或ESI作为在数据段中的源串(即源操作数)的地址指针;隐含使用DI或EDI作为在附加段中的目的串的地址指针。在完成一次串操作后,指令自动修改SI或ESI、DI或EDI两个地址指针,使SI或ESI、DI或EDI指向下一个串元素的存储单元。,

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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