2016-10-22 2 views
-6

대각선의 결과가 나타날 때까지 기다릴 때 문제가 발생하지만 대신 0으로 표시됩니다. 내가 원하는대로 x-a가 아닙니다.Substract in Mips

.data 


strin: .asciiz "type two integers\n\n\n" 

strout: .asciiz "the result of the substract is:" 

a: .word 0 

x: .word 1 



.text 

main: 

li $v0, 4                   
la $a0,strin                 
syscall 

li $v0, 5 
syscall 
sw $t0,a 

li $v1,5 
syscall 
sw $t1,x 


sub $t1,$t1,$t0          


li $v0, 4                   
la $a0,strout                     
syscall 

move $a0, $t1     
li $v0, 1       
syscall 

li $v0,10            
syscall 
+0

* 왜 * 입력 * 메모리에 입력하는 것이 좋습니다. (힌트 :'syscall'이 레지스터를 깨뜨릴 수 있습니다.) – EOF

+0

게시물을 파손하지 마십시오. – Glorfindel

+0

질문을 파기하지 마십시오. 그것은 당신의 질문에 대답하기위한 노력을 한 사람들에 대해 무례합니다! –

답변

1

더 좋은 방법은 정수를 입력으로 읽은 다음 계산하는 것입니다. 값을 메모리에 저장 한 다음 계산을 수행하여 으로 읽는 것은 아닙니다. 숫자를 입력으로 읽지 않으려면 li 명령어를 사용하여 특정 숫자 값을로드하는 것이 좋습니다. 당신의 레지스터를 입력하고 원하는 계산을 진행하십시오.

.data 
strin: .asciiz "type two integers\n" 
strout: .asciiz "the result of the substract is:" 

.text 
.globl main 
main: 

li $v0, 4 
la $a0,strin                 
syscall 

#changed 
li $v0, 5  #Read the first integer 
syscall 
move $t0,$v0  #move the value you read to $t0 register 

#changed 
li $v0, 5  #Read the second integer 
syscall 
move $t1,$v0 #move the value you read to $t1 register 

sub $s0,$t0,$t1 #make substraction between $t0 and $t1 and store the   
        #result in $s0 register  
li $v0, 4 
la $a0,strout                     
syscall 

li $v0, 1 
move $a0, $s0 
syscall 

li $v0,10 
syscall 
+0

변경된 내용과 그 이유를 설명하는 코드에 최소한 의견을 기재하면 더 나은 대답이됩니다. –

+0

당신은'substract is :'의 결과를 출력 한 후에'sub'을 할 수 있습니다. 그러면'move' 명령을 저장하고 결과를 인쇄하는 syscall의'$ a0'에 빼기 결과를 넣을 수 있습니다. –

+0

덴 카니 팁 타! –