movsx是否意味着关于目的地的签名?

时间:2018-04-30 23:12:51

标签: assembly x86 unsigned signed sign-extension

从此question

  

movzx ecx,al;将字节移动到双字,零扩展

如果您希望将al中的值视为已签名,则还有MOVSX。

上面提到'movsx'意味着al已签名。

  1. movzx是否暗示al 签名?
  2. movsxecx(如果有的话)签名的含义是什么?
  3. movzxecx(如果有的话)签名的含义是什么?

1 个答案:

答案 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之后,所以它具有相同的当被视为有符号时和被视为无符号时都是值。