资源描述:
《汇编语言---操作数寻址方式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、汇编语言---操作数寻址方式ASM2009-07-1319:37:23阅读16评论0 字号:大中小 订阅操作数是指令或程序的主要处理对象.汇编语言指令的操作数的个数可以是0、1、2;即:汇编指令可以没有操作数,可以只有一个操作数,也可以有两个操作数;在CPU的指令系统中,除了NOP(空操作指令)、HLT(停机指令)等少数指令之外,大量的指令在执行的过程中都会涉及到操作数;所以,在指令中如何表达操作数或操作数所在位置是正确运用汇编指令的重要因素之一;在指令中,指定操作数或操作数存放位置的方法称为寻址方式;操作数的各种
2、寻址方式是使用汇编语言进行程序设计的基础;一、16位地址的寻址方式CPU中有7中基本的寻址方式:立即数寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式;其中,直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式,这5种寻址方式是确定存储单元有效地址的5种不同的计算方法,用它们可以方便地实现对数组元素的访问;由于总线接口单元BIU能根据需要自动引用段寄存器得到段值,所以这5种方式也就是确定存放操作数的存
3、储单元的有效地址的方法;有效地址EA就是段内偏移地址,是一个16位的无符号整数,在利用者5种方法计算有效地址时,所得到的结果也被认为是一个16位的无符号整数;除了这些基本的寻址方式外,还有固定寻址和IO端口寻址,等等;另外,在32位CPU中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式---32位地址的寻址方式;1、立即数寻址方式:操作数作为指令的一个组成部分而直接写在指令中,这种操作数称为立即数,这种寻址方式称为立即数寻址方式;立即数,可以理解为常数;如:123、"abc"、false、true,等等;这种
4、数跟在操作码后面,与指令一起存放在代码段中;立即数可以是8位、16位.如果立即数是16位的,那么将按照"高高低低"的顺序原则存放,即:高字节存放在高地址存储单元中,低字节存放在低地址存储单元中;例如:MOVAH,08H ADDAX,1234H MOVECX,123456HMOVB1,12H MOVW1,3456H ADDD1,32123456H其中,B1、W1、D1分别是字节、字、双字存储单元;指令中,逗号前面的操作数称为第一操作数,逗号后面的字面数值称为是第二操作数,在这里,这些第二操作
5、数就是立即数(常数).在汇编语言中,规定:立即数不能作为指令中的第一操作数.该规定与高级语言中"赋值语句的左边不能是常量"的规定一致;立即数常用于对寄存器或存储单元赋初值;立即数寻址方式的图示:2、寄存器寻址方式:指令所需要的操作数已经存储在寄存器中,或者把目标操作数存入寄存器中,而在指令中仅仅指出所使用的寄存器既可;这种在指令中指出所使用寄存器的寻址方式称为寄存器寻址方式;指令中可以引用的寄存器机器符号名称如下:8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL,等等;16位寄存器:AX、BX、CX、DX、
6、SI、DI、BP、SP、CS、DS、ES、SS、FS、GS等等;32位寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP等等;寄存器寻址方式是一种简单快捷的寻址方式,源操作数和目的操作数都可以是寄存器;A.源操作数是寄存器的寻址方式,如: ADDVARD,EAX ADDVARW,AX ADDVARB,BH 其中,VARD、VARW、VARB分别是双字变量、字变量、字节变量;B.目的操作数是寄存器的寻址方式,如: ADDBH,78H ADDAX,1234H MOVEBX,123
7、45678HC.源操作数和目的操作数都是寄存器的寻址方式,如: MOVEAX,EBX MOVAX,BX MOVDH,BL由于指令所需要的操作数都已经存储在寄存器中,或者操作的结果都被存入到寄存器中,这样,在指令执行过程中,就不会再去读写存储器单元,会减少读写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度.3、直接寻址方式:操作数存放在存储单元中,该存储单元的有效地址作为指令的一个组成部分;这种寻址方式称为直接寻址方式;即:指令所需要的数据存放在一个存储器单元中,而指令中直接包含该存
8、储器单元的有效地址EA(也就是该操作数的有效地址);通常情况下,操作数一般存放在数据段中,所以,操作数的物理地址将由数据段寄存器DS的值加上指令中给出的16位有效地址EA得出,但是,如果使用段超越前缀,那么,操作数则可以存放在其他段中;由于数据段的段寄存器默认为DS,所以,如果要指定访问其它段内的数据,则可在指令中使用段超越前缀的方式显示地书写