Escolar Documentos
Profissional Documentos
Cultura Documentos
A prova escrita está cotada para um máximo de 20 valores. No final de cada questão é apresentada a cotação da
mesma em valores. Em todas as questões cuja resposta seja de justificação obrigatória a ausência desta implica a
anulação da resposta, ainda que a resposta esteja correta. A codificação de algumas das instruções da arquitetura
MIPS bem como parte do conjunto de instruções da arquitetura ARM encontram-se em anexo para consulta.
2. Indique, justificando, qual o tipo de arquitetura, RISC ou CISC, que exige maiores recursos
de memória de código para o mesmo programa. (1,0 Valores)
4. A maioria dos DSPs utiliza pipeline. Enumere as principais vantagens do pipeline? (1,0
Valores)
5. Numa instrução de salto condicional o que acontece às instruções que estão no pipeline no
caso do salto se concretizar? (1,0 Valores)
1
Instituto Politécnico do Cávado e do Ave Ano lectivo de 2013/2014
b) Qual das instruções que se seguem deveria ser utilizada para definir o período
do sinal de relógio? (1,0 Valores)
1. add $s1, $s2, $s3
2. lw $s1, 4($s2)
3. sw $s3, 0($s2)
4. slt $s6, $t1, $t3
5. j 4000
c) Qual o estado das linhas de controlo, com exceção das linhas de controlo da
ALU (ALUOp), na execução da instrução que se segue? (1,5 Valores)
Instrução: beq $s1, $s2, 4000
$s1 = 120; $s2 = 120
2
Instituto Politécnico do Cávado e do Ave Ano lectivo de 2013/2014
d) Quais as instruções que necessitam das unidades Sign Extend e Shift Left 2?
(1,5 Valores)
mov r0, #0
mov r8, #0
adr r2, N
(…) ldr r1, [r2]
int f = 0; mov r2, #0
int i = 0; adr r3, c
while (i < N) { adr r5, x
f = f + c[i]*x[i]; loop ldr r4, [r3, r8]
i++; ldr r6, [r5, r8]
} mul r4, r4, r6
(…) add r2, r2, r4
add r0, r0, #1
cmp r0, r1
blt loop
3
Instituto Politécnico do Cávado e do Ave Ano lectivo de 2013/2014
11. Indique os valores das variáveis em cada linha da Tabela 5, de acordo com a execução do
código C. Deve considerar o valor da variável após a execução da linha. (1,5 Valores)
struct data {
int id;
char* name;
char c;
};
int main()
{
int num = 5;
int *num_ptr;
int IDS[5] = {0, 1, 2, 3, 4};
char name[10] = {'m', 'e', 'e', 'c', '_', 't',
'e', 's', 't', '\0'};
myDataPtr = myData;
for(int i = 0; i < num; i++)
{
myDataPtr->id = IDS[i];
myDataPtr->name = name;
myDataPtr->c = name[i];
myDataPtr++;
}
int a = myData->id; a =
myDataPtr = myData;
int b = (++myDataPtr)->id; b =
char c = (myDataPtr++)->c; c =
int size = sizeof(struct data); size =
printf(myDataPtr->name); Print:
end(&myData);
return 0;
}
Tabela 5 - Código em linguagem C.
4
Instituto Politécnico do Cávado e do Ave Ano lectivo de 2013/2014
Anexos
Codificação de parte do conjunto de instruções da arquitetura MIPS (32-bit):
Instrução J-Type
Categoria Instrução Exemplo Significado
Salto incondicional jump jL Vai para L
5
Instituto Politécnico do Cávado e do Ave Ano lectivo de 2013/2014
Instruções aritméticas:
Instrução Exemplo Significado
add R2, R1, R3 R2 = R1 + R3
add
add R2, R1, #240 R2 = R1 + 240
sub R2, R1, R3 R2 = R1 – R3
subtract
sub R2, R1, #240 R2 = R1 – 240
multiply mul R3, R2, R1 R3 = R2 x R1
signed divide sdiv R4, R3, R2 R4 = R3/R2
multiply with accumulate mla R4, R3, R2, R1 R4 = R3 x R2 + R1
Instruções lógicas:
Instrução Exemplo Significado
and R9, R2, R3 R9 = R2 & R3
and
and R9, R2, #0xFF00 R9 = R2 & 0xFF00
orr R9, R2, R3 R9 = R2 | R3
or
orr R9, R2, #0xFF00 R9 = R2 | 0xFF00
eor R9, R2, R3 R9 = R2 ^ R3
exclusive or
eor R9, R2, #0xFF00 R9 = R2 ^ 0xFF00
Instruções de salto:
Instrução Exemplo Significado
branch immediate b label Vai para o endereço label
branch on less than or equal ble label if(Z == 1 || N == 1)
vai para o endereço label
branch on greater than or equal bge label if(Z == 1 || N == 0)
vai para o endereço label
branch on less than blt label if(Z == 0 && N == 1)
vai para o endereço label
branch on greater than bgt label if(Z == 0 && N == 0)
vai para o endereço label
*Nota: Z = 1 -> Resultado da operação é zero; N = 1 -> Resultado da operação é negativo.