Baixe o app para aproveitar ainda mais
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
Compartilhar