Учитывая следующий MASM кода на языке ассемблера:ассемблер: Подпись против Unsigned Integer Представления с помощью шестнадцатеричной
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. Я немного смущен тем, как бы я определил этот факт. Если исходный тип данных неподписан, какова будет то, что целочисленный результат будет отрицательным?
Этот учебник/руководство по сопоставлениям с сопоставленными и неподписанными значениями (перенос или переполнение), вероятно, будет полезен, если вы думаете о подписанных vs. unsigned: http://teaching.idallen.com/dat2343/10f/notes/ 040_overflow.txt. Также см. Другие ссылки по адресу http://stackoverflow.com/tags/x86/info. –