2016-10-22 8 views
-6

Le problème apparaît quand j'attends que le résultat de la soustraction apparaisse mais à la place il me montre 0. Pas x-a comme je l'espérais.Substract dans 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

Vous pourriez considérer * pourquoi * vous stockez l'entrée dans la mémoire. (Astuce: le 'syscall' peut corrompre les registres) – EOF

+0

Veuillez ne pas vandaliser votre message. – Glorfindel

+0

Ne pas vandaliser vos propres questions s'il vous plaît. C'est irrespectueux envers les gens qui ont pris la peine de répondre à votre question! –

Répondre

1

Une meilleure façon est de lire les entiers en entrée, puis de faire le calcul. Ce n'est pas un moyen pratique de stocker les valeurs en mémoire, puis lisez-les à faites le calcul.Si vous ne voulez pas lire les nombres en entrée, je vous recommande d'utiliser l'instruction li pour charger une valeur numérique spécifique dans vos registres et ensuite procéder au calcul que vous pouvez vouloir.

.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

Ce serait une meilleure réponse si vous mettez au moins un commentaire dans le code décrivant ce que vous avez changé et pourquoi. –

+0

Vous pouvez faire le 'sub' après l'impression' le résultat du soustrait est: ', alors vous pouvez enregistrer une instruction' move' et mettre le résultat de la soustraction dans '$ a0' pour le syscall qui l'imprime. –

+0

Den kanei tipota! –