汇编语言程序设计及上机指导 第3章 指令格式与寻址方式_第1页
汇编语言程序设计及上机指导 第3章 指令格式与寻址方式_第2页
汇编语言程序设计及上机指导 第3章 指令格式与寻址方式_第3页
汇编语言程序设计及上机指导 第3章 指令格式与寻址方式_第4页
汇编语言程序设计及上机指导 第3章 指令格式与寻址方式_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

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

温馨提示

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

评论

0/150

提交评论