Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Criação de um programa

$
0
0
Eu utilizo o MARS , em principio isso não afeta o programa. .data string1: .asciiz "Numero de caracteres: " string2: .asciiz ", numero de minusculas: " string3: .asciiz ", numero de nao representaveis: " string4: .asciiz .text la $a1, string1 #carrega o endereço onde começa a string1 la $a2, string2 #carrega o endereço onde começa a string2 la $a3, string3 #carrega o endereço onde começa a string3 la $t0, string4 #carrega o endereço onde começa a string4 li $v0, 8 #carrega em $v0 o valor imediato de 8 para a syscall addi $a0, $t0,0 #copia o endereço que está em $t0 para $a0 (obrigatorio pelo syscall) syscall li $t2, 97 #carrega em $t2 o valor decimal de 'a' li $t3, 32 #carrega em $t3 o valor decimal de ' ' li $t4, 0 #inicia registo a 0 li $t5, 0 #inicia registo a 0 li $t6, 0 #inicia registo a 0 li $s0,10 #carrega em $s0 o valor decimal de '\n' loop: lb $t1,0($t0) #carrega o valor decimal guardado no endereço $t0 beq $t1,$s0,exit #se o valor for igual a '\n' o programa salta para a label exit addi $t4,$t4,1 #caso contrario o contador de caracteres aumenta 1 bge $t1,$t2,add_min #se o valor for maior ou igual que 'a' salta para a label add_min ble $t1,$t3, add_nr #se o valor for menor ou igual a ' ' salta para a label add_nr addi $t0,$t0,1 #aumenta 1 a $t0 para que o endereço de memoria passe a apontar para os 8 bits seguintes j loop add_min: addi $t5,$t5,1 #aumenta o contador de minuscula em 1 addi $t0,$t0,1 #aumenta 1 a $t0 para que o endereço de memoria passe a apontar para os 8 bits seguintes j loop #salta para o loop em ordem a continuar o processo até acabar a string add_nr: addi $t6,$t6,1 #aumenta o contador de ñ representaveis addi $t0,$t0,1 j loop exit: move $a0,$a1 #nesta secção são carregados os endereços de memoria das strings que aparecem no .data e os li $v0,4 #valores dos contadores e imprime na tela syscall #o ultimo syscall com $v0=10 termina o programa li $v0,1 move $a0, $t4 syscall move $a0,$a2 li $v0,4 syscall move $a0,$t5 li $v0,1 syscall move $a0,$a3 li $v0,4 syscall li $v0,1 move $a0,$t6 syscall li $v0,10 syscall O programa foi feito um bocado à pressa mas funciona bem Espero ter ajudado

Viewing all articles
Browse latest Browse all 11336

Trending Articles