gpt4 book ai didi

assembly - 清除 1 条 ARM 指令中的高 16 位

转载 作者:行者123 更新时间:2023-12-01 07:49:50 25 4
gpt4 key购买 nike

在 ARM 汇编中,立即数由 8 位旋转值编码,这意味着我们只能编码

(0-256)^2n.

现在我的问题是我想清除 r0 的高 16 位并将其替换为存储的半字 r1。但是由于我必须做的即时范围有限: -
bic r0, r0, #0xff000000
bic r0, r0, #0x00ff0000
add r0, r0, r1, LSL #16

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

谢谢

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

最佳答案

如果您有足够新的 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

关于assembly - 清除 1 条 ARM 指令中的高 16 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/294217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com