PDA

Visualizza la versione completa : [ASSEMBLY MIPS]Come usare lo stack


dennis87
26-02-2013, 16:19
Ciao a tutti come state? :)
Ho un problema con un esercizio.
Dato in input un numero intero il programma deve ritornare in ordine i numeri che compongono il numero scritti in lettere. In poche parole se io inserisco 25, il programma mi stampa in output due cinque.
Ora quello che ho fatto io funziona ma non stampa nel corrette ordine, ovvero stampa a partire dall'ultima cifra, cioè se inserisco il solito 25 il mio programma stampa in output cinque due.
Per correggere questo "bug" avevo pensato di usare una pila Lifo, in modo tale che mi stampi l'output corretto. Ma come si usa la pila? cioè come si implementa? mi potreste aiutare per favore?
Questo è il mio codice.


.data
insert: .asciiz "Inserisci un numero intero positivo -> "
dig0: .asciiz " zero "
dig1: .asciiz " uno "
dig2: .asciiz " due "
dig3: .asciiz " tre "
dig4: .asciiz " quattro "
dig5: .asciiz " cinque "
dig6: .asciiz " sei "
dig7: .asciiz " sette "
dig8: .asciiz " otto "
dig9: .asciiz " nove "
digits: .word dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8,dig9

.text
.globl main

main:
li $t1, 10
Loop:
la $a0, insert
li $v0, 4
syscall

li $v0, 5
syscall

move $s0, $v0

blt $s0, $zero, Loop
control:
li $s1, 0
div $s0, $t1
mfhi $s1
mflo $s0

#USARE LO STACK LIFO (LAST IN FIRST OUT)

add $s1 ,$s1, $s1
add $s1, $s1, $s1
move $t0, $s1
lw $a0, digits($t0)
li $v0, 4
syscall

bne $s0, $zero, control

li $v0, 10
syscall

oregon
26-02-2013, 16:37
Originariamente inviato da dennis87
Ciao a tutti come state? :)
Ho un problema con un esercizio.

Ma non è l'esercizio di questa

http://forum.html.it/forum/showthread.php?s=&threadid=1532110

discussione di cui ti avevo suggerito io il codice ?

dennis87
26-02-2013, 16:41
si in effetti si, ma non lo trovavo. Grazie mille oregon.
Agli admin. Questo thread si può chiudere

Loading