我正在尝试进行零或符号扩展,但不使用MOVZX
or MOVSX
。
我基本上想模仿上述命令,但不使用它们。有没有办法做到这一点?
要从左侧添加 0,SHR
但我不太确定它是否可以正常工作,因为它会更改值...
我正在使用大会 8086
我正在尝试进行零或符号扩展,但不使用MOVZX
or MOVSX
。
我基本上想模仿上述命令,但不使用它们。有没有办法做到这一点?
要从左侧添加 0,SHR
但我不太确定它是否可以正常工作,因为它会更改值...
我正在使用大会 8086
所有 x86-16 CPU 都提供CBW
(8 位到 16 位)和CWD
(16 位到 32 位)指令。
如果您想做一个“通用”符号扩展(例如从 12 位到 16 位而不是从 8 位到 16 位),您可以使用适用于任何 CPU 的以下算法:
AND
以获取要扩展的单词的最高位示例:AX
从 12 位到 16 位的符号扩展:
; Ensure that the value is really a 12-bit value
AND AX, 0xFFF
; Extract the highest bit
MOV CX, AX
AND CX, 0x800
; Subtract that value twice
SUB AX, CX
SUB AX, CX
上面的代码可以通过处理AX
only 的高字节来简化(例如AND AH, 0xF
,代替AND AX, 0xFFF
)。