2015-04-07 37 views
0

我遇到了一些與我的代碼有關的問題,它利用了ReadInt,然後它被放入一個變量中,我要求做一些基本的數學運算。 程序的要點是要求5個數字,將前兩個數字相加,減去第三個數字,然後將第四個和第五個數字相加,並給出輸出。 但是我不斷收到一個錯誤的地方,我不知道在哪裏。 例如,如果我使用數字3,10,7,6,1答案應該是13,但是我的程序輸出14,這使我相信它採取7 + 6 + 1而不是3 + 10-7 + 6 + 1減法與ReadInt

.data  

start BYTE "Please enter 5 numbers.", 0dh, 0ah,0 
val1 DWORD ? 
finish BYTE "The result of adding the first two numbers,subtracting the third", 0dh, 0ah, 0 
finish2 BYTE " and adding the remaining two is ", 0dh, 0ah,0 
msg BYTE 0dh,0ah,0 

.code  
main PROC 

mov edx, OFFSET start     
call WriteString       
call ReadInt        
mov val1,eax        
call ReadInt        
add eax, val1       
mov val1, eax       
call ReadInt        
sub val1, eax       
mov val1, eax       
call ReadInt        
add eax, val1       
mov val1, eax       
call ReadInt        
add eax, val1       
mov val1, eax       
mov eax, val1       
mov edx, OFFSET finish     
call WriteString       
mov edx, OFFSET finish2     
call WriteString       
mov edx, offset msg      
call WriteString       

invoke ExitProcess,0 
main endp 
end main 

回答

1
call ReadInt        
sub val1, eax       
mov val1, eax <-- this is wrong 

既然你直接從val1減去你不應該移動到eax後來val1(即mov指令應該應該被刪除)。

現在所發生的事情是,你計算3 + 10 - 7 == 6.但你覆蓋val1 7,然後繼續通過添加6和1給你一共有14

+0

謝謝邁克爾太多了!我完全失去了問題的可能性!謝謝! –