机器代码(.asm 和 movsx)

Machine Code (.asm & movsx)

我正在看我书中的这些问题,我试图弄清楚它们的确切含义。

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

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

第一个正确,但不正确"adds"。 mov* 移动数据。

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

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