给出以下MASM汇编语言代码:
TITLE Move and add (AddSub.asm)
INCLUDE Irvine32.inc
INCLUDE macros.inc ; for memory dump
.data
x DWORD 0FFF4A348h ; summands
y DWORD 00076540h
z DWORD ? ; sum
.code
main PROC
mov ebx,x
mov eax,ebx
mov ecx,y
add eax,ecx
mov z,eax
call DumpRegs
mDumpMem offset x,12,1 ; Display data area
exit
main ENDP
END main
我的理解是DWORD是一种32位无符号数据类型。一旦整个程序运行,eax寄存器保存十六进制值FFFC0888。有两个可能的整数值,可以由此十六进制值4,294,707,336或-259,960产生。据我的教授说,正确的Base 10相当于-259,960。我对如何识别这一事实感到有些困惑。如果初始数据类型是无符号的,那么整数结果将为负数的赠品是什么?
答案 0 :(得分:3)
在添加或减去整数时,CPU并不关心操作数是有符号还是无符号,因为得到相同的结果。这就是MUL
和DIV
的签名和未签名版本,而不是ADD
和SUB
的原因,所以答案就是您希望的那样。如果您打算添加两个无符号整数,则结果同样应该是无符号的。如果您打算添加两个有符号整数,则应将结果解释为已签名。
答案 1 :(得分:1)
简单地说,按照惯例,最重要的位是1
意味着如果数字被解释为有符号整数那么它就是负数。完全相同的值可以解释为无符号整数。两种解释,两种结果。
答案 2 :(得分:0)
任务细节包括一个非常重要的事实,即清除所有关于如何达到所寻求的答案的困惑: “所有被操纵的数据都是32位,二进制补码整数数据。”