Prova P4

Propaganda
Prova P4/PS
Disciplina: Organização de Computadores-EC
Professor: Ney Laert Vilar Calazans
Aluno:
27/junho/2014
1. [3 pontos] Dado o programa em linguagem de montagem do MIPS abaixo, gere código
objeto para as linhas 5, 6 e 7 dele. Comece computando os endereços iniciais das
instruções nestas linhas e anotando na coluna correspondente. Note que o endereço
inicial da linha 1 em hexadecimal é 0x004000E8. Cuidado com os pressupostos de
geração de código para deslocamentos em cada instrução.
Número
de Linha
1
2
3
4
5
6
7
8
9
Rótulo
then:
recur:
Instrução
lw
lw
beq
slt
bne
subu
j
subu
addiu
$t2,8($sp)
$t3,12($sp)
$t2,$t3,ret
$t4,$t3,$t2
$t4,$zero,then
$t3,$t3,$t2
recur
$t2,$t2,$t3
$sp,$sp,-16
Endereço inicial do
código objeto
Código objeto
0x004000E8
2. (3,0 pontos) Verdadeiro ou Falso. Abaixo aparecem 10 afirmativas. Marque com V as
afirmativas verdadeiras e com F as falsas. Se não souber a resposta correta, deixe em
branco, pois cada resposta correta vale 0,3 pontos, mas cada resposta incorreta
desconta 0,2 pontos do total positivo de pontos. Não é possível que a questão produza
uma nota menor do que 0 pontos.
a) ( ) O processador AT32UC3A0512 da Atmel é o mais poderoso da família de microcontroladores AVR de 32 bits. Ele possui 512 Kbytes de memória flash e 64 Kbytes de RAM, ambas
endereçadas a byte. Logo estas memórias necessitam respectivamente de barramentos de
endereços de 19 e 16 bits.
b) ( ) O modo de endereçamento relativo, conforme usado no MIPS, obtém o operando de 32 bits
(a somar com o registrador PC) acrescentando 2 bits em 0 à direita dos bits 15 a 0 da instrução
que o emprega, e agregando à esquerda 16 vezes o bit 15 da mesma instrução (extensão de
sinal).
c) ( ) As instruções do MIPS addi e addiu diferenciam-se por realizar somas com e sem sinal,
respectivamente. A primeira usa extensão de sinal e a segunda extensão de zero para gerar o
dado imediato da soma.
d) ( ) Suponha que se executa a instrução xori $t0,$t0,0xFFFF. Assuma que antes de executar
esta instrução, $t0 contém 0xAAADF003. Após executar a instrução, $t0 conterá 0xAAAD0FFC.
e) ( ) O modo de endereçamento base-deslocamento no MIPS é usado em instruções de acesso à
memória e também em instruções aritméticas.
f) ( ) O código objeto 0x18400024 corresponde a uma instrução blez que quando saltar, o faz
necessariamente para uma linha do programa posterior à linha onde há o blez.
g) ( ) A instrução lui $t1,0x5555 seguida da instrução ori $t1, $t1,0xAAAA, seguida da instrução
xori $t1,$t1, 0xFFFF termina por deixar em $t1 uma palavra de 32 bits composta por 16 bits em
0 e 16 bits em 1, bits estes que se alternam: todo 0 é seguido e precedido por um 1 e vice-versa.
h) ( ) A memória do MIPS é endereçada a byte, e é possível escrever nela apenas dados de 8 ou
16 ou 32 bits usando uma única instrução do processador.
i) ( ) O texto de um artigo científico de 6 páginas é composto por 31.985 caracteres ASCII. No
MIPS, este texto ocuparia 7.997 palavras em memória.
j) ( ) Se o código objeto 0x0C10003A estiver armazenado em memória a partir do endereço
0x00400058, ele corresponde a um salto para subrotina e esta inicia necessariamente em uma
posição de memória anterior à posição onde se encontra a instrução de salto.
3. (4,0 pontos) Considere a organização do bloco de dados multiciclo abaixo, que
acomoda a execução de um subconjunto da arquitetura do conjunto de instruções do
processador MIPS. Em seguida, responda às questões que seguem a figura.
M1
result
npc
rst
D
Q
M2
uins.i
RNPC
ck
ce
npc
uins.CY1
dtpc
D
Q
rpc
ck
ce
uins.wpc
address data
Memória
de
Instruções
D
Q
RIR
ck
M3
20..16
M4
AdRs
R1
20..16
15..11
RD
AdRt
REGS
R2
uins.i
rst ck
uins.CY1
D
RS
ck
R2
D
s-extend*4
25..0
“0000” &
IR[25:0] & “00”
M6
op1
M5
M7
M7
uins.CY2
uins.i
rst
D
Q
RALU
ck
ce
uins.walu
result
RB
uins.ce
uins.rw
address
data
Memória
de Dados
data M8
uins.i
x“000000” &
data[7:0]
RB
rst
Q
RMDR
ck
ce
M9
uins.i
uins.i
uins.ce uins.bw
uins.rw
C
o
m
p
D
uins.wmdr
uins.i
IMED
D
A
L
U
Q
RA
cte_im
s-extend
15..0
RA
ce
0-extend
15..0
Q
uins.i
ce
uins.CY2
op2
rst
RB
RT
ck
wreg
uins.wreg
15..0
rst
AdRd
“11111”
ce
R1
outalu
20..16
adD
rst
ir=IR_OUT
rst
instruction
pc=i_address
RIN
adS
uins.i
25..21
MDR
incpc
mdr_int
4
+
RALU=d_address
uins.i
RALU
salta
Q
RIM
ck
uins.i
ce
uins.CY2
a) (1,0 pontos) Marcar no desenho acima e/ou descrever todos os caminhos do bloco de dados
efetivamente usados pela instrução JALR Rd, Rs. Isto significa marcar e/ou descrever em
texto todos os caminhos por onde passa informação útil relevante à execução da instrução,
ou seja, os dados e/ou endereços que esta realmente necessita manipular.
b) (1,0 pontos) Gere o código objeto da instrução JALR $gp, $s0.
c) (1,0 pontos) Diga qual operação é executada pela unidade lógica-aritmética (ALU) no
terceiro ciclo de relógio de uma instrução JALR Rd, Rs, justificando sua resposta.
d) (1,0 pontos) Para cada um dos sinais de controle diferente de uins.i, diga se e em que ciclo
da instrução JALR $gp, $s0 ele é ativado e, caso se aplique, diga qual o seu valor em
binário.
Prova P4/PS
Disciplina: Organização de Computadores-EC
Professor: Ney Laert Vilar Calazans
Aluno:
27/junho/2014
Gabarito
1. [3 pontos] Dado o programa em linguagem de montagem do MIPS abaixo, gere código
objeto para as linhas 5, 6 e 7 dele. Comece computando os endereços iniciais das
instruções nestas linhas e anotando na coluna correspondente. Note que o endereço
inicial da linha 1 em hexadecimal é 0x004000E8. Cuidado com os pressupostos de
geração de código para deslocamentos em cada instrução.
Número
de Linha
1
2
3
4
5
6
7
8
9
Rótulo
then:
recur:
Endereço inicial do
código objeto
Instrução
lw
lw
beq
slt
bne
subu
j
subu
addiu
$t2,8($sp)
$t3,12($sp)
$t2,$t3,ret
$t4,$t3,$t2
$t4,$zero,then
$t3,$t3,$t2
recur
$t2,$t2,$t3
$sp,$sp,-16
0x004000E8
0x004000EC
0x004000F0
0x004000F4
0x004000F8
0x004000FC
0x00400100
0x00400104
0x00400108
Código objeto
0x15800002
0x016A5823
0x08100042
Solução da Questão 1
a) (1,0 pontos) Linha 5: bne
$t4,$zero,then.
bne
5
Número de bits/campo: 6
O formato da instrução bne é:
rs rt label
rs rt offset
5 5
16
O código objeto é então: 000101 (5 em seis bits) concatenado com o endereço do Rs no banco
($t4=12 ou 01100 em binário), concatenado com o endereço do Rt no banco, 00000,
concatenado com o offset. Segundo a definição da arquitetura, este é o valor de 16 bits que
corresponde à distância, em instruções, da linha abaixo do bne até a linha do rótulo ou seja, 2 ou
em binário 0000 0000 0000 0010. Juntando os 32 bits (0001 0101 1000 0000 0000 0000 0000
0010) e traduzindo-os de 4 em 4 em valores hexadecimais, obtém-se 0x15800002, no endereço
da memória de instruções 0x004000F8.
b) (1,0 pontos) Linha 6: subu
$t3,$t3,$t2.
O formato da instrução subu é:
subu rd rs rt
0
rs rt rd 0 0x23
Número de bits/campo:
6
5 5 5 5 6
O código objeto é então: 000000 concatenado com 01011 (Rs=$t3=$11 ou 01011 em 5 bits),
concatenado com 01010 (Rt=$t2=$10 ou 01010 em 5 bits), concatenado com 01011 (Rd=$t3=$11
ou 01011 em 5 bits) concatenado com 00000100011. Juntando os 32 bits (0000 0001 0110 1010
0101 1000 0010 0011) e traduzindo-os de 4 em 4 em valores hexadecimais, obtém-se 0x016A5823,
no endereço da memória de instruções 0x004000FC.
c) (1,0 pontos) Linha 7: j recur. O formato da instrução j é:
j label
2 address
Número de bits/campo: 6
26
O código objeto é então: 000010 (2 em seis bits) concatenado com o pseudo-endereço. Para obter
este, parte-se do endereço de memória associado ao rótulo recur (0x00400108), e extrai-se os
quatro bits mais significativos e os dois bits menos significativos. O que sobra são os 26 bits do que
constituem o pseudo-endereço. Juntando estes 32 bits (0000 1000 0001 0000 0000 0000 0100
0010) e traduzindo-os de 4 em 4 em valores hexadecimais, obtém-se 0x08100042, no endereço da
memória de instruções 0x00400100.
Fim da Solução da Questão 1
2. (3,0 pontos) Verdadeiro ou Falso. Abaixo aparecem 10 afirmativas. Marque com V as
afirmativas verdadeiras e com F as falsas. Se não souber a resposta correta, deixe em
branco, pois cada resposta correta vale 0,3 pontos, mas cada resposta incorreta
desconta 0,2 pontos do total positivo de pontos. Não é possível que a questão produza
uma nota menor do que 0 pontos.
a) (V) O processador AT32UC3A0512 da Atmel é o mais poderoso da família de microcontroladores AVR de 32 bits. Ele possui 512 Kbytes de memória flash e 64 Kbytes de RAM, ambas
endereçadas a byte. Logo estas memórias necessitam respectivamente de barramentos de
endereços de 19 e 16 bits.
b) (F) O modo de endereçamento relativo, conforme usado no MIPS, obtém o operando de 32 bits
(a somar com o registrador PC) acrescentando 2 bits em 0 à direita dos bits 15 a 0 da instrução
que o emprega, e agregando à esquerda 16 vezes o bit 15 da mesma instrução (extensão de
sinal).
c) (F) As instruções do MIPS addi e addiu diferenciam-se por realizar somas com e sem sinal,
respectivamente. A primeira usa extensão de sinal e a segunda extensão de zero para gerar o
dado imediato da soma.
d) (V) Suponha que se executa a instrução xori $t0,$t0,0xFFFF. Assuma que antes de executar
esta instrução, $t0 contém 0xAAADF003. Após executar a instrução, $t0 conterá 0xAAAD0FFC.
e) (F) O modo de endereçamento base-deslocamento no MIPS é usado em instruções de acesso à
memória e também em instruções aritméticas.
f) (V) O código objeto 0x18400024 corresponde a uma instrução blez que quando saltar, o faz
necessariamente para uma linha do programa posterior à linha onde há o blez.
g) (V) A instrução lui $t1,0x5555 seguida da instrução ori $t1, $t1,0xAAAA, seguida da instrução
xori $t1,$t1, 0xFFFF termina por deixar em $t1 uma palavra de 32 bits composta por 16 bits em
0 e 16 bits em 1, bits estes que se alternam: todo 0 é seguido e precedido por um 1 e vice-versa.
h) (V) A memória do MIPS é endereçada a byte, e é possível escrever nela apenas dados de 8 ou
16 ou 32 bits usando uma única instrução do processador.
i) (V) O texto de um artigo científico de 6 páginas é composto por 31.985 caracteres ASCII. No
MIPS, este texto ocuparia 7.997 palavras em memória.
j) (F) Se o código objeto 0x0C10003A estiver armazenado em memória a partir do endereço
0x00400058, ele corresponde a um salto para subrotina e esta inicia necessariamente em uma
posição de memória anterior à posição onde se encontra a instrução de salto.
Solução da Questão 2
a) (V) 512Kbytes e endereçamento a byte implicam a necessidade de log2 (512K) linhas de
endereço. Como 512=29, e 1K=210, o logaritmo de 512K é 19. O mesmo raciocínio conduz
a computar log2 (64K)=16. Logo a afirmativa é VERDADEIRA.
b) (F) Ao aplicar o procedimento descrito neste item produz-se um valor de 34 bits e não 32
(bits 15-0 + 00 + 16 bits de extensão). Logo a afirmativa só pode ser FALSA.
c) (F) Há dois erros nesta questão. Primeiro, as instruções não fazem somas de forma
diferenciada, pois a representação em complemento de 2 garante que soma com e sem
sinal não operam de forma distinta. O segundo erro é que ambas usam extensão de sinal
para gerar a constante de 32 bits. Logo a afirmativa é FALSA.
d) (V) A instrução xori usa extensão de 0. Logo o valor a ser operado na ULA com o conteúdo
do registrador $t0 é 0x0000FFFF. Ora, dada a natureza da operação lógica XOR, este
valor vai manter os 16 bits mais significativos de $t0 inalterados (“xoreados” com 0) e vai
inverter os 16 bits menos significativos de $t0 (“xoreados” com 1), o que produzirá em $t0
o novo valor, que será: 0xAAADF00C, pois 0x0 invertido dá 0xF, 0xF invertido dá 0x0 e
0x3 invertido dá 0xC. Logo a afirmativa é VERDADEIRA.
e) (F) O modo base deslocamento somente é usado para instruções de acesso à memória.
Logo a afirmativa é FALSA.
f) (V) Os seis primeiros bits de 0x18400024 são 000110 ou 6 em decimal, o que segundo a
Tabela A.10.2 do Apêndice A identifica a instrução blez. Logo esta parte do item está certa.
Esta instrução usa modo de endereçamento relativo e o endereço de salto será o resultado
de adicionar o PC ao offset da instrução (bits 15-0 do código objeto) com sinal estendido e
multiplicado por 4, para gerar um valor constante de 32 bits. Como os bits 15-0 da
instrução são 0x0024, a extensão produzirá 0x00000024, que multiplicado por 4 fica
0x00000090. Como este valor é positivo, somado aos valores normais do PC (em torno de
0x00400000) certamente gera um endereço de memória maior que aquele contido no PC
ao iniciar a execução da instrução. Logo o salto é para a frente, para linha do programa
posterior à linha da instrução blez. Logo a afirmativa é VERDADEIRA.
g) (V) lui gera em $t1 o valor 0x55550000. A ori deixa em $t1 0x5555AAAA. Finalmente o xori
inverte os 16 bits menos significativos de $t1, gerando 0x55555555, pois o inverso de 0xA
(1010 em binário) é 0x5 (0101 em binário). O padrão de 8 valores 0x5 corresponde ao
valor binário de 32 bits 0101 0101 0101 0101 0101 0101 0101 0101. Logo a afirmativa é
VERDADEIRA.
h) (V) As instruções sb, sh e sw permitem escrever 1 byte, 2 bytes e 4 bytes na memória,
respectivamente. Logo a afirmativa é VERDADEIRA.
i) (V) Cada caractere ASCII ocupa exatamente 1 byte e no MIPS cada 4 bytes correspondem a
uma palavra. Tomando o valor múltiplo de 4 mais próximo do tamanho do arquivo, têm-se
31.988, que dividido por 4 fornece 7.997. Logo a afirmativa é VERDADEIRA.
j) (F) Os seis primeiros bits de 0x0C10003A são 000011 ou 3 em decimal, o que segundo a
Tabela A.10.2 do Apêndice A identifica a instrução jal. Logo esta parte da afirmativa é
correta, pois trata-se de um salto para subrotina. O endereço onde a subrotina inicia é
obtido tomando-se os 26 bits menos significativos do código objeto acrescentando-se dois
bits em 0 à direita destes e colocando à esquerda deste os quatro bits mais significativos
do valor do PC no momento da execução da instrução. O valor do PC no momento da
execução será 0x00400058 + 4, ou seja, 0x0040005C. Assim o endereço da subrotina
para onde se deve saltar é 0000 & 00 0001 0000 0000 0000 0011 1010 & 00, ou seja
0x004000E8, que é posterior ao jal. Logo a afirmativa é FALSA.
Fim da Solução da Questão 2
3. (4,0 pontos) Considere a organização do bloco de dados multiciclo abaixo, que
acomoda a execução de um subconjunto da arquitetura do conjunto de instruções do
processador MIPS. Em seguida, responda às questões que seguem a figura.
M1
result
npc
D
Q
M2
uins.i
RNPC
ck
ce
npc
uins.CY1
dtpc
D
PC
ck
Q
ce
uins.wpc
address data
Memória
de
Instruções
D
IR
ck
Q
M3
20..16
d
M4
AdRs
R1
20..16
15..11
RD
AdRt
REGS
R2
uins.i
rst ck
uins.CY1
D
RS
ck
R2
D
s-extend*4
25..0
“0000 ” &
IR[25:0] & “00”
op1
M5
M7
M7
uins.CY2
uins.i
rst
D
Q
RALU
ck
ce
uins.walu
result
RB
uins.ce
uins.rw
address
data
Memória
de Dados
data M8
uins.i
x“0000 00” &
data[7:0]
RB
rst
Q
RMDR
ck
ce
M9
uins.i
uins.i
uins.ce uins.bw
uins.rw
C
o
m
p
D
uins.wmdr
uins.i
IMED
D
D
A
L
U
Q
RA
cte_im
s-extend
15..0
M6
ce
0-extend
15..0
Q
RA
uins.i
ce
uins.CY2
op2
rst
RB
RT
ck
wreg
uins.wreg
15..0
rst
AdRd
“11111 ”
ce
R1
outalu
20..16
adD
rst
ir=IR_OUT
rst
instruction
pc=i_address
RIN
adS
uins.i
25..21
MDR
+
rst
mdr_int
4
incpc
RALU=d_address
uins.i
RALU
salta
Q
IMED
ck
uins.i
ce
uins.CY2
a) (1,0 pontos) Marcar no desenho acima e/ou descrever todos os caminhos do bloco de dados
efetivamente usados pela instrução JALR Rd, Rs. Isto significa marcar e/ou descrever em
texto todos os caminhos por onde passa informação útil relevante à execução da instrução,
ou seja, os dados e/ou endereços que esta realmente necessita manipular.
b) (1,0 pontos) Gere o código objeto da instrução JALR $gp, $s0.
c) (1,0 pontos) Diga qual operação é executada pela unidade lógica-aritmética (ALU) no
terceiro ciclo de relógio de uma instrução JALR Rd, Rs, justificando sua resposta.
d) (1,0 pontos) Para cada um dos sinais de controle diferente de uins.i, diga se e em que ciclo
da instrução JALR $gp, $s0 ele é ativado e, caso se aplique, diga qual o seu valor em
binário.
Solução da Questão 3
a) (1,0 pontos). Ver desenho.
b) (1,0 pontos). JALR $gp, $s0 – Formato R: seis campos de 6, 5, 5, 5, 5, 5 e 6 bits, com
valores respectivos (em hexa): 0 10 0 1C 0 9. Isto convertido em binário dá: 000000 10000
00000 11100 00000 001001. Em hexadecimal o código objeto fica: 0x0200E009.
c) (1,0 pontos). A operação executada na ALU é passar o que está na entrada op1 para a
saída da ALU outalu. Este é o valor do registrador Rs, que contém o endereço a ser
carregado em RALU, e que posteriormente (no próximo ciclo) será transferido para o PC (o
endereço de início da subrotina para onde JALR salta).
d) (1,0 pontos). Observando os sinais da palavra de microinstrução produzida no Bloco de
Controle, nota-se que existem 11 sinais além do sinal uins.i. Os sinais, se eles são ou não
ativados, e o valor binário deles quando ativados são:
1.
uins.CY1
- Ativado (em ‘1’) no primeiro ciclo
2.
uins.CY2
- Ativado (em ‘1’) no segundo ciclo
3.
uins.walu
- Ativado (em ‘1’) no terceiro ciclo
4.
uins.wmdr
- Não ativado (fica em ‘0’) ao longo de toda a instrução
5.
uins.wpc
- Ativado (em ‘1’) no quarto ciclo
6.
uins.wreg
- Ativado (em ‘1’) no quarto ciclo
7.
uins.whilo
- Não ativado (fica em ‘0’) ao longo de toda a instrução
8.
uins.ce
- Não ativado (fica em ‘0’) ao longo de toda a instrução
9.
uins.rw
- Irrelevante, mas não ativado (fica em ‘1’) ao longo de toda a instrução
10.
uins.bw
- Irrelevante, mas não ativado (fica em ‘1’) ao longo de toda a instrução
11.
uins.rst_md - Não ativado (fica em ‘0’) ao longo de toda a instrução
Fim da Solução da Questão 3
Download