什么是立即数寻址
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是立即数寻址相关的知识,希望对你有一定的参考价值。
参考技术A立即寻址方式的目的就是将操作数紧跟在操作码后面,与操作码一起放在指令代码段中,在程序运行时,程序直接调用该操作数,而不需要到其他地址单元中去取相应的操作数,上述的写在指令中的操作数也称作立即数。
在MCS-51单片机汇编语言编程中,该寻址方式是将“#”号放在立即数前面,以表示该寻址方式为立即寻址,如将操作数写为#52H。
例: MOV A ,#52H
上述例子中“MOV”为操作码,“A”为第一操作数,其意义为累加寄存器,“#52H”为第二操作数,其意义就是立即数。通过该条程序指令可将十六进制数52H直接放入累加器中,当然也可以将立即数表示为二进制数或十进制数,如#00B。
扩展资料:
立即数的实施限制:
由于立即数被打包到指令本身中,因此某些ISA具有可用作立即值的受限范围的值。例如,在MIPS32中,立即数限制为16位。在一些更复杂的体系结构(如ARM)上,某些指令可能接受16位值,其他指令可能接受较小的范围,并且能够根据需要旋转位。
在立即数不能直接编码到指令中的情况下,例如当值超出范围时,可以采用各种其他方式来处理这些值。一个这样的选项是从内存中的常量池(例如文字池)加载公共值。或者,可以使用可以表示或加载到寄存器中并从那里操作的值来组装值。
一些ISA(如MIPS32和ARM)具有专用指令,如LUI,MOVW和MOVT,它们提供了一种方法,将高16位后跟低16位加载到单个寄存器中。
参考资料来源:百度百科-立即寻址
ARM寻址方式,王明学learn
ARM寻址方式
所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式。
一、立即数寻址
立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。:立即数不能作为指令中的第二操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。例如以下指令:
ADD R0,R0,#0x3f;R0←R0+0x3f
立即数,要求以“#”为前缀。
二、寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式、源和目的操作数都可以是寄存器。
ADD R0,R1,R2;R0←R1+R2
该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。
三、寄存器间接寻址
寄存器间接寻址就是寄存器中存放的是操作数在内存中的地址。
例如以下指令:
LDR R0, [R2];R0←[R2]
四、基址变值寄存器
基址变址寻址就是将寄存器里的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址:
LDR R0 ,[R1,#4] ; R0[R1+4]
五、相对寻址
与基址变址寻址方式相类似,相对寻址PC指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:
六、多寄存器寻址
一条指令完成多个寄存器的传送,最多16个寄存器;
如:STMxx R0!,{R1-R5}
注:xx是IDAB的任意组合:I-增;D-减;A-后;B-先;
执行这类指令要考虑如下几个问题:
1)、基址寄存器指向原始地址有没有放一个有效值?
2)、寄存器列表哪个寄存器被最先传送?
3)、存储器地址增长方向?
4)、指令执行完成后,基址寄存器有没有指向一个有效值?
如:STMia R0!,{R1-R5} 的答案分别是:有;R1;低-高;没有。
为什么要考虑这么多,因为涉及到数据还原的问题;
如:STMib r0!,[r1-r5]
LDMda r0! , [r1-r5] ------还原
以上是关于什么是立即数寻址的主要内容,如果未能解决你的问题,请参考以下文章