2013-02-23 5 views
0

Я пишу программу в MASM для создания и вычитания трех 32-битных целых чисел. Моя проблема заключается в том, что 9000 вычитается из 30000, что приводит к 27000, когда ожидается 21000. Источник выглядит следующим образом:Неожиданный вывод при использовании команды SUB

TITLE Add and Subtract 

; This program adds and subtracts 32-bit integers. 

.386 
.model flat,stdcall 
.stack 4096 
ExitProcess PROTO, dwExitCode:DWORD 
DumpRegs PROTO 

.code 
main PROC 

    mov eax,50000h   ; EAX = 50000h 
    mov ebx,30000h   ; EBX = 30000h 
    mov ecx,43h    ; ECX = 43h 

    sub eax,10000h   ; EAX = 40000h 
    sub ebx,9000h   ; EBX = 21000h 
    sub ecx,1h    ; ECX = 42h 

    call DumpRegs 

    INVOKE ExitProcess,0 
main ENDP 
END main 

DumpRegs приводит к следующему:

Unexpected result

Как показано, значение EBX «ы является 00027000, когда 0021000 ожидается. Что тут происходит?

+0

Вы знакомы с шестнадцатеричным? –

+0

@OliCharlesworth: Я. Я не понимал, что 'h' указывает шестнадцатеричную форму. –

ответ

2

Вы принимаете шестнадцатеричные числа для десятичных чисел.

30000h = 196608d.

9000h = 36864d.

196608d - 36864d = 159744d.

30000h - 9000h = 27000h = 159744d.

+0

А, это имеет смысл! Спасибо! –

Смежные вопросы