让我们以将 16 位有符号数符号扩展为 32 位寄存器为例,例如mov $+/-5, %ax
movswl %ax, %ebx
.
有两种可能的情况:
高位为零(数字为正)。这非常容易理解和直观。例如,如果我有 number
5
,用零填充左边很容易理解。例如:00000000 00000101 # 5 (represented in 16 bits) 00000000 00000000 00000000 00000101 # 5 (represented in 32 bits)
然而,对我来说,棘手的事情是当它是一个负数并且我们进行符号扩展时。例子:
11111111 11111011 # -5 (represented in 16 bits) 11111111 11111111 11111111 11111011 # -5 (represented in 32 bits)
是的,我知道我们只是用1
. 但是是什么让它起作用呢?也许对二进制数的“属性”进行某种解释可以帮助我更好地理解这一点。