MSP430 中的 sxt 指令到底有什么作用?

What does sxt instruction in MSP430 really do?

我知道 sxt 是符号扩展指令。但我不明白这到底是如何工作的。 例如,如果我的 r15 寄存器存储字节 0045,那么 sxt r15 会对它做什么?

sxt 指令符号将一个字节扩展为 16 位字,即将第 7 位复制到第 8 位到第 15 位,然后适当地更新标志。

对于您的示例,sxt 没有任何效果,因为字节 0045 没有设置其最高有效位,因此 r15 的高字节保持为零。

我一直在处理大量使用此指令的问题。为了将它压缩成一个函数,我会把它写成(使用 Pythonic 语法):

def sxt(x):
    if x % 256 > 127:    # if top bit of low byte is set
        x |= 0xff00
    else:
        x &= 0x00ff

这可以写得更紧凑,也可能更高效。此版本旨在让非 asm 本地人最直观。

另请注意,该函数假设您将输入作为两个字节字传递,就像 sxt 指令操作一样,0xhhhh 其中 h 是一个十六进制数字,您可以在 Python.