Ir ao conteúdo
  • Cadastre-se
Nunes_grf

Código em assembly mips para reverter strings

Recommended Posts

Olá, comecei a escrever em Assembly MIPS (Simulador MARS) faz algumas poucas semanas para um projeto da faculdade; 

Um dos exercícios que eu preciso fazer é escrever um algoritmo que inverta uma string, o que tem sido um pesadelo, ainda não trabalhamos com dispositivos de entrada e de saída, então os valores de entrada e de saída tem que ser gravados na memoria e não mostrados na tela;

Gostaria da ajuda de vocês pra consertar o meu código, tenho pouquíssima experiência com a linguagem portanto não estou conseguindo, segue o código abaixo:

.data

ENTRADA: .asciiz "casa"
.text
main:
    
    la $a0, ENTRADA
    jal strlen 
    j reversa
strlen:
    addi $t0, $zero, 0 #zerando o contador, $t0 guarda o tamanho da string;
        loop: 
            lb $t1, 0($a0) # carrega o proximo byte dentro de t2;
            beqz $t1, fimloop # se $t2 for 0 (fim da string) pula pra saida;
            addi $a0, $a0, 1 # incrementa o pointeiro da string;
            addi $t0, $t0, 1 # incrementa o contador;
            j loop 
        fimloop:
            add $a1, $t0, $zero #transfere para $a1 o tamanho da string ($t0)
            jr $ra 
reversa:
    add $t0,$a0,$zero #endereço de inicio
    
    add $t1,$zero,$zero  #inicializa $t1 como contador: i = 0
    addi $t2,$a1,-1   #inicia $t1 como contador: j = tamanho - 1  
         
    loop2: #do { } while;
    
        #carregando byte em $t4 para o indice i
        add $t3, $t0, $t1 
        lb $t4, 0($t3)
        
        #carregando byte em $t6 para o indice j 
        add $t5, $t0, $t2 
        lb $t6, 0($t5)
        
        #revertendo os caracteres
        sb $t4,0($t5) #String[j]=String
        sb $t6,0($t3) #String=String[j]
         
         #incrementando i e j
         addi $t1,$t1,1 #i++
        addi $t2,$t2,-1 #j--
        
        #teste para repetir o loop
                        
        slt $t6,$t2,$t1  
        beqz $t6,loop2 #testa se j >= i, caso seja, o loop se reinicia 
FIM:

 

Editado por dif
Tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunes_grf fiz uma simulação e parece que deu certo, qualquer coisa me dá um toque e a gente vai conversando, valeu.

 

.data
string: .asciiz "kid_gumer"

.text

	addi $sp, $sp, -30
	addi $sp, $sp, 15
	la $a0, string
main:
	lb $a1, 0($a0)
	beqz $a1, proc
	addi $a0, $a0, 1
	sb $a1, 0($sp)
	addi $sp, $sp, -1
	j main
	
proc:
	addi $a0, $a0, -10
	addi $sp, $sp, 1
proc2:
	
	lb $a1, 0($sp)
	beqz $a1, fim
	addi $a0, $a0, 1
	sb $a1, 0($a0)
	addi $sp, $sp, 1
	j proc2
fim:
	addi $a0, $a0, 1
	sb $zero, 0($a0)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×