我正在为 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 条指令。有没有更短的方法?