Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

AprendizZ

Assembly: Trocar conteudo de duas words reservadas.

Mensagens Recomendadas

AprendizZ    0
AprendizZ

Boas, estou iniciando programação em Assembly e ainda não domino muito bem esta linguagem.

Pretendo reservar em memória duas words com valores diferentes e depois proceder à troca do seu conteúdo (em MIPS).

Já fiz o seguinte código (no Mars):

.data
val1: .word 100
val2: .word 200

.globl main
.text
main:
la $t0, val1		# carregar endereco da word val1 em $t1
la $t1, val2		# carregar endereco da word val2 em $t2

lw $t0, 0($t2)		#
lw $t1, 0($t3)		#

sw $t2, 0($t1)	
sw $t3, 0($t0)		#

ori $v0, $0, 10		# termina o programa
syscall			# devolvendo o controlo ao S.O.

mas dá-me erro e não é feita a troca.

Onde posso estar a errar? Obrigado pela ajuda.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
AprendizZ    0
AprendizZ

Entretanto lá consegui encontrar uma solução:

	.data
val1: .word 100
val2: .word 200
aux0: .word

.globl main
.text
main:
la $t0, val1		# carrega endereco da word val1 em $t0
la $t1, val2		# carrega endereco da word val2 em $t1
la $t2, aux0		# carrega endereco da word aux0 em $t2

lw $t3, ($t0)		# ler o a word de $t0 (val1) para $t3
sw $t3, 0($t2)		# escrever a word de $t0 (val1) em $t2 (aux0)

lw $t3, ($t1)		# ler o a word de $t1 (val2) para $t3
sw $t3, 0($t0)		# escrever a word de $t1 (val2) em $t0 (val1)

lw $t3, ($t2)		# ler o a word de $t2 (aux0) para $t3
sw $t3, 0($t1)		# escrever a word de $t2 (aux0) em $t1 (val2) 

ori $v0, $0, 10		# termina o programa
syscall			# devolvendo o controlo ao S.O.

Deixo simplesmente a pergunta: será possível melhorar? Obrigado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

Não sou especialista em assembly, muito menos em MIPS, mas depois de ler algumas coisas na net, faria o seguinte código:

        .data
val1: .word 100
val2: .word 200
        
        .globl main
        .text
main:
        la $t0, val1            # carrega endereco da word val1 em $t0
        la $t1, val2            # carrega endereco da word val2 em $t1

        lw $t2, ($t0)           # ler o a word de $t0 (val1) para $t2
        lw $t3, ($t1)           # ler o a word de $t1 (val2) para $t3
        sw $t2, 0($t1)          # escrever a word de $t2 (val1) em $t1 (val2)
        sw $t3, 0($t0)          # escrever a word de $t3 (val2) em $t0 (val1)

        ori $v0, $0, 10         # termina o programa
        syscall                 # devolvendo o controlo ao S.O.

Isto é semelhante ao que tinhas inicialmente, só troquei a ordem dos parâmetros do lw (talvez fosse esse o erro que tinhas inicialmente).

Esta é a primeira vez que uso MIPS, por isso não tenho a menor ideia se isto funciona ou não :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade