Buscar

teste2_1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Carlos Augusto Jardim Chiarelli 165685
1)
Não, pois você estabelecendo essa convenção torna o processo mais claro por conta da portabilidade, ou seja, seguindo o padrão (convenção) não se fica preso a um compilador específico. Sempre que usar um compilador diferente, independente de qual seja, haverá a mesma alocação e uso dos registradores, assim não é necessário ficar adivinhando quais, quando e onde foram usados.
2)
A própria função g(y) é responsável por salvar e restaurar todos registradores que usará (tanto $sx quanto $tx) pois ela não sabe quais estão em uso. Logo ela deve seguir esse procedimento com os que for usar para que não suje o valor deles ao retornar à execução da função que a chamou.
3)
Sim. Diferentes compiladores executam uma quantidade diferente de instruções para processar um mesmo código, logo se altera a CPI, pois para um mesmo ciclo de clock, os mesmos programas executarão em tempos diferentes, um executando mais instruções (mais rápidas ou não) outro menos instruções (mais lentas ou não).
4)
abs_lista:
	# $a0 = endereço value primeiro nó	
	# checa se a lista é vazia
	# if(*lista == NULL) ACABOU_LISTA
	beq $a0, $zero, FIM
	
	# preservando as variaveis
	# s0 será o endereço inicial da lista para trafegar por ela
	# t0 = value 
	addi $sp, $sp, -8
	sw $t0, 4($sp)
	sw $s0, 0($sp) 
	
	# assumindo que $a0 está o endereço inicial da lista (value)
	# s0 = a0
	add $s0, $a0, $zero
CORRIGE_VALOR:
	# t0 = value
	lw $t0, 0($s0)
	# a0 = t0
	add $a0, $t0, $zero
	
	# chama abs que pega o numero em a0
	# e retorna o modeulo em v0
	jal abs	
	
	# value = v0
	sw $v0, 0($s0)
	# s0 = *next
	lw $s0, 4($s0)
	# checa se a lista chegou ao fim (é vazia, == 0)
	# encerra código
	beq $s0, $zero, ACABOU_LISTA
	
	# else verifica próximo nó da lista
	j CORRIGE_VALOR	
	
ACABOU_LISTA:
	# restaurando as variáveis
	lw $s0, 0($sp) 
	lw $t0, 4($sp)
	addi $sp, $sp, 8
FIM:
	# retorna pro endereço da que chamou essa
	jr $ra

Outros materiais