Tar*_*ski 3 assembly arm bit-manipulation
在ARM程序集中,immediates由8位旋转值编码,这意味着我们只能编码
(0-256)^2n.
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我要清除r0的高16位并用半字存储的r1替换它.但由于我必须做的范围有限: -
bic r0, r0, #0xff000000
bic r0, r0, #0x00ff0000
add r0, r0, r1, LSL #16
Run Code Online (Sandbox Code Playgroud)
是否可以用一条指令替换2双指令?0xffff0000是不可解码的.也许我应该使用另一个逻辑操作来清除高16位?
谢谢
编辑:对不起,我忘了说r1的前16位是空的,我正在使用ARM7TDMI
如果你有一个足够新的ARM内核问题很简单:
movt r0, #0
orr r0, r0, r1,lsl#16
Run Code Online (Sandbox Code Playgroud)
见http://www.keil.com/support/man/docs/armasm/armasm_cjagdjbf.htm
但是,如果你有ARMv6 +,你可以一次性完成整个引用的例子:
pkhbt r0, r0, r1,lsl#16
Run Code Online (Sandbox Code Playgroud)
见http://www.keil.com/support/man/docs/armasm/armasm_cihjedjg.htm
| 归档时间: |
|
| 查看次数: |
3371 次 |
| 最近记录: |