2017-10-12 10 views
0

J'ai pu obtenir l'entrée de l'utilisateur comme indiqué dans mon code mais je suis désespérément incapable d'obtenir le plus petit nombre. Merci beaucoup ...Comment déterminer la plus petite valeur de trois nombres entiers dans MIPS sans utiliser de boucles

Voici les instructions pour cela. "Ecrire un programme d'assemblage pour lire trois entiers signés 32 bits à partir de l'utilisateur Déterminez le plus petit de ces trois nombres et affichez ce résultat N'utilisez pas de boucles Invitez l'utilisateur pour chaque entier entré."

.data 
Msg1: .asciiz "Enter the first integer: " 
Msg2: .asciiz "Enter the second integer: " 
Msg3: .asciiz "Enter the third integer: " 
Msg4: .asciiz "the the smallest numberis: " 

.text 
    # Print the first message 
li $v0, 4 
la $a0, Msg1 
syscall 

# Prompt the user to enter the first integer 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t0, $v0 

# Print the second message 
li $v0, 4 
la $a0, Msg2 
syscall 

# Prompt the user to enter the second integer 
li $v0, 5 
syscall 

# Store the first integer in $t1 
move $t1, $v0 

# Print the third message 
li $v0, 4 
la $a0, Msg3 
syscall 

# Prompt the user to enter the third interger 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t2, $v0 

# Determine the smallest Number 
slt $s0, $t1, $t0 
beq $s0, $zero, L1 
+0

Êtes-vous toujours autorisé à effectuer des branchements? Si c'est le cas, il est assez facile de sauter conditionnellement sur une instruction de mouvement pour obtenir le maximum des deux premiers, puis recommencez. Sinon, recherchez des séquences min/max sans branches. (IDK si MIPS a 'cmov', ou si vous devez le construire avec SUB/SRA/AND). –

+2

pouvez-vous le faire pour deux nombres? Ensuite, après que vous avez le plus petit de deux, au lieu d'imprimer le résultat, faites le plus petit de deux (le plus petit résultat précédent vs troisième valeur), et vous avez le plus petit de trois. C'est juste quelques lignes de code de plus. – Ped7g

+0

min (a, b, c) = min (min (a, b), c) – Tommylee2k

Répondre

0

Merci à tous pour vos réponses, j'ai finalement pu déterminer le plus petit nombre. Le code fonctionne parfaitement sur MARS.

.data 
Msg1: .asciiz "Enter the first integer: " 
Msg2: .asciiz "Enter the second integer: " 
Msg3: .asciiz "Enter the third integer: " 

.text 
    # Print the first message 
li $v0, 4 
la $a0, Msg1 
syscall 

# Prompt the user to enter the first integer 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t0, $v0 

# Print the second message 
li $v0, 4 
la $a0, Msg2 
syscall 

# Prompt the user to enter the second integer 
li $v0, 5 
syscall 

# Store the first integer in $t1 
move $t1, $v0 

# Print the third message 
li $v0, 4 
la $a0, Msg3 
syscall 

# Prompt the user to enter the third interger 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t2, $v0 

# Determine the smallest Number 
blt $t0, $t1, L0 
blt $t1, $t0, L3 


li, $v0, 10 
syscall 

L0: 
    blt $t0, $t2, L2 
    blt $t2, $t0, L3 

L2: 
    li $v0, 1 
    move $a0, $t0 
    syscall 
    li, $v0, 10 
    syscall 

L3: 
    blt $t1, $t2, L4 
    blt $t2, $t1, L5 

L4: 
    li $v0, 1 
    move $a0, $t1 
    syscall 
    li, $v0, 10 
    syscall 

L5: 
    li $v0, 1 
    move $a0, $t2 
    syscall 
    li, $v0, 10 
    syscall 


li, $v0, 10 
syscall 
+0

Astuce: au lieu de dupliquer tout le bloc 2-syscall, il faudrait beaucoup moins de code pour simplement se ramifier autour des instructions 'move' et faire apparaître le bloc de' li'/'syscall' à la fin, une fois que vous avez entier à droite dans '$ a0'. –