sblantipodi
29-04-2004, 13:50
Qualcuno di voi è in grado di aiutarmi a trovare uno spezzone di codice che mi indirizzi a risolvere il problema in TOPIC.
Ovviamente devo usare Assembler per MIPS usando SPIM.
Io ho trovato questo, purtroppo però calcola solamente le occorrenze di B in una stringa.
Il programma che mi serve deve calcolare tutte le vocali presenti in una stringa. :(
Ecco quello che conta le B :
# Esercizi P&H 3.23 e 3.24: bfind e bcount
.data
hello: .asciiz "Scrivi una parola: "
out: .asciiz "Numero di b = "
str: .space 32
.text
.globl main
bfind:
li $t0, 98 # $t0 = 'b'
move $t1, $zero # i = 0
loopbfind:
add $v0, $a0, $t1 # $v0: indirizzo di s[i]
lb $t2, 0($v0) # $t2 = s[i]
beq $t2, $zero, endbfind # s[i] = '\0'
beq $t2, $t0, endbfind # s[i] = 'b'
addi $t1, $t1, 1 # i = i+1
j loopbfind
endbfind:
jr $ra
bcount:
addi $sp, $sp, -8 # Alloca 8 byte per lo stack
sw $ra, 0($sp) # Salva return address
sw $s0, 4($sp) # Salva $s0
move $s0, $zero # $s0 = numero di b
loopbcount:
jal bfind
lb $t0, 0($v0)
beq $t0, $zero, endbcount
addi $s0, $s0, 1
addi $a0, $v0, 1
j loopbcount
endbcount:
move $v0, $s0
lw $ra, 0($sp)
lw $s0, 4($sp)
addi $sp, $sp, 8
jr $ra
main:
li $v0, 4 # print_string
la $a0, hello
syscall
la $a0, str
li $a1, 32
li $v0, 8 # read_string
syscall
jal bcount
move $s0, $v0
li $v0, 4 # print_string
la $a0, out
syscall
move $a0, $s0
li $v0, 1 # print_int
syscall
# Uscita
li $v0, 10 # carica in $v0 il codice della exit
syscall # uscita dal programma
Spero che qualcuno mi aiuti :(
Ovviamente devo usare Assembler per MIPS usando SPIM.
Io ho trovato questo, purtroppo però calcola solamente le occorrenze di B in una stringa.
Il programma che mi serve deve calcolare tutte le vocali presenti in una stringa. :(
Ecco quello che conta le B :
# Esercizi P&H 3.23 e 3.24: bfind e bcount
.data
hello: .asciiz "Scrivi una parola: "
out: .asciiz "Numero di b = "
str: .space 32
.text
.globl main
bfind:
li $t0, 98 # $t0 = 'b'
move $t1, $zero # i = 0
loopbfind:
add $v0, $a0, $t1 # $v0: indirizzo di s[i]
lb $t2, 0($v0) # $t2 = s[i]
beq $t2, $zero, endbfind # s[i] = '\0'
beq $t2, $t0, endbfind # s[i] = 'b'
addi $t1, $t1, 1 # i = i+1
j loopbfind
endbfind:
jr $ra
bcount:
addi $sp, $sp, -8 # Alloca 8 byte per lo stack
sw $ra, 0($sp) # Salva return address
sw $s0, 4($sp) # Salva $s0
move $s0, $zero # $s0 = numero di b
loopbcount:
jal bfind
lb $t0, 0($v0)
beq $t0, $zero, endbcount
addi $s0, $s0, 1
addi $a0, $v0, 1
j loopbcount
endbcount:
move $v0, $s0
lw $ra, 0($sp)
lw $s0, 4($sp)
addi $sp, $sp, 8
jr $ra
main:
li $v0, 4 # print_string
la $a0, hello
syscall
la $a0, str
li $a1, 32
li $v0, 8 # read_string
syscall
jal bcount
move $s0, $v0
li $v0, 4 # print_string
la $a0, out
syscall
move $a0, $s0
li $v0, 1 # print_int
syscall
# Uscita
li $v0, 10 # carica in $v0 il codice della exit
syscall # uscita dal programma
Spero che qualcuno mi aiuti :(