微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Thumb 模式下将寄存器符号扩展为 64 位设置所有位 = 符号位

如何解决在 Thumb 模式下将寄存器符号扩展为 64 位设置所有位 = 符号位

我正在使用 ARM7TDMI(ARMv4T 架构)的汇编程序。我使用 Thumb 模式是因为 ROM 具有 16 位总线 (GBA)。我想对一个 32 位寄存器进行符号扩展以获得另一个寄存器,所有位都设置为源寄存器的第 31 位的副本。要进行符号扩展的寄存器是高位寄存器,尤其是R9。

我目前正在使用这个:

        mov     r0,r9
        mvn     r0,r0           @ sign bit needs to be inverted due to
                                @ the silly ARM carry convention
        add     r0,r0           @ copy sign bit to carry
        sbc     r0,r0           @ sign-extend R9

但这需要 4 条指令。有没有更短的方法

解决方法

使用算术右移 31 或 32 将符号位作为 -10 复制到新寄存器中:

mov r1,r9       @ move to a low register to be usable as an operand
asrs r0,r1,#31 @ generate -1 or 0 in R0 depending on sign of R1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。