机器代码(.asm& movsx)

时间:2015-03-17 03:21:14

标签: assembly

我在书中看到了这些问题,我正试图找出它们的确切含义。

.data 
one WORD 8002h 
two WORD 4321h 
.code 
mov   edx,21348041h 
movsx edx,one 
movsx edx,two

^ EDX以值21348041 hex开始吧?然后因为movsx edx添加FFFFF8002十六进制?然后edx添加FFFFF4321十六进制?令人困惑,但我假设这本书解释说movsx转换为签名?

1 个答案:

答案 0 :(得分:4)

第一个是正确的,但不是“添加”。 mov*移动数据。

因为您要求将数据视为已签名,并且您使用的数据少于一个(假设采用32位架构),所以移动的实际数据将使用1填充到左侧,如果源编号设置最左边的位(即负数)。

请注意最后的附录。由于0x4321不是负数(小于0x8000),即使您将其视为签名,它仍然是正面的。它会移动你给它的字面值。