mov al, -10
mov [_resS], al
输出:resS = 246.为什么?毕竟,“-10”值应放在al寄存器中。
使用寄存器eax正常工作。
mov eax, -10
mov [_resS], eax
答案 0 :(得分:3)
"输出" 并不清楚你的意思。即你在打印这个值(如果是这样,怎么样?),或者你是在调试器中看它等等?
在任何情况下,8位值246和-10在两个补码中共享相同的位模式(这是大多数处理器使用的):11110110
。这些位是应该表示246还是-10取决于您是选择将它们视为有符号值还是无符号值。
但是,您的问题似乎只来自修改变量_resS
的部分内容
如果我们假设您打印/检查_resS
为32位值,并且_resS
最初包含值0,那么您很容易理解为什么会得到您描述的结果:< / p>
_resS
包含0x00000000 mov al,-10
- &gt; al
包含-10(或246),等于0xF6 mov [_resS], al
- &gt; _resS
包含0x000000F6,即246 在第二种情况下,你得到了这个:
_resS
包含0x00000000 mov eax,-10
- &gt; eax
包含-10,等于0xFFFFFFF6 mov [_resS], eax
- &gt; resS
包含0xFFFFFFF6,即-10。