2016-01-29 5 views
1

Учитывая следующий 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. Я немного смущен тем, как бы я определил этот факт. Если исходный тип данных неподписан, какова будет то, что целочисленный результат будет отрицательным?

+0

Этот учебник/руководство по сопоставлениям с сопоставленными и неподписанными значениями (перенос или переполнение), вероятно, будет полезен, если вы думаете о подписанных vs. unsigned: http://teaching.idallen.com/dat2343/10f/notes/ 040_overflow.txt. Также см. Другие ссылки по адресу http://stackoverflow.com/tags/x86/info. –

ответ

3

ЦПУ не заботится о том, являются ли операнды подписанными или неподписанными при добавлении или вычитании целых чисел, поскольку вы получаете тот же результат. Вот почему есть подписанные и неподписанные версии MUL и DIV, но не ADD и SUB, поэтому ответ в зависимости от того, что вы хотите. Если вы намерены добавить два целых числа без знака, результат также должен быть неподписанным. Если вы намерены добавить два значащих целых числа, вы должны интерпретировать результат как подписанный.

+0

Спасибо за объяснение. Это было то, что я предполагал, так было, но я не был уверен. – FranzVonHemmrich

1

Просто, по соглашению, наиболее значащий бит является 1 означает, что если число интерпретируется как целое число то отрицательным. Точно такое же значение можно интерпретировать как целое число без знака. Две интерпретации, два результата.

+0

Спасибо, что нашли время ответить. Я понял, что это зависит от интерпретации, но я не был уверен. – FranzVonHemmrich

0

Сведения о назначении включают в себя один очень важный факт, который очищает ВСЕ от путаницы о том, как достичь желаемого ответа: «Все данные, которыми управляют, представляют собой 32-битные, дополняющие целочисленные данные».