Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Exercícios Capítulo 2 - Patterson 4ª Edição 
1. Os seguintes problemas tratam da tradução de C para assembler RISC-V. Supor que as variáveis g, h, 
i, e j estão dadas e podem ser consideradas inteiros de 32 bits como declarado no programa C. 
a. f = g - h; 
b. f = g + (h - 5); 
1.1 Para os comandos C acima, qual é o código correspondente do RISC-V? Use um número mínimo 
de instruções do assembler do RISC-V. 
1.2 Para os comandos C acima, quantas instruções do RISC-V são necessárias para implementar o 
código C ? 
2. Os problemas seguintes tratam a tradução de RISC-V para C. Supor que as variáveis f, g e h são 
dadas e poderiam ser consideradas inteiros de 32 bits como declarado no programa C. 
a. addi f, f, 4 
b. add f, g, h 
add f, f, i 
2.1 Para as instruções RISC-V acima, qual é o código correspondente em C? 
2.2 Se as variáveis f, g e h têm os valores 1, 2 e 3, respectivamente, qual é o valor final de f? 
3. Os seguintes problemas tratam da tradução de C para assembler RISC-V. Supor que as variáveis g, h, 
i, e j estão dadas e podem ser consideradas inteiros de 32 bits como declarado no programa C. 
a. f = f + g + h + i + j + 2; 
b. f = g - (f + 5); 
3.1 Para os comandos C acima, qual é o código correspondente do RISC-V? Use um número mínimo 
de instruções do assembler do RISC-V. 
3.2 Para os comandos C acima, quantas instruções do RISC-V são necessárias para implementar o 
código C ? 
3.3 Se as variáveis f, g, h, i e j têm os valores 1, 2, 3, 4 e 5, respectivamente, qual é o valor final de f? 
4. Os seguintes problemas tratam da tradução de C para assembler RISC-V. Supor que as variáveis g, h, 
i, e j estão associadas aos registradores s0, s1, s2, s3 e s4, respectivamente. Assuma que os endereços 
base dos arranjos A e B estão nos registradores s6 e s7. 
a. f = - g + h - A[4]; 
b. B[8] = A[i - j]; 
4.1 Para os comandos C acima, qual é o código correspondente do RISC-V? Use um número mínimo 
de instruções do assembler do RISC-V. 
4.2 Para os comandos C acima, quantas instruções do RISC-V são necessárias para implementar o 
código C ? 
4.3 Para os comandos C acima, quantos registradores diferentes do RISC-V são necessários para 
implementar o código C ? 
5. Os problemas seguintes tratam a tradução de RISC-V para C. Supor que as variáveis f, g, h, i e j 
estão associadas aos registradores s0, s1, s2, s3 e s4, respectivamente. Assuma que os endereços base 
dos arranjos A e B estão nos registradores s6 e s7, respectivamente. 
a. slli s2, s4, 1 
add s0, s2, s3 
add s0, s0, s1 
b. add t0, s6, s0 
add t1, s7, s1 
lw s0, 0(t0) 
addi t2, t0, 4 
lw t0, 0(t2) 
add t0, t0, s0 
sw t0, 0(t1) 
5.1 Para as instruções RISC-V acima, qual é o código correspondente em C? 
5.2 Para as instruções RISC-V acima, reescreva o código assembler para minimizar o número de 
instruções (se possível) necessárias para executar a mesma função. 
5.3 Quantos registradores são necessários para executar o código RISC-V acima ? Se você reescrevesse 
o código, qual seria o menor número de registradores possível ? 
6. Nos seguintes problemas, nós estaremos investigando operações de memória no contexto de um 
processador RISC-V. A tabela abaixo mostra os valores de uma disposição armazenada na memória. 
a. Endereço Dados 
 12 1 
 8 6 
 4 4 
 0 2 
b. Endereço Dados 
 16 1 
 12 2 
 8 3 
 4 4 
 0 5 
6.1 Para as posições de memória na tabela acima, escreva o código de C para ordenar os dados do 
menor ao maior, colocando o mais baixo valor na menor posição de memória mostrada acima. Supor 
que os dados mostrados representam um arranjo de tipo inteiro. Assuma que os endereços são de byte e 
os dados consistem de 4 bytes cada (usar uma sequência de lw's e sw's para colocar os dados na ordem 
correta) 
6.2 Para classificar o arranjo acima, quantas instruções são exigidas para o código do RISC-V? Se não 
é permitido você usar o campo imediato em lw e sw, quantas instruções dos RISC-V você precisa? 
7. Os seguintes problemas exploram a tradução de números hexadecimais a outros formatos de número. 
a. 0x12345678 
b. 0xbeadf00d 
7.1 Traduza os números hexadecimais acima em decimais. 
7.2 Mostre como os dados seriam ordenados nos formatos litte-endian e big-endian. Assuma que os 
dados são armazenados a partir do endereço 0. 
8. Para o código abaixo, supor que os registradores s0, s1, s2, s3, contenhamos valores 10, 20, 30, e 40, 
respectivamente. Supor também que o registo s6 contem o valor 256, e que a memória contem os 
seguintes valores: 
Endereço Dado 
256 100 
260 200 
264 300 
Código: 
a. sub s0, s0, s1 
sub s0, s0, s3 
add s0, s0, s1 
 
b. addi t0, s6, 4 
add t1, s6, zero 
sw t1, 0(t0) 
lw t0, 0(t0) 
add s0, t1, t0 
8.1 Encontre o valor de s0 no final da execução do código assembler. 
8.2 Para cada instrução RISC-V, mostre o valor dos campos op, rs, e rt. Para instruções I-type, mostre 
o valor do campo imediato Imm, e para instruções R-Type, mostre o valor do campo rd. 
9. Os seguintes problemas exploram conversões de números binários com sinal e sem sinal para 
números decimais. 
a. 1010 1101 0001 0000 0000 0000 0000 0010 
b. 1111 1111 1111 1111 1011 0011 0101 0011 
Para os números binários acima, realize as conversões para: 
• inteiro em complemento de 2 
• inteiro sem sinal 
• hexadecimal 
10. Os seguintes problemas tratam a extensão de sinal e overflow. Os registos s0 e s1 tem os valores 
segundo as indicações da tabela abaixo. Você será solicitado a executar uma operação dos RISC-V 
nestes registos e mostrar o resultado. 
a. s0 = 0x80000000, s1 = 0xD0000000 
b. s0 = 0x00000001, s1 = 0xFFFFFFFF 
10.1 Para os conteúdos dos registradores s0 e s1 como especificado acima, qual é o valor de t0 para o 
seguinte código do assembler: 
 add t0, s0, s1 
O resultado é o desejado ou houve overflow ? 
10.2 Para os conteúdos dos registos s0 e s1 como especificado acima, qual é o valor de t0 para o 
seguinte código: 
 sub t0, s0, s1 
É o resultado em t0 o resultado desejado, ou houve overflow? 
10.3 Para os conteúdos dos registradores s0 e s1 como especificado acima, qual é o valor de t0 para o 
seguinte código do assembler: 
 add t0, s0, s1 
 add t0, t0, s0 
Ocorreu overflow ? 
11. Nos seguintes problemas, a tabela dos dados contem bits que representam o opcode de uma 
instrução. Você será pedido para traduzir as entradas no código assembler e determinar qual o formato 
da instrução RISC-V os bits representam. 
 
11.1 Para as entradas binárias acima, que instrução representam? 
11.2 Que tipo (I-type, R-type) de formato de instrução as entradas binárias acima representam? 
11.3 Se as entradas binárias acima fossem bits de dados, que número hexadecimal representariam? 
12. Nos problemas a seguir, a tabela de dados contém várias modificações que podem ser feitas na 
arquitetura do conjunto de instruções RISC-V. Você investigará o impacto dessas alterações no 
formato de instrução da arquitetura RISC-V. 
a. 128 registradores 
b. Número de instruções quatro vezes maior 
12.1 Se o conjunto de instruções do processador dos RISC-V é modificado, o formato de instrução 
deve igualmente ser mudado. Para cada um das mudanças sugeridas acima, mostre o tamanho dos 
campos de instrução do formato R-type. Qual o número total de bits para cada instrução ? 
12.2 Se o conjunto de instruções do processador dos RISC-V é modificado, o formato de instrução 
deve igualmente ser mudado. Para cada um das mudanças sugeridas acima, mostre o tamanho dos 
campos de instrução do formato I-type. Qual o número total de bits para cada instrução ? 
12.3 Por que a mudança sugerida na tabela acima poderia diminuir o tamanho de um programa 
assembler do RISC-V? Por que podia a mudança sugerida na tabela acima aumentar o tamanho de um 
programa assembler do RISC-V? 
13. Para este exercício, você explorará o alcance de instruções de salto nos RISC-V. Para os seguintes 
problemas, use os dados hexadecimais na tabela abaixo. 
a. 0x00001000b. 0xFFFFFF00 
13.1 Se o PC está no endereço 0x00000000, quantos branch's (nenhuma instrução de jump) você 
precisa para chegar nos endereços acima? 
13.2 Se o PC está no endereço 0x00000000, quantas instruções de jump (nenhuma instrução de branch 
ou jr) estão exigidas para obter os endereços acima ? 
14. Neste exercício, você explorará constantes de 32 bits no RISC-V. Para os problemas abaixo, você 
estará usando os dados binários na tabela abaixo. 
 
14.1 Escreva o código dos RISC-V que cria as constantes de 32 bits listadas acima e as armazenam no 
registrador t1. 
14.2 Se o valor atual do PC é 0x00000000, pode você usar uma única instrução de salto para colocar no 
PC os endereços indicados na tabela acima? 
14.3 Se o valor atual do PC é 0x00000600, pode você usar uma única instrução de branch para obter o 
endereço do PC segundo as indicações da tabela acima? 
15 Escreva o algoritmo C abaixo em assembler do RISC-V. Passe o parâmetro para a função através do 
registrador a0 e retorne o valor no registrador a0. Assuma que a função só possa usar registradores 
salvos. Assuma que a pilha está vazia e que o stack pointer começam nos endereços 0x7FFF FFFC. 
Assuma as convenções de chamada de rotinas apresentadas em aula: 
Preservados Não preservados 
Registradores s0 a s11 Registradores temporários: t0 a t6 
Stack pointer sp Argumentos: a0 a a7 
Return address ra Pilha abaixo do stack pointer 
Pilha acima do stack pointer 
Frame Pointer (fp) e Global Pointer (gp) se utilizados 
 
 
 
 
 
 
 
main() { 
 leaf_function(1); 
} 
 
int leaf_function (int f) { 
 int result; 
 
 result = f + 1; 
 if (f > 5) 
 return result; 
 leaf_function(result); 
} 
 
Mostre o conteúdo da pilha a cada chamada da função.

Mais conteúdos dessa disciplina