Você está na página 1de 4

UNIVERSIDADE DE BRASLIA

INSTITUTO DE CINCIAS EXATAS


DEPARTAMENTO DE CINCIA DA COMPUTAO
70910-900 - Braslia - DF - Brasil
Caixa Postal: 4466
Tel.: 55 061 348 2482
FAX: 55 061 2733589
____________________________________________________________________________________

CIC 116394 Organizao e Arquitetura de Computadores

Assembly MIPS

1. Comento o cdigo MIPS a seguir e descreva em uma sentena que


ele computa. Assuma que $a0 utilizado para a entrada e
inicialmente contm n , um inteiro positivo. Assuma que $v0
utilizado para a sada.
begin: addi $t0, $zero, 0
addi $t1, $zero, 1
loop: slt $t2, $a0, $t1
bne $t2, $zero, finish
add $t0, $t0, $t1
addi $t1, $t1, 2
j loop
finish: add $v0, $t0, $zero

2. O seguinte fragmento de cdigo processa um array e produz dois


importantes valores nos registradores $v0 e $v1. Assuma que o
array consiste de 5000 palavras indexadas de 0 a 4999, e seu
endereo base est armazenado em $a0 e seu tamanho (5000) em
$a1. Descreva em uma sentena o que este cdigo faz.
Especificamente, o que ser retornado em $v0 e $v1?
add $a1, $a1, $a1
add $a1, $a1, $a1
add $v0, $zero, $zero
add $t0, $zero, $zero
outer: add $t4, $a0, $t0
lw $t4, 0($t4)
add $t5, $zero, $zero
add $t1, $zero, $zero
inner: add $t3, $a0, $t1
lw $t3, 0($t3)
bne $t3, $t4, skip
addi $t5, $t5, 1
skip: addi $t1, $t1, 4
bne $t1, $a1, inner
slt $t2, $t5, $v0
bne $t2, $zero, next
add $v0, $t5, $zero
add $v1, $t4, $zero
next: addi $t0, $t0, 4
bne $t0, $a1, outer
3. Assuma que o cdigo do exerccio 2 esteja rodando em uma mquina com um clock
de 500MHz que requeira os seguintes nmeros de ciclos para cada instruo:

Instruo Ciclos
add, addi, slt 1
lw,bne 2

No pior caso, quantos segundos ela levar para executar este cdigo?

4. Mostre a nica instruo MIPS ou a menor sequncia de instrues para esta


declarao C:
a=b+100;
Assuma que a corresponde ao registrador $t0 e b corresponde ao registrador $t1.

5. Mostre a nica instruo MIPS ou a menor sequncia de instrues para esta


declarao C:
x[10] = x[11] + c;
Assuma que c corresponde ao registrador $t0$ e o array x tem o endereo
base de 4.000.00010.

6. O programa a seguir tenta copiar palavras de um endereo no registrador $a1,


contando o nmero de palavras copiadas no registrador $v0$. O programa para de
copiar quando encontra uma palavra igual a 0. Voc no tem que preservar o contedo
dos registradores $v1, $a0 e $a1. Esta palavra de terminao deve ser copiada mas
no contada.
loop: lw $v1, 0($a0) # read next word from source
addi $v0, $v0, 1 # increment count words copied
sw $v1, 0($a1) # write to destination
addi $a0, $a0, 1 # advance pointer to next source
addi $a1, $a1, 1 # advance pointer to next dest
bne $v1, $zero, loop # loop if word copied != zero

Existem mltiplos bugs neste programa MIPS; conserte-os e torne este pro-grama
bug-free. Como muitos exerccios deste captulo 3, o modo mais fcil
de escrever programas MIPS utilizar o simulador descrito no Apndice A.
Voc pode pegar uma cpia deste simulador atravs dos links na pgina do
curso e tambm na pgina do livro.

7. Utilizando a verso correta do programa da resposta do exerccio 6, escreva o


segmento de cdigo C que pode ter produzido este cdigo. Assuma que a varivel
source corresponda ao registrador $a0, a varivel destination corresponda ao
registrador $a1 e que a varivel count corresponda ao registrador $v0. Mostre a
declarao de variveis, mas assuma que source e destination foram inicializadas nos
endereos corretos.

8. Considere o seguinte fragmento de cdigo C:


for (i=0;i<=100;i=i+1) {
a[i] = b[i] + c;
}
Assuma que a e b so arrays de palavras e que o endereo base de a est em $a0 e
que o endereo base de b est em $a1. O registrador $t0 est associado com a
varivel i e o registrador $s0 com a varivel c. Escreva o cdigo MIPS. Quantas
instrues so executadas durante a execuo deste cdigo? Quantas referncias
de dados na memria sero feitas durante a execuo?

9. Dado o seu entendimento do endereamento relativo do PC, explique porque um


assembler pode ter problemas implementando diretamente a instruo branch na
seguinte sequncia de cdigo:
here: beq $t1, $t2, there
...
there: add $t1, $t1, $t1
Mostre como o assembler pode reescrever esta seq uncia de cdigo para
resolverestesproblemas.

10. O programa montador ( assembler ) associado ao MIPS aceita pseudo-instrues que


no so parte do conjunto de instrues daquele processador, mas podem ser
sintetizadas a partir delas (pelo montador). Portanto, tais pseudo-instrues podem ser
usadas em programas escritos em assembly. Entretanto, algumas pseudo-instrues
necessitam usar um registrador temporrio, mas este no pode ser um dos
registradores temporrios que o programador assembly manipula em seu programa.
Para que as pseudo-instrues fiquem transparentes para o usurio, um registrador
chamado $at fica reservado como registrador temporrio para uso exclusivo do mon-
tador. Para cada uma das pseudo-instrues da tabela abaixo, determine a sequncia
mnima de instrues verdadeiras do MIPS que faz a mesma tarefa da pseudo-
instruo. Em algumas delas, voc precisar utilizar o registrador $at. Na tabela
abaixo, big um nmero representado em 32 bits e small um nmero que pode ser
representado em 16 bits.

11. Quando se projetam sistemas de memria, torna-se necessrio conhecer as


frequncias de leitura e de escrita na memria, bem como as frequncias de acesso a
dados e de acesso a instrues. Usando as estatsticas para o conjunto de instrues
MIPS mostradas na figura 1 para o programa gcc, determine o seguinte:
Num PseudoInstruo O que ela faz
a) move $t5, $t3 $t5 = $t3
b) clear $t5 $t5 = 0
c) li $t5, small $t5 = small
d) li $t5, big $t5 = big
e) lw $t5, big($t3) $t5 = Memria [$t3 + big]
f) addi $t5, $t3, big $t5 = $t3 + big
g) beq $t5, small, L if ($t5 = small) go to L
h) beq $t5, big, L if ($t5 = big) go to L
i) ble $t5, $t3, L if ($t5 <= $t3) go to L
j) bgt $t5, $t3, L if ($t5 > $t3) go to L
k) bge $t5, $t3, L if ($t5 >= $t3) go to L
(a) A porcentagem de todos os acessos memria que so acessos a dados.
(b) A porcentagem de todos os acessos memria que so acessos de leitura.
Suponha, neste caso, que das transferncias de dados sejam feitos atravs de
_____

instrues do tipo load .


Dica: Lembre-se que, durante a execuo de um programa, a memria acessada
para ler dados e instrues e para escrever somente dados.

Classe Exemplo MIPS Ling. Alto Nvel gcc spice


Aritmtica add, sub, addi declaraes de atribuies 48% 50%
Transf.Dados lw, sw, lb, sb, lui ref. estrut. dados (arrays) 44% 41%
Desvios Condic. beq, bne, slt, slti declar. if e loops 17% 8%
Saltos j,jr, jal funes, returns, case/switch 2% 1%

Figura 1: Classes de Instrues MIPS, exemplos e correspondncia com linguagem de alto nvel e
percentual de instrues MIPS executadas por categoria para dois programas: gcc e spice.

12. Faa os mesmos clculos do exerccio 11, mas agora substituindo o programa gcc
pelo programa spice.

13. Suponha que foram feitas as seguintes medidas de nmero mdio de instrues por
ciclo:
Classe da instruo CPI mdio
Aritmtica 1,0 ciclos
Transferncia de dados 1,4 ciclos
Salto condicional (branch) 1,7 ciclos
Salto incondicional (jump) 1,2 ciclos

Calcule o nmero mdio de ciclos por instruo para o MIPS. Pondere as


frequncias de instrues usando as estatsticas da figura 3.38 (pgina 189).
Calcule primeiro usando as freq uncias obtidas do programa gcc e, depois,
usandoasdospice.