x64 asm:将负值从寄存器移至内存

问题描述

假设我在.data中定义了一个称为val的字节。 还要假设我在寄存器r10中有一个数字,假设它是12

我正试图在r10中取一个2的补码,并将其存储在val中以备将来使用。

所以我这样做:

neg r10
mov [val],r10b

但是,当我稍后尝试在val中使用该值(或使用调试器进行测试)时,该值将被存储并视为无符号值,因此,如果r10为-12,则{{ 1}}现在是244,即无符号等效项。

如何在保存符号的同时将寄存器移到内存中?另外,将内存移回另一个寄存器后,如何设置符号?

解决方法

一个有符号的8位整数,即-12被存储为244。当您尝试使用调试器读取该值时,它将把该数字视为无符号字节,并显示244。如果您告诉调试器将内存视为带符号的字节,它将可以正常工作。