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

x64 asm: Moving a negative value from a register to memory

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

我正在尝试对 r10 中的数字进行 2s 赞美并将其存储以备将来在 val 中使用。

所以我这样做:

neg r10
mov [val], r10b

但是当我稍后尝试使用 val 中的值时(或使用调试器进行调试),它被存储并被视为无符号值,所以如果 r10 是 -12, val 现在是 244,这是无符号的等价物。

如何在保留符号的同时将寄存器移动到内存?或者,在将该内存移回不同的寄存器后如何设置符号?

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