从此question:
movzx ecx,al;将字节移动到双字,零扩展
如果您希望将al中的值视为已签名,则还有MOVSX。
上面提到'movsx'意味着al已签名。
movzx
是否暗示al
不签名?movsx
对ecx
(如果有的话)签名的含义是什么?movzx
对ecx
(如果有的话)签名的含义是什么? 答案 0 :(得分:2)
寄存器上没有签名本身。 movsx
表示"为目标分配一个值(被视为已签名)将等于source的值(被视为已签名)"。 movzx
相同,无符号而已签名。因此,如果您使用sx,则就像一样,源和目标都已签名,并且zx 就好像都是无符号的。例如:
let al = 0xFF = (signed) -1 = (unsigned) 255 (the same number, all bits set)
after movsx ecx, al, all bits will be set:
ecx = 0xFFFFFFFF = (signed) -1 = (unsigned) 4294967295
after movzx ecx, al, only lower 8 bits will be set:
ecx = 0x000000FF = (signed) 255 = (unsigned) 255
注意,对于较小的寄存器al
,数字-1和255由相同的位组表示,但对于较大的寄存器ecx
,这两个相同的数字具有不同的位表示。
编辑:正如Jester所指出的,使用movzx
并不意味着目的地的签名,因为在movzx
目的地的最高位始终为0之后,所以它具有相同的当被视为有符号时和被视为无符号时都是值。