ARQUITECTURA DE COMPUTADORES 9 P. Exercícios de Testes e

Propaganda
ARQUITECTURA DE COMPUTADORES
P. Exercícios de Testes e Exames
Problema 24: [Exame de Recurso de 27/7/01] Converta o seguinte código C para o código
MIPS. Suponha que k corresponde ao registo $s0 e que o array de palavras A começa no
endereço de memória 0xa0000000:
Switch(k) {
case 0:
A[10]= A[10]+10; break;
otherwise: A[10]= A[10]+20; break;
}
Problema 25: [Exame de Recurso de 27/7/01] Dado um segmento de código MIPS; a i, j e k
correspondem os registos $s3, $s4 e $s5 e o array de words A começa no endereço indicado
no registo $s6.
Loop: add
add
add
lw
bne
add
j
Exit: jr
$t1,
$t1,
$t1,
$t0,
$t0,
$s3,
Loop
$ra
$s3, $s3
$t1, $t1
$t1, $s6
0($t1)
$s5, Exit
$s3, $s4
a) Indique em linguagem C, qual a estrutura de controlo a que corresponde o segmento
MIPS e comente todas as linhas do segmento de código MIPS
b) Se consideramos que o label Loop corresponde ao endereço 0x80000, obtenha o código
MIPS em linguagem máquina, indicando o endereço de cada instrução e o conteúdo de cada
campo separadamente.
Problema 26: [Exame de Recurso de 27/7/01] Faça um procedimento denominado
múltiplos que mostre no ecrã os n primeiros múltiplos de 7. O valor de n supõe-se ser enviado
por parâmetro no registo $a0, pelo programa principal.
Faça o programa principal que chama o procedimento anterior. O valor de n deve ser
introduzido através do teclado pelo utilizador.
Problema 27: [Frequência de 7/12/01] Dado um segmento de código MIPS, i corresponde
ao registo $t2, a constante 5 está contida no registo $t3, o array de words A começa no
endereço indicado no registo $t0 e o array de words B começa no endereço indicado no
registo $t1.
1)
Indique em linguagem C, qual a estrutura de controlo a que corresponde o
segmento MIPS dado e comente todas as linhas do mesmo segmento de código.
2)
Se consideramos que o label Loop corresponde ao endereço 4194320,
obtenha o código MIPS em linguagem máquina hexadecimal do segmento L1, indicando o
endereço de cada instrução e o conteúdo de cada campo separadamente.
Loop: sub $t4, $t3, $t2
add $t4, $t4, $t4
add $t4, $t4, $t4
add $t8, $t0, $t4
add $t5, $t2, $t2
add $t5, $t5, $t5
9
ARQUITECTURA DE COMPUTADORES
lw $t7, 0($t8)
add $t6, $t1, $t5
sw $t7, 0($t6)
beq $t2, $t3, Exit
addi $t2, $t2, 1
j Loop
Exit: jr $ra
L1:
Problema 28: [Frequência de 7/12/01] Escreva um procedimento em linguagem MIPS
denominado contaletras. O procedimento deve ter um único argumento que é o ponteiro de
um string terminado por NULL, colocado no registo $a0. O procedimento deve localizar o
primeiro caracter d no string e deve retornar o seu endereço no registo $v0. Se o string não
tem nenhum caracter d deve retornar o endereço do caracter NULL no fim do string. Por
exemplo se o argumenta aponta para o string “modulo” então o valor retornado deve apontar
para o endereço de memória do 3º caracter.
Problema 29: [Frequência de 7/12/01] Escreva um programa em linguagem MIPS que
determine qual o maior valor contido num array de n=7 elementos. O endereço de base do
array está associado ao label numeros bem como o total de números está associado ao label n,
são definidos por directivas para o segmento de dados. O resultado deve ser impresso na
consola. Use a seguinte sequência de valores para teste: 36, 29, 27, 15, 1, 62, 41.
Problema 30: [Exame de 15/1/02] Traduza as seguintes instruções em linguagem assembly
MIPS para a linguagem máquina MIPS e escreva o conteúdo de cada instrução em
hexadecimal
a)
b)
c)
d)
add $s1, $t4, $t8
addi $s5, $22, -44
lw $t5,12($s3)
jal contabits #A label contabits corresponde ao endereço (4194412)10
Problema 31: [Exame de 15/1/02] Escreva um procedimento em linguagem assembly MIPS
que determine o número de vezes que ocorre um bit 1 numa palavra de 32 bits. Implemente o
procedimento com parâmetro de entrada $a0, no qual está a palavra de 32 bits, e o resultado é
posto em $v0.
1)
Para o procedimento anterior, escreva o programa principal que proceda à leitura pela
consola dum número inteiro e que depois é guardado numa word numero, a definir no
segmento de dados, e que imprima na consola o número de ocorrências do bit 1, recebido do
procedimento em $v0.
Problema 32: [Exame de 15/1/02] Escreva um programa em linguagem assembly MIPS que
determine o máximo divisor comum (mdc) de dois números e o coloque na palavra mdc,
contida no segmento de dados do programa. Considere que os números são lidos através do
teclado no programa e guardados nos registos $s0 e $s1.
Utilize o código C a seguir, como algo ritmo para realizar o programa solicitado, em que se
coloca o valor calculado na posição de memória mdc, correspondendo a return a:
int mdc(int a, int b)
{
while(a != b) {
if (a < b) b = b – a;
10
ARQUITECTURA DE COMPUTADORES
else a = a – b;
}
return a;
}
Problema 33: [Exame de recurso de 29/1/02] Traduza o seguinte segmento em linguagem
assembly MIPS para linguagem máquina MIPS e escreva o conteúdo de cada instrução em
hexadecimal
ciclo: addi $t0, $zero, 1
add $t2, $t0, $t1
lw $s4, 0($t2)
bne $t0, $s1, ciclo
j end
NOTA: Os endereços associados a ciclo e end são 4 192 312 e 4 192 340, respectivamente
Problema 34: [Exame de recurso de 29/1/02] Escreva um programa em linguagem MIPS
que determine qual o maior valor contido num array de n=7 elementos. O endereço de base do
array está associado ao label numeros bem como o total de números está associado ao label n.
São ambos definidos por directivas para o segmento de dados. O resultado deve ser impresso
na consola. Use a seguinte sequência de valores para teste: 36, 29, 27, 15, 1, 62, 41.
Problema 35: [Exame de recurso de 29/1/02] Escreva um procedimento em linguagem
assembly MIPS que determine o número de vezes que ocorre um bit 1 numa palavra de 32
bits. Implemente o procedimento com parâmetro de entrada $a0, no qual está a palavra de 32
bits, e o resultado é posto em $v0.
1)
Para o procedimento anterior, escreva o programa principal que proceda à leitura dum
string de 4 letras pelo teclado, que depois é guardado num endereço associado à label palavra,
a definir no segmento de dados, e que imprima na consola o número de ocorrências do bit 1,
recebido do procedimento em $v0.
11
Download