Você está na página 1de 9

Exercícios resolvidos (aula de 4 de Maio)

1. Um microprocessador gera endereços de memória de 14 bits. Desenhe um mapa


de memória dos seus endereços de memória fronteira especificados em
hexadecimal. Uma ROM de 4 Ké localizada no espaço de memória de endereços
mais baixos. Uma RAM de 2K é localizada nos espaços de memória mais altos.
Repita considerando agora endereços de 16 bits e 20 bits e 32 bits.

Resolução:

Se o microprocessador gera endereços de memória de 14 bits, significa que possui 14


linhas para efectuar o endereçamento das posições de memória. O intervalo de
endereçamento é de 0 até 16K posições ou seja 3FFFh.

Para:

16 bits: 0.. 64K, FFFFh


20 bits: 0..1M, FFFFFh
32 bits: 0..4G, FFFFFFFFh

FFFFFFFF
FFFFF 2k FFFFF800
FFFF 2k FF800
3FFF 2k F800
2k 3800

0FFF 0FFF 0FFF 0FFF


4k 0000 4k 0000 4k 0000 4k 0000

-1-
2. Para o seguinte código comente as instruções e identifique o que fazem
escrevendo o seu equivalente em C:
add $t0, $zero, $zero
loop: beq $a1, $zero, finish
add $t0, $t0, $a0
sub $a1, $a1, 1
j loop
finish: addi $t0, $t0, 100
add $v0, $t0, $zero

Resolução:

add $t0, $zero, $zero # coloca $t0 a zero


loop: beq $a1, $zero, finish # enquanto $a1 não for zero
add $t0, $t0, $a0 # $t0=$t0+$a0
sub $a1, $a1, 1 # subtrai 1 de $a1
j loop # salta para loop
finish: addi $t0, $t0, 100 # soma 100 a $t0
add $v0, $t0, $zero # guarda resultado em $v0

Entradas: $ao e $a1


Operação: Multiplica $a0 por $a1 (soma $a0 $a1 vezes)
Saídas: em $v0 o resultado da multiplicação $a0 por $a1

Considerando a atribuição de variáveis:


$a0 a a0, $a1 a a1 e $v0 a v

Em C temos:
v=a0*a1

-2-
3. Depois da execução do seguinte código, qual o valor de $s0 e $s1 em decimal?
(lb significa load byte neste caso apenas lê um byte de um conteúdo de
memória). Considere números com sinal:

lb $s0, 100 ($zero) # conteúdo 100 = 0x0f


lb $s1, 200 ($zero) # conteúdo 200 = 0xff

Resolução:

Depois da execução das instruções fica em:

$s0=0F

$s1=FF

Como são números com sinal:

0F=0000 1111 Æ Numero positivo +15

FF=1111 1111 Æ É um numero negativo. Qual? -1

-3-
4. Para cada instrução do programa abaixo identifique os formatos de codificação e
os modos de endereçamento.

add $t0, $zero, $zero


beq $a1, $zero, finish
lw $t0, 100( $a0)

Resolução:

No MIPS existem 3 formatos para a codificação em linguagem máquina das


instruções. O formato R, I e J

No Mips existem 5 modos de endereçamento, que são: Por Registo, Base ou


deslocamento de endereço, imediato, relativo ao PC e pseudo endereçamento.

add $t0, $zero, $zero

formato: R
endereçamento: por registo, pois os operandos são registos

beq $a1, $zero, finish

formato: I
endereçamento: Relativo ao PC, pois o operando é especificado pela
soma de um registo com o PC, cujo endereço corresponde ao
especificado por finish

lw $t0, 100( $a0)

formato: I
endereçamento: Relativo à Base(registo) , pois o operando é especificado
pela soma de um registo com uma constante, neste caso $a0+100

-4-
5. Qual o intervalo de endereços para um salto condicional no MIPS?

Resolução:

Uma instrução de salto condicional significa que o salto só se toma caso uma expressão
(de comparação) seja verdadeira. A não tomada da salto significa que a execução do
programa continua na próxima instrução (PC+4). A tomada do salto significa que a
próxima instrução a ser executada está localizada em PC+4+deslocamento, em que o
valor do deslocamento é o um número com sinal de 16 bits. Um valor negativo do
deslocamento representa salto no sentido decrescente dos endereços e um valor positivo
representa um salto no sentido crescente dos endereços da memória de programa.

Para o cálculo dos endereços é preciso saber qual o espaço para representar esse
valor no formato da instrução. Neste caso esse espaço é de 16 bits, assim com uma
representação de números com sinal em complementos de 2, temos um intervalo entre os
valores:

1000 0000 0000 0000 -32 768, que corresponde ao maior numero negativo

0111 1111 1111 1111 +32 767, que corresponde ao maior numero positivo

O intervalo de salto será:

6. [-32 768 + PC +4, +32 767 +PC +4]

-5-
7. A execução de um programa numa determinada máquina só pode ser efectuada
se esse programa se apresentar ao microprocessador dessa máquina na sua
linguagem nativa. Esclareça os diferentes passos desde a escrita do código fonte
até á sua execução pela máquina, considere a linguagem C. Compare com escrita
e execução na plataforma .NET

Resolução:

Procedimento tradicional utilizando compilador de C, escreve-se um programa em


código fonte utilizando um editor de texto. Efectua a compilação que gera instruções
assembly para o microprocessador da máquina correspondente às instruções do
código fonte. Estas instruções são convertidas para código máquina e ligadas a
outras rotinas de outros módulos (caso existam) ou a rotinas de livrarias que estão
incluídas no código fonte. Obtêm-se no final um programa para ser executado pelo
processador, cujo conteúdo são instruções máquinas para serem executadas pelo
processador. A execução do programa é efectuada depois do carregamento do
programa para a memória pelo sistema operativo da máquina.

No caso da plataforma .NET o funcionamento é diferente, aqui o código fonte até


pode ser o mesmo do anterior mas a sua compilação gera um assembly especifico
para a plataforma .Net, desta forma a plataforma .Net pode ser visto com um
processador virtual. Na execução o código do programa é compilado em tempo
real para o código do processador da máquina pelo compilador JIT (Just In Time)

-6-
8. Para o seguinte programa explique a operação que é efectuada em cada estado
do pipeline.

lw r1, 0(r0)
lw r2, 1(r0)
add r3, r1, r2
beq r1, r2, salto
j rotina
sw 2(r0), r3

Resolução:

Estamos a considerar um pipeline de 5 estados:


(1) Busca da Instrução, (2) descodificação, (3) Execução, (4) Memória, (5) Escrita de
resultados.

Para a resolução do exercício apenas interessa a classificação das instruções em grupos:

Lw – Load: estados 1 e 2 é efectuada a busca e descodificação da instrução, no estado


3 é calculado o endereço da posição de memória, no estado 4 é lido o conteúdo da
posição de memória calculado em 3 e no estado 5 é escrito o seu conteúdo no registo.

Sw – Store: estados 1 e 2 é efectuado a busca e descodificação da instrução, no 3


efectua o cálculo do endereço da posição de memória, no estado 4 é escrito o valor do
registo na memória. O estado 5 não é usado.

Add – operações na ALU: estados 1 e 2 para a busca e descodificação da instrução, no


3 executa a instrução, ou seja efectua a soma e no 5 escreve resultado. (Não é usado o
estado 4)

Beq – Saltos condicionais: estados 1 e 2 para a busca e descodificação da instrução e 3


para verificar se a expressão de teste para o salto é verdadeira? Estados 4 e 5 não
usados.

J – Saltos incondicionais: estados 1 e 2 busca e descodificação da instrução, suficientes


para actualizar o PC com o novo valor. Estados 3, 4 e 5 não usados.

-7-
9. Considere o datapath da figura de ciclo simples

0
M
Add u
x
ALU 1
4 Add
result
Shift
RegDst left 2
Branch
MemRead
Instruction [31–26] MemtoReg
Control
ALUOp
MemWrite
ALUSrc
RegWrite

Instruction [25–21] Read


Read register 1
PC address Read
Instruction [20–16] data 1
Read
register 2 Zero
Instruction
0 ALU ALU
[31–0] Read Read
M Write 0 Address 1
u data 2 result data M
Instruction Instruction [15–11] x register M
memory u u
1 x x
Write 1 0
data Registers Data
Write memory
data
Instruction [15–0] 16 32
Sign
ALU
extend
control

Instruction [5–0]

a. O que significa datapath ciclo simples?


b. Como é que o bloco de controlo selecciona as linhas de controlo para as
diferentes unidades do datapath
c. Esclareça o significado dos módulos “Sign Extended” e “Shift Left 2”e
que instruções afecta?
d. Qual o efeito na execução das instruções se as linhas de controlo dos
multiplexer estiver sempre a ‘1’
e. Complete a seguinte tabela, com o valor das linhas de controlo

Instrução ResDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch


add $t1, $t1, $s2
addi $v0, $zero, 0
lw $t0, 0($t1)
sw $v1, 0($a1)
beq $v1, $zero, loop

-8-
Resolução:

a. Entende-se por datapath de ciclo simples quando a execução de todos os


estados acontece num único ciclo de relógio, por este motivo também se
designa de datapath de ciclo longo.

b. O bloco de controlo utiliza lógica combinatória para gerar os diversos


sinais de controlo (RegWrite,…) em que as entradas desse circuito
combinatório são os 6 bits mais significativos do código de instrução de
26 a 31.

c. O bloco “Sign- Extended” converte de 16 para 32 bits mantendo o valor


de 16 para 32 bits, significa que os 16 bits mais significativo são
completados com o valor do bit mais significativo da palavra de 16 bits.
As instruções que utilizam esta instrução são as que utilizam o formato I.
O bloco “Shift Left 2” significa multiplicar por 4 o deslocamento para
calcular o endereço da próxima instrução. Afecta as instruções de salto
relativo.

d. Se o mux(RegDest) estiver a 1, apenas podem ser executadas instruções


do tipo R. Se o mux(ALUSrc) estiver a 1 apenas podem ser executadas
instruções do tipo I, com endereçamento imediato e de salto relativo a
Base(registo) ALU-imediato e loads e stores. Se o mux(de salto) estiver a
1 apenas são executadas as instruções de salto apenas se o salto se
tomar. Se o mux(MemtoReg) estiver a 1apenas podem ser executadas
instruções de load.

e.
Instrução ResDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch

add $t1, $t1, $s2 1 0 0 1 0 0 0

addi $v0, $zero, 0 0 1 0 1 0 0 0

lw $t0, 0($t1) 0 1 1 1 1 0 0

sw $v1, 0($a1) x 1 x 0 0 1 0

beq $v1, $zero, loop x 0 x 0 0 0 1

-9-

Você também pode gostar