2013-02-23 7 views
0

3 개의 32 비트 정수를 생성 및 감산하기 위해 MASM에 프로그램을 작성하고 있습니다. 내 문제는 에서 9000을 뺀 것이 21000 일 때 27000이 표시되는 것입니다. 다음 원본은 다음에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

, 0021000가 예상되는 경우 EBX의 값 00027000이다. 무슨 일 이니?

+0

16 진수에 익숙합니까? –

+0

@OliCharlesworth : 안녕하세요. 나는'h'가 16 진수 형식임을 나타냅니다. –

답변

2

십진수로 16 진수를 잘못 입력했습니다.

30000h = 196608d.

9000h = 36864d.

196608d - 36864d = 159744d.

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

+0

아, 그건 이해가 돼요! 고맙습니다! –