Arquitetura de computadores - trabalho do apêndice a

Disponível somente no TrabalhosFeitos
  • Páginas : 9 (2171 palavras )
  • Download(s) : 0
  • Publicado : 23 de setembro de 2012
Ler documento completo
Amostra do texto
UNIVERSIDADE ESTADUAL DO CEARÁ

Centro de Ciências e Tecnologia
Bacharelado em Ciências da Computação
___________________________________________________________

ARQUITETURA DE COMPUTADORES
Trabalho: Apêndice A
__________________________________________________

Henrique César Vasconcelos Mendes
(Matrícula: 1090509)

Fortaleza, Março de 2012
A.1 [5] <§A.5> A Seção A.5descreveu como a memória é dividida na maioria dos sistemas MIPS. Proponha outra maneira de dividir a memória, que cumpra os mesmos objetivos.

Solução:
Outra forma de dividir a memória seria mover a parte de dados estáticos para os últimos endereços e modificar a forma como as pilhas e os dados dinâmicos são armazenados na memória. Dividiríamos a parte da memória que sobrar a estes dois últimos emduas partes e colocaríamos o segmento de pilha e acima dele os dados dinâmicos.
A vantagem desse modelo seria que o segmento de dados estaria bem definido em um intervalo que seria conhecido pelo sistema. A desvantagem em relação ao modelo da seção A.5 é que neste a memória de dados dinâmicos e de segmento de pilha é compartilhada, logo o segmento de dados dinâmicos poderá ser maior no modelo MIPSda seção A.5, aproveitando o máximo da memória.

A.2 [20] <§A.6> Reescreva o código para fact utilizando menos instruções.

Solução:
main:
li $v0,4 # solicita um numero ao usuário
la $a0,frase1
syscall

li $v0,5 #recebe o valor
syscall
move $t0,$v0 #move o valor lido para o reg. $t0

li $t1,1 #$t1= 1
li $t2,-1 #$t2= -1chamada1:
mul $t1,$t0,$t1 #$t1= $t0*$t1
add $t0,$t2,$t0 #$t0=$t2+$t0 usar como decremento
bgtz $t0, chamada11 #Se $t0>0 chamada1()

move $a0,$t1 #move o valor do fatorial para $a0
li $v0,1 #chama a impressão de um inteiro
syscall #imprime

li $v0,10 #chama o encerramento do programa
syscall #encerra

.data
frase1: .asciiz "Digite umnumero: "

A.3 [5] <§A.7> É seguro que um programa do usuário utilize os registradores $k0 ou $k1?

Solução:
Os registradores $k0 e $k1 não devem ser usados por programas do usuário ou compiladores por que são reservados para o montador e o sistema operacional.

A.4 [25] <§A.7> A Seção A.7 contém código para um handler de exceção muito simples. Um problema sério com esse handler éque ele desativa as interrupções por um longo tempo. Isso significa que as interrupções de um dispositivo de E/S rápido podem ser perdidas. Escreva um handler de exceção melhor, que não possa ser interrompido, mas que ative as interrupções o mais rápido possível.

Solução: “mandarei anexada, se possível, mais tarde.”

A.5 [15] <§A.7> O handler de exceção simples sempre desvia para ainstrução após a exceção. Isso funciona bem, a menos que a instrução que causou a exceção esteja no delay slot de um desvio. Nesse caso, a próxima instrução será o alvo do desvio. Escreva um handler melhor, que use o registrador EPC para determinar qual instrução deverá ser executada após a exceção.

Solução: “mandarei anexada, se possível, mais tarde.”

A.6 [5] <§A.9> Usando o SPIM, escreva eteste um programa de calculadora que leia inteiros repetidamente e os adicione a um acumulador. O programa deverá parar quando receber uma entrada 0, imprimindo a soma nesse ponto. Use as chamadas do sistema do SPIM descritas nas páginas A-32 e A-33.

Solução:
main:
li $v0,4 #carrega impressão de string
la $a0,frase2 #carrega a string
syscall #imprime a string "Digite...
li$t1, 0 #$t1=0
numero:

li $v0,5 #prepara recebimento de valor
syscall #recebe o valor
move $t0,$v0 #move o valor para $t0
add $t1,$t1,$t0 #$t1= $t1 + $t0
beq $t0,$zero,encerra # se $t0=0 chama encerra()
j numero # chama numero()
encerra:

move $a0,$t1 #move o valor da soma para $a0
li $v0,1 #chama a impressão de um inteiro...
tracking img