汇编语言:使用十六进制表示的有符号与无符号整数表示

时间:2016-01-29 21:43:47

标签: assembly hex masm signed irvine32

给出以下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。我对如何识别这一事实感到有些困惑。如果初始数据类型是无符号的,那么整数结果将为负数的赠品是什么?

3 个答案:

答案 0 :(得分:3)

在添加或减去整数时,CPU并不关心操作数是有符号还是无符号,因为得到相同的结果。这就是MULDIV的签名和未签名版本,而不是ADDSUB的原因,所以答案就是您希望的那样。如果您打算添加两个无符号整数,则结果同样应该是无符号的。如果您打算添加两个有符号整数,则应将结果解释为已签名。

答案 1 :(得分:1)

简单地说,按照惯例,最重要的位是1意味着如果数字被解释为有符号整数那么它就是负数。完全相同的值可以解释为无符号整数。两种解释,两种结果。

答案 2 :(得分:0)

任务细节包括一个非常重要的事实,即清除所有关于如何达到所寻求的答案的困惑:     “所有被操纵的数据都是32位,二进制补码整数数据。”