用ReadInt减法

时间:2015-04-07 05:48:12

标签: windows assembly x86

我的代码存在一些问题,它使用了ReadInt,然后将其放入一个变量中,我调用它来做一些基本的数学运算。 程序的要点是要求5个数字,将前两个加在一起,减去第三个,然后将第四个和第五个加在一起,并给出输出。 但是我一直在某处发生错误,我不确定在哪里。 例如,如果我使用数字3,10,7,6,1答案应该是13,但是我的程序输出14,这使我相信它取7 + 6 + 1而不是3 + 10-7 + 6 1

    .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 个答案:

答案 0 :(得分:1)

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

由于您直接从val1中减去,因此您之后不应将eax移至val1(即应删除mov指令)

现在发生的是你计算3 + 10 - 7 == 6.然后你用7覆盖val1,然后继续加6和1给你一共14。