#--------------| # File: uppercas.asm # # tested on SPIM Version 6.3a # # input: stringa | output: uppercase della stringa # # data:23/01/2004 # # kraba # +-+-+-+-+ +-+-+-+ # |m|i|p|s| |A|S|M| # +-+-+-+-+ +-+-+-+ #--------------| .data input_str: .asciiz "\nInserisci la stringa: " output_str: .asciiz "\nL`uppercase della stringa e`: " size_str: .space 100 #riservo 100 byte per la frase .text main: li $v0,4 #syscall per mandare in stampa la $a0,input_str #la stringa input_str syscall li $v0,8 #syscall per leggere una stringa la $a0,size_str #in a0 c`e` il numero di byte riservati li $a1,50 #in a1 viene detto quanto lunga deve essere syscall jal uppercase #jump and link alla subroutine uppercase la $a0,output_str #manda in stampa la stringa di output_str addi $v0, $zero,4 syscall li $v0,4 #stampa la stringa modificata con la la $a0,size_str #subroutine uppercase syscall li $v0,5 #aspetta un "enter" da tastiera syscall li $v0,10 #e poi termina syscall uppercase: move $t0,$a0 #mette in t0 il registro a0 uploop: lbu $t1,0($t0) #carica il primo byte di t0 in t1 beqz $t1,printout #controlla che non sia NULL altrimenti salta a printout bgt $t1,122,notlower #controlla che non sia maggiore di 122 (z) blt $t1,97,notlower #controlla che non sia minore di 97 (a) addi $t1,$t1,-32 #sottrae 32 a t1 sb $t1,0($t0) #salve il byte di t1 notlower:addi $t0,$t0,1 #se nessun numero era < di 97 o > di 122 prosegue aggiungendo 1 byte j uploop #salta ad uploop printout:jr $ra #termine l`esecuzione della subroutine