2015-04-07 56 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

谢谢迈克尔太多了!我完全失去了问题的可能性!谢谢! –