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

Assembly Language: Signed vs Unsigned Integer Representation using Hexadecimal

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

CPU在加减整数时不关心操作数是有符号还是无符号,因为你得到的结果是一样的。这就是为什么 MULDIV 有签名和未签名版本,但 ADDSUB 没有,所以答案是你想要的。如果您打算将两个无符号整数相加,则结果同样应该是无符号的。如果您打算将两个有符号整数相加,则应将结果解释为有符号。

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

作业细节包括一个非常重要的事实,它消除了关于如何得出所寻求答案的所有困惑: "All of the data being manipulated is 32-bit, two's complement integer data."