《汇编语言程序设计及上机指导第3章指令格式与寻址方式.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计及上机指导第3章指令格式与寻址方式.ppt(20页珍藏版)》请在三一办公上搜索。
1、第3章 指令格式与寻址方式,【本章提要】本章讲述Intel系列微处理器的指令通用格式和各种寻址方式。除无操作数指令以外,一般指令都需要指出操作数,指令中操作数的给出(即寻址方式)有多种方法。通过多种寻址方式,提高了程序设计的灵活性,也扩充了指令的具体功能。【学习目标】熟练掌握汇编语言指令和机器指令的基本格式明确操作数的各种寻址方式掌握各种寻址方式物理地址的计算,2023/11/3,3.1 指令格式,机器指令格式:汇编指令格式:指令助记符表示指令的名称,它是指令功能的英文缩写,对应的是机器指令中的操作码部分;操作数即被处理的对象,若指令中包含多个操作数,则操作数之间以逗号分隔;注释以分号开始,用
2、来说明程序功能,不影响指令的执行。最常用的数据传送指令MOV的格式为:MOV DEST,SRC;将源操作数SRC的值传送至目的操作数【例】MOV EAX,EBX;将EBX的值送给EAX,2023/11/3,指令的3种操作数,(1)立即数 操作数以常量的形式出现在指令中,称为立即数。如:20、3AH、1234Q、1011B 立即数只能作为指令的源操作数。(2)寄存器操作数 指令要使用的数据存放在CPU内部寄存器中,在指令中给出寄存器名。如:AL、BX、ECX(3)内存操作数 指令要用的数据存放在内存单元中,在指令中给出内存地址或访问存储器的方法。如:2000、BX注意:指令中的某个操作数可能是上
3、述3种中的任意一种形式,为了 明确具体操作数的存在位置,必须首先要明确操作数的寻址方式。,2023/11/3,立即数(常数),立即数只能作为源操作数,如 MOV AX,0FA00H;正确不能作为目的操作数,如 MOV 8000H,AX;错误,2023/11/3,3.2.2 有效地址的概念,在80X86系列CPU中,内存单元的地址由两部分组成:段基地址和段内偏移地址(也称段内偏移量)1)段基地址一般可由段寄存器直接给出,如CS、DS、SS、ES等,也可以通过段寄存器的内容进行计算得出。2)段内偏移量最多可以由四个基本部分,按照一定的规则计 算组合而成,所以也称为有效地址EA。有效地址四分量包括:
4、基址寄存器内容:变址寄存器内容:比例因子:在32/64位寻址方式中使用 位移量:一般是一个具体数值,基址、变址寄存器的值通常为某局部存储区的首地址(比如数组),2023/11/3,有效地址EA计算方法:,EA基址寄存器(变址寄存器比例因子)位移量有效地址四分量的使用规则:,如:ADD AX,20BXSI;EA=(BX)+(SI)+20 MOV EBX,EAX4*EDX+2AH;EA=(EAX)+(EDX)4+2AH,2023/11/3,16位寻址方式主要是针对于实地址存储模式的应用,兼容了Intel 8086的工作模式。存储器的最大分段不超过64KB,最大线性地址空间是1MB。32位寻址方式主
5、要是用于保护模式下,程序只能存取最低4GB地址空间,使用16位或32位地址。使用16位的分段选择子以及32位的段内偏移地址,每个段最大可达4GB。64位寻址方式采用64位线性地址空间,支持40位物理地址空间。通常不采用分段方式,而是将CS,DS,ES和SS的段基址看成0,这样线性地址等于有效地址,是一种平展存储管理模式。,不同方式下的寻址空间,2023/11/3,3.3 各种寻址方式,一、立即寻址操作数作为立即数直接包含在指令中,在指令执行时不需再访问存储器。立即数可以是8、16、32、64位。MOV BL,12H;字节传送MOV AX,1020H;字传送MOV EDX,12345678H;3
6、2位传送MOV RAX,;64位传送(四字),2023/11/3,二、寄存器寻址方式,寄存器寻址方式下,被访问的操作数存放在指令规定的寄存器中。INCCL;8位寄存器加1MOVDS,AX;16位寄存器传送MOVECX,EAX;32位寄存器传送MOV RBX,RAX;64位寄存器传送CPU执行指令时,不需要使用访问总线,所以指令的执行速度快。,2023/11/3,三存储器寻址方式,含义:操作数在存储区中,指令的操作数部分指出此操作数的有效地址EA。根据EA的生成方式的不同,可分为以下几种寻址分式:(1)直接寻址:是存储器直接寻址的简称,指令中的操作数部分直接给出操作数的有效地址EA,是16位或3
7、2位的位移量数据,它放在代码段中,操作数一般在数据段中,也可以进行段超越。MOV AX,2000H;将DS段中2000H和2001H单元内容;分别送AL和AHMOV AX,ES:2000H;将ES段中2000H和2001H单;元内容分别送AL和AH,2023/11/3,(2)寄存器间接寻址,操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中,即 EA寄存器1)16位寻址时,EA放在SI、DI、BP或BX中。若以SI、DI、BX间接寻址,则默认操作数在DS段中。MOV AX,SI;默认DS为段基址若以寄存器BP间接寻址,则默认操作数在堆栈段中。MOV AX,BP;默认SS为段基址如果操作
8、数不在上述规定的默认段,则必须在指令中相应的操作数前加上段超越前缀。MOV CX,DS:BP;DS:是段超越前缀,表示访问 数据段,而非堆栈段2)32位寻址时,8个32位通用寄存器均可作寄存器间接寻址。MOVCH,EAX MOVDX,EBX除EBP、ESP默认段寄存器为SS外,其余6个寄存器均默认段寄存器DS,可以采用段超越前缀对其它段进行寻址。CS和ES不能被超越,在堆栈操作时,SS也不能被超越。,2023/11/3,3)64位寻址时,16个32位/64位通用寄存器均可作寄存器间接寻址使用。MOV CL,R10;操作数是8位的,操作数地址由64位寄存器R10指出MOV RDX,EBX;操作数
9、是64位的,操作数地址由32位寄存器EBX,指 出经零扩展后形成64位有效地址MOV AX,BX 的执行过程:假设BX寄存器的内容为1000H,则把DS段中的1000H号单元的16位数据传送给AX寄存器,该指令的机器码为8B07H。,注意:直接寻址中有效地址EA来自指令自身,相当于一个常量;而寄存器间接寻址中有效地址EA来自寄存器,该内容由前面的指 令确定,相当于一个变量。,2023/11/3,(3)寄存器相对寻址,EA基址/变址寄存器位移量其中位移量由指令直接给出,是指令的一部分。基址寄存器的使用规则:1)16位寻址时,BP和BX作为基址寄存器,默认情况下,BX以DS作为段寄存器,BP以SS
10、作为段寄存器;SI(源变址)和DI(目的变址)作为变址寄存器,默认DS作为段基址寄存器。位移量是8位或16位。2)32位寻址时,8个32位通用寄存器都能作为基址或变址寄存器。其中ESP、EBP默认段寄存器为SS,其余6个寄存器均默认段寄存器为DS,段可以超越;除ESP外的任何32位通用寄存器均可作变址寄存器。且EBP以SS为默认段寄存器,其余以DS为默认段寄存器。位移量是8位或32位,当位移量超过8位则按照32位处理。,2023/11/3,3)64位寻址时,16个32位/64位通用寄存器都能作为基址寄存器。当使用32位通用寄存器时,先将32位通用寄存器内容零扩展为64位,再与经过符号扩展为64
11、位的位移量相加形成64位有效地址。只有MOV指令允许使用64位的位移量,而其他指令只能使用不超过32位的位移量。MOV RAX,R155;有效地址为R15寄存器内容加5 的和MOV RCX,EDX0F0H;有效地址为EDX寄存器内容零扩展为64位后,再与位移量0F0H符号扩展成64位(0FFFFFFFFFFFFFFF0H)相加的和,2023/11/3,MOV AX,BX24;也可写成 MOV AX,24BX MOV ECX,EBP50;也可写成 MOV ECX,50EBPMOV DX,EAXBASE;也可写成 MOV DX,BASEEAX BASE是符号常量或变量 MOV ECX,EBP+50
12、指令执行时,EBP寄存器内容为3000H,再加上位移量50H之和为3050H,然后把由SS寄存器寻址的段中的3050H单元的32位数据传送给ECX。,2023/11/3,(4)基址加变址寻址,EA 基址寄存器+变址寄存器MOV AX,BX+SI;或写成MOV AX,BXSI,BX决定默认段基址由DS指出MOV EAX,EDXEBP;由EBP决定默认SS为段基址寄存器MOV R12,EAX+EDX;用于64位方式,有效地址为EAX+EDX的和再扩展为64位MOV RBX,R10+RBP;有效地址为R10+RBP的64位和。,2023/11/3,(5)带位移的基址加变址寻址,EA基址寄存器变址寄存
13、器位移量MOV AX,BX+SI+SOME;16位寻址MOV EAX,EBX+EBP+2;32位寻址MOV R8,R9+R10+4;64位寻址,(6)比例变址寻址 EA变址寄存器比例因子位移量 乘比例因子的操作是在CPU内部靠硬件完成的。MOV EAX,ARRAYESI4;32位寻址 MOV RAX,RBX8+10H;64位寻址,2023/11/3,(7)基址加比例变址寻址,EA基址寄存器变址寄存器比例因子只适于32/64位寻址的情况【例】MOV EDX,EAX8EBX 或MOV EDX,EAX4EBX MOV EAX,EBX4ESI 或MOVEAX,EBX4ESI MOV RBX,RAX4+RCX;64位方式,(8)带位移的基址加比例变址寻址EA基址寄存器变址寄存器比例因子位移量【例】MOV AX,EBX8+ECX+100;或 MOV AX,EBX8ECX100-只能是32位或64位寻址,2023/11/3,四端口寻址方式,端口寻址方式只在对外部设备的访问指令中适用,包括端口的直接寻址和间接寻址两种方式,具体细节在节的I/O数据传送类指令的叙述中,结合具体指令详细介绍。,2023/11/3,段寄存器的使用规则,