2013-02-23 58 views
0

我正在用MASM編寫程序來創建和減去三個32位整數。我的問題是,從30000減去9000似乎導致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的值是000270000021000預期。這裏發生了什麼?

+0

您是否熟悉十六進制? – 2013-02-23 10:33:07

+0

@OliCharlesworth:我是。我沒有意識到'h'表示十六進制格式。 – 2013-02-23 10:34:23

回答

2

錯誤十進制數字的十六進制數字。

30000h = 196608d

9000h = 36864d

196608d - 36864d = 159744d

30000h - 9000h = 27000h = 159744d

+0

啊,這很有道理!謝謝! – 2013-02-23 10:31:33