




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言-操作数寻址方式ASM 2009-07-13 19:37:23 阅读16评论0 字号:大中小 订阅操作数是指令或程序的主要处理对象.汇编语言指令的操作数的个数可以是0、1、2;即:汇编指令可以没有操作数,可以只有一个操作数,也可以有两个操作数;在CPU的指令系统中,除了 NOP空操作指令)、HLT(停机指令)等少数指令之外,大量的指令在执行的过程中都会涉及 到操作数;所以,在指令中如何表达操作数或操作数所在位置是正确运用汇编指令的重要因素之一;在指令中,指定操作数或操作数存放位置的方法称为寻址方式;操作数的各种寻址方式是使用汇编语言进行程序设计的基础;一、16位地址的寻址方式CPU中有
2、7中基本的寻址方式:立即数寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变 址寻址方式、相对基址加变址寻址方式;其中,直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式,这5种寻址方式是确定存储单元有效地址的5种不同的计算方法,用它们可以方便地实现对数组元素的访问;由于总线接口单元BIU能根据需要自动引用段寄存器得到段值,所以这5种方式也就是确定存放操作数的存储单元的有效地址的方法;有效地址EA就是段内偏移地址,是一个16位的无符号整数,在利用者5种方法计算有效地址时,所得到的结果也被认为是一个16位的无符号
3、整数;除了这些基本的寻址方式外,还有固定寻址和10端口寻址,等等;另外,在32位CPU中 ,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式-32位地址的寻址方式;1、立即数寻址方式:操作数作为指令的一个组成部分而直接写在指令中,这种操作数称为立即数,这种寻址方式称为立即数寻址方式;立即数,可以理解为常数;如:123、"abc"、false、true,等等;这种数跟在操作码后面,与指令一起存放在代码段中;立即数可以是8位、16位.如果立即数是16位的,那么将按照"高高低低”的顺序原则存放,即:高字节存放在高地址存储单元中,低字节存放在低地址存储单元中;例如:M
4、OV AH,08H ADD AX,1234H MOV ECX,123456HMOV B1,12H MOV W1,3456H ADD D1,32123456H其中,B1、W1 D1分别是字节、字、双字存储单元;指令中,逗号前面的操作数称为第一操作数,逗号后面的字面数值称为是第二操作数,在这里,这些第二操作数就是立即数(常数).在汇编语言中,规定:立即数不能作为指令中的第一操作数.该规定与高级语言中"赋值语句的左边不能是常量”的规定一致;立即数常用于对寄存器或存储单元赋初值;立即数寻址方式的图示:AX76MOV AX, 4576H指令的存储形式2、寄存器寻址方式;这种在指令中指出指令所需
5、要的操作数已经存储在寄存器中,或者把目标操作数存入寄存器中,而在指令中仅仅指岀所使用的寄存器既可所使用寄存器的寻址方式称为寄存器寻址方式;指令中可以引用的寄存器机器符号名称如下:8 位寄存器:AH、AL、BH BL、CH CL、DH DL,等等;16 位寄存器:AX、BX CX DX SI、DI、BP、SP、CS DS ES SS FS、GS等等;32 位寄存器:EAX、EBX ECX EDX ESI、EDI、EBP ESP等等;寄存器寻址方式是一种简单快捷的寻址方式,源操作数和目的操作数都可以是寄存器A. 源操作数是寄存器的寻址方式,如:ADD VARD,EAX ADD VARW,AX AD
6、D VARB,BH其中,VARD VARW VARB分别是双字变量、字变量、字节变量B. 目的操作数是寄存器的寻址方式,如:ADD BH,78H ADD AX,1234H MOV EBX,12345678HC. 源操作数和目的操作数都是寄存器的寻址方式,如:MOV EAX,EBX MOV AX,BX MOV DH,BL由于指令所需要的操作数都已经存储在寄存器中,或者操作的结果都被存入到寄存器中,这样,在指令执行过程中,就不会再去读写存储器单元,会减少读写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度.3、直接寻址方式:操作数存放在存储单元中,该存储单元的有效地址作为指令的一
7、个组成部分;这种寻址方式称为直接寻址方式;即:指令所需要的数据存放在一个存储器单元中,而指令中直接包含该存储器单元的有效地址EA(也就是该操作数的有效地址);通常情况下,操作数一般存放在数据段中,所以,操作数的物理地址将由数据段寄存器DS的值加上指令中给出的16位有效地址EA得出,但是,如果使用段超越前缀,那么,操作数则可以存放在其他段中;由于数据段的段寄存器默认为DS,所以,如果要指定访问其它段内的数据,则可在指令中使用段超越前缀的方式显示地书写岀来;下面指令的目的操作数就是带段超越前缀的直接寻址方式:MOVES:1000H,AX ;"ES:" 就是段超越前缀的标识,表示
8、访问的是附加段寄存器中的存储器单元;直接寻址方式常用于处理存储器单元的数据,其操作数是内存变量,该寻址方式可在64K字节的段内进行寻址;直接寻址方式的操作数通常是程序使用的变量;注意:直接寻址方式与立即数寻址方式的书写格式不同,直接寻址的有效地址要写在方括号 ""中,而立即数寻址方式则直接写岀立即数;在程序中,直接地址通常用内存变量名来表示;例如,指令"MOV BX,VARW中的VARV就是内存变量名,它表示一个直接地址;比较一下指令汇总原操作数的寻址方式(VARW是内存变量):MOV AX,1234H MOV AX,1234H;前者是立即数寻址,后者是直接寻址;
9、MOV AX,VARW MOV AX,VARW;两者等效,均为直接寻址;内存变量名就表示直接地址 ;直接寻址方式的图示:DS: 2000H + 1234H21234H20000H21234H4、寄存器间接寻址方式:操作数在存储器单元中,操作数的有效地址 EA存放在SI、DI、BX BP这四个寄存器中的一个寄存器中;称这种寻址方式为寄存器间接寻址 方式;一般情况下(即:不使用段超越前缀明确指定段寄存器时),如果操作数的有效地址EA存放在SI、DI、BX中,则以数据段寄存器 DS的值作为操作数的段地址;如果操作数的有效地址 EA存放在BP中,则以堆栈段SS的值为段地址;寄存器间接寻址方式下,操作数
10、的物理地址的计算方法如下:PA = (DS/SS/ES) X 16 + (SI/DI/BX/BP);寄存器间接寻址方式存取存储器单元的PA的计算方法如图所示:PAs s s S b s E C LrLrLrL十1 I X P s D B B寄存器间接寻址的物理地址PA的计算方法寄存器间接寻址方式存取存储器单元的原理如图所示寄存器间接寻址方式存取存储器单元的样例如图所示注意:寄存器间接寻址方式下书写指令时,寄存器名一定要写在方括号""中;下面两条指令的目的操作数的寻址方式完全不同:MOV SI,AX ;目的操作数为寄存器间接寻址MOV SI,AX ;目的操作数为寄存器寻址例如
11、:下面指令中的源操作数采用的就是寄存器间接寻址方式,并且使用段超越前缀:MOV DL,CS:BX;引用的是代码段寄存器 CS下面指令中的目的操作数采用的就是寄存器间接寻址方式,由于使用的是指针寄存器BP,所以,缺省的段寄存器就是堆栈段寄存器SS:MOV BP,CX ;引用的段寄存器是堆栈段寄存器SS5、寄存器相对寻址方式:操作数存放在存储器单元中,操作数所在的存储器单元的有效地址是一个基址寄存器(BX/BP)或变址寄存器(SI/DI)的值与指令中的8位/16位偏移量之和;其有效地址的计算公式如下:EA = (BX/BP/SI/DI) + (8位/16 位偏移量);物理地址PA的计算公式如下:P
12、A = 段地址X 16 + EA;一般情况下(不使用段超越前缀明确指定段寄存器),如果SI/DI/BX的值是有效地址EA的一个组成部分,则引用的段寄存器就是数据段寄存器DS;如果BP的值作为有效地址EA的一个组成部分,则引用的段寄存器就是堆栈段寄存器SS;指令中的8位/16位的偏移量采用补码的形式表示,因为这个8位/16位的偏移量可以是正数也可以是负数;在计算有效地址 EA时,如果位移量是8位的,则被带符号扩展成16位.如果所得的有效地址超过 FFFFH,则取其64K的模;例如:MOV AX,DI+1223H ;DI是变址寄存器,1234H就是那个8位/16位的偏移量寄存器相对寻址方式存取存储
13、器单元的EA和PA的计算方法如图所示:EA =SIDI BXBP18位16位偏移量或位移JitPA =段地 JlkX 16 + EA寄存器相对寻址的E A和PA的11-算方法寄存器相对寻址方式存取存储器单元的样例如图所示SI: 2345H TOOHEA: 2445HBXDS:1000H12445H |10000Hl12445H例如:下面指令中的源操作数采用的就是寄存器相对寻址方式,8位/16位偏移量是4,引用的是堆栈段寄存器MOV BX,BP+4下面指令中的目的操作数采用的是寄存器相对寻址方式,引用的附加段寄存器 ES:SS:MOV ES:BX+5,AL这种方式可以很方便地实现类似于高级语言中
14、对结构或记录等数据类型的方访问;注意:书写寄存器相对寻址的指令时,基址或变址寄存器名一定要写在方括号""中,而8位/16位偏移量可不用写在方括号中;比如下面的两条指令就是等效的指令:MOV AX,SI+4MOV AX,4SI6、基址加变址寻址方式:操作数在存储器单元中,操作数所在的存储器单元的有效地址EA是一个基址寄存器(BX/BP)与一个变址寄存器(SI/DI)的的值的和;即:有效地址 EA = (BX/BP) + (SI/DI)在一般情况下(不使用段超越前缀明确指定段寄存器),如果BP的值是有效地址EA的一个组成部分,则引用的段寄存器就是堆栈段寄存器S!如果SI/DI/
15、BX的值是有效地址EA的一个组成部分,则引用的段寄存器就是数据段寄存器DS;如果所得有效地址EA的值超过FFFFH,则取其64K 的模;例如:MOV AX,BX+DI基址加变址寻址方式存取存储器单元的EA和PA的计算方法如图所示:EA =BXBPPA段地 JlLx 16 + EA地址加变址寻址的EA和PA的IY算方法基址加变址寻址方式存取存储器单元的样例如图所示BXfBX: 2100H +SLOO11HEA: 2111H +DS: 1000H1DOOOH12111H34H12H例如:下面指令的源操作数采用基址加变址寻址方式,并通过段超越前缀明确指定引用段寄存器ES:MOV AX,ES:BX+S
16、I下面指令中的目的操作数采用基址加变址寻址方式,通过段超越前缀明确指定引用段寄存器DS:MOV DS:BP+SI,AL基址加变址寻址方式适用于处理数组或表格.用基址寄存器BX/BP存储数组的首地址,而用变址寄存器SI/DI定位数组中的各个元素;反之也可以;由于两个寄存器都可以独立地改变,所以,能更加灵活地访问数组或表格中的元素;下面两条指令等效:MOV AX,BX+DIMOV AX,BXDI7、相对基址加变址寻址方式:操作数在存储器单元中,操作数所在的存储器单元的有效地址EA是一个基址寄存器(BX/BP)的值、一个变址寄存器(SI/DI)的值与指令中给出的8位/16位偏移量的和;即:EA =
17、(BX/BP) + (SI/DI) + (8位/16 位)偏移量相对基址加变址寻址方式存取存储器单元的EA和PA的计算方法如图所示:EA =:器+ J7十器乍偏移吊或位移届PA二段地址X 16 + EA一丽©Il衍i址寻址的EA和PA何乔算方法相对基址加变址寻址方式存取存储器单元的样例如图所示AX12 34BX:2100HSI: 0010H + 0200HEA;2310H DS: 1000H 12310H1QOOOH12310H34HI数据段12H一般情况下(不使用段超越前缀明确指明段寄存器),如果BP的值是有效地址的一个组成部分,则缺省引用的段寄存器就是堆栈段寄存器S如果SI/DI
18、/BX的值是有效地址的一个组成部分,则缺省引用的段寄存器就是数据段寄存器DS;指令中给出的8位/16位偏移量采用补码形式表示.在计算有效地址时,如果偏移量是8位的,那么被带符号扩展成16位;当所得的有效地址超过FFFFH时,就取其64K的模;如:MOV AX,BX+DI-2从相对基址加变址寻址方式来看,相对基址加变址寻址是最复杂的,但也是最灵活的,它的可变因素比较多;由于相对基址加变址方式的多样性,所以下面几条指令的效果是等价的:MOV AX,BX+DI+1234HMOV AX,11234HBX+DIMOV AX,1234HBXDIMOV AX,1234HDIBX二、32位地址的寻址方式32位
19、CPU中,除了支持16位CPU中的7种寻址方式之外,又提供了一种更灵活、更方便,但也更复杂的寻址方式,从而使内存地址的寻址范围得到了进一步扩大;使用16位寄存器访问存储器单元时,只能使用基址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的组成部分,但是使用32位 寄存器访问存储器单元的时候,不存在这种限制,所有32位寄存器(EAX、EBX ECX EDX ESI、EDI、EBP ESP)都可以作为地址偏移量的 组成部分;当使用32位地址偏移量进行寻址时,内存地址的偏移量可由三个部分组成:一个32位基址寄存器、一个可乘以 1、2、4、8的32位变址寄存器、一个8位/32位的偏移量
20、,并且这三个部分可以任意组合,可省去其中的一个或两个部分;32 位基址寄存器有:EAX、EBX ECX EDX ESI、EDI、EBR ESP;32 位变址寄存器有:EAX、EBX ECX EDX ESI、EDI、EBP(除 ESP之夕卜);32位地址偏移量寻址时的有效地址EA和物理地址PA的计算方法如图所示:LEAXJEBXECXEDXESIEDIEBPESP无“基址 寄存 器EAX EBX ECX- EDX EST'EDI EBP 无变址 寄存 器j比例因了4-8位 32位 无X-偏移殆hi:偏移量移量PA =段地址EA32位地址寻址方式的PA和EA计算方法例子:MOV EAX,123456H MOV EAX,EBXMOV EBX,ECX*2MOV EBX,EAX+100HMOV EDX,EAX*4+200H MOV EBX,EAX+EDX*2MOV EBX,EAX+EDX*2+300H MOV EAX,ESP由于32位地址的寻址方式能使用所有的通用寄存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳北软信息职业技术学院《现代测试技术》2023-2024学年第二学期期末试卷
- 阜阳职业技术学院《社会化媒体运营》2023-2024学年第二学期期末试卷
- 上海南湖职业技术学院《会计模拟实验》2023-2024学年第二学期期末试卷
- 吉林警察学院《矿物加工仪表与过程控制》2023-2024学年第二学期期末试卷
- 珠海城市职业技术学院《动力设备调节及控制》2023-2024学年第二学期期末试卷
- 青岛电影学院《临床生物化学及检验技术》2023-2024学年第二学期期末试卷
- 安徽机电职业技术学院《控制与调节技术》2023-2024学年第二学期期末试卷
- 广东松山职业技术学院《信息技术基础与应用》2023-2024学年第二学期期末试卷
- 华北电力大学《民法四》2023-2024学年第二学期期末试卷
- 湖北健康职业学院《工程测量》2023-2024学年第二学期期末试卷
- 《光电显示技术》OLED原理
- 2022年重庆江津中考数学试题及答案(A卷)
- 反恐安全政策
- 创新教学任务
- 浅谈脓毒血症的集束化治疗及护理-PPT课件
- 新部编版《道德与法治》五年级下册第7课《不甘屈辱 奋勇抗争》优质课件(含视频)
- 架子工班组承包协议
- 化验室化学试剂台账范例
- 杨家湾220KV变电站工程预算表
- 第七课:构图的形式
- 六类网线检测报告(共9页)
评论
0/150
提交评论