打印

ARM 指令疑惑,关于立即数。

[复制链接]
2790|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
teuton|  楼主 | 2007-3-16 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
teuton|  楼主 | 2007-3-16 10:21 | 只看该作者

自己先顶一下!

比如说300(10进制),换为75x4,按照ARM的构数方法,应该是(0~255)x2的偶次幂,12cH为合法16进制数,
那么1111(10进制),怎样才能换为合法格式的16进制数呢,不可能有(0~255)x2的偶次幂,等于1111啊,有人能解释这个问题吗!

使用特权

评论回复
板凳
s99060| | 2007-3-16 10:22 | 只看该作者

无法表达!

用文字池

使用特权

评论回复
地板
teuton|  楼主 | 2007-3-16 10:26 | 只看该作者

文字池,!是ARM的特殊语句吗!?

使用特权

评论回复
5
zhiwei| | 2007-3-16 12:38 | 只看该作者

用C语言的话系统会生成一些字池

存放一些常数,以便使用相对寻址来Load32位立即数。一般每个文件编译后都有,可以从ADS1.2里面看出来。

使用特权

评论回复
6
computer00| | 2007-3-16 13:09 | 只看该作者

可以把这些特殊的数字保存在PC附近的内存中,

然后使用LDR指令加载. 地址由PC和偏移值产生. 你可以看看由C编译好的汇编指令。

   147: void main(void) 
   148: { 
   149:  
   150: int x; 
   151:  
0x00080448  E92D4000  STMDB     R13!,{R14}

   152: x=1111; 
   153:  

0x0008044C  E59F00FC  LDR       R0,[PC,#0x00FC]

由于这条指令时地址在0x0008044C,PC地址为当前地址加8,再加上后面的偏移0x00FC,地址就是0x00080550,
去看这个地址里面的数据,刚好就是1111的hex值.

0x00080550  00000457  DD        0x00000457

使用特权

评论回复
7
luocolor| | 2007-3-16 14:15 | 只看该作者

看了3遍,还是没看懂lz要说什么。

不过,感觉ldr伪指令和这个有点关系。

使用特权

评论回复
8
computer00| | 2007-3-16 16:37 | 只看该作者

的确,在汇编时,用LDR伪指令也会生成类似的代码

LDR R0, =1111

使用特权

评论回复
9
MicroMMU| | 2007-3-17 20:55 | 只看该作者

呵呵,见过51的查表没有。

ARM立即数一般采用“查表”来实现。

使用特权

评论回复
10
gofayao| | 2007-3-20 16:43 | 只看该作者

这样就可以

COUNT EQU 1111

LDR R0,=COUNT

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

70

帖子

0

粉丝