首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

伪指令是如何重载的

2013-12-11 
伪指令是怎么重载的?本帖最后由 likeyiyy 于 2013-11-21 18:21:40 编辑mips里有一条伪指令load $r1,32位的

伪指令是怎么重载的?
本帖最后由 likeyiyy 于 2013-11-21 18:21:40 编辑 mips里有一条伪指令
load $r1,32位的数字.
由于mips32每条指令为32位,所以这条指令不可能在一条指令内实现的,因为32位的数字已经占了32位。
所以实际上是这么做的。
ori $r1,低16位 //高位清零。
lui $r1,高16位 //
然后我就疑问,假如我有一条指令,是引用内存地址
load $r1,_max_number //假设_max_number是数据区的一个地址。
在编译的时候是否编译成两条指令呢?
假如编译成两条指令,在链接的时候,假如相对位置改变了,又怎么能保证仍然正确呢?
因为指令已经分为两条了啊? 汇编器 伪指令 指令重载
[解决办法]
我看了一下MIPS IV指令集手册关于LL和LLD指令的说明,装载的地址在指令编码中都只有16位偏移,同时编码了GPR base 5位指出一个GPR作为基地址,32位地址使用GPR(base)+offset来形成,估计需要编译器在此前生成给GPR(base)赋值的指令。

热点排行