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.
我知道 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.