当前位置:  开发笔记 > 编程语言 > 正文

清除1个ARM指令中的高16位

如何解决《清除1个ARM指令中的高16位》经验,为你挑选了1个好方法。

在ARM程序集中,immediates由8位旋转值编码,这意味着我们只能编码

(0-256)^2n.

现在我的问题是我要清除r0的高16位并用半字存储的r1替换它.但由于我必须做的范围有限: -

bic r0, r0, #0xff000000
bic r0, r0, #0x00ff0000
add r0, r0, r1, LSL #16

是否可以用一条指令替换2双指令?0xffff0000是不可解码的.也许我应该使用另一个逻辑操作来清除高16位?

谢谢

编辑:对不起,我忘了说r1的前16位是空的,我正在使用ARM7TDMI



1> bobince..:

如果你有一个足够新的ARM内核问题很简单:

movt    r0, #0
orr     r0, r0, r1,lsl#16

见http://www.keil.com/support/man/docs/armasm/armasm_cjagdjbf.htm

但是,如果你有ARMv6 +,你可以一次性完成整个引用的例子:

pkhbt   r0, r0, r1,lsl#16

见http://www.keil.com/support/man/docs/armasm/armasm_cihjedjg.htm

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有