exercicios resolvidos aula 4 de Maio - w3.ualg.pt

No Mips existem 5 modos de endereçamento, ... assembly para o microprocessador da máquina correspondente às instruções ... exercicios resolvidos aula ...

125 downloads 615 Views 91KB Size
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, 20 bits: 0..1M, 32 bits: 0..4G,

2k

3FFF 3800

4k

0FFF 0000

FFFFh FFFFFh FFFFFFFFh

2k

FFFF F800

4k

0FFF 0000

-1-

2k

FFFFF FF800

4k

0FFF 0000

2k

FFFFFFFF FFFFF800

4k

0FFF 0000

2. Para o seguinte código comente as instruções e identifique o que fazem escrevendo o seu equivalente em C: loop:

finish:

add beq add sub j addi add

$t0, $a1, $t0, $a1, loop $t0, $v0,

$zero, $zero $zero, finish $t0, $a0 $a1, 1 $t0, 100 $t0, $zero

Resolução:

loop:

finish:

Entradas: Operação: Saídas:

add $t0, $zero, $zero beq $a1, $zero, finish add $t0, $t0, $a0 sub $a1, $a1, 1 j loop addi $t0, $t0, 100 add $v0, $t0, $zero

# coloca $t0 a zero # enquanto $a1 não for zero # $t0=$t0+$a0 # subtrai 1 de $a1 # salta para loop # soma 100 a $t0 # guarda resultado em $v0

$ao e $a1 Multiplica $a0 por $a1 (soma $a0 $a1 vezes) 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 lb

$s0, 100 ($zero) $s1, 200 ($zero)

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-

# conteúdo 100 = 0x0f # conteúdo 200 = 0xff

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

$t0, $zero, $zero $a1, $zero, finish $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 lw add beq j sw

r1, 0(r0) r2, 1(r0) r3, r1, r2 r1, r2, salto rotina 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 u x

Add Add

4

Control

PC

Instruction [25–21]

Read register 1

Instruction [20–16]

Read register 2

Read address Instruction [31–0] Instruction memory

0 M u Instruction [15–11] x 1

Write register Write data

Instruction [15–0]

16

1

Shift left 2

RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite

Instruction [31–26]

ALU result

Read data 1 Zero Read data 2

Registers

Sign extend

ALU ALU result

0 M u x 1

Address

Read data

1 M u x 0

Data Write memory data

32 ALU 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

add addi lw sw beq

Instrução $t1, $t1, $s2 $v0, $zero, 0 $t0, 0($t1) $v1, 0($a1) $v1, $zero, loop

ResDst

ALUSrc

MemtoReg

-8-

RegWrite

MemRead

MemWrite

Branch

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-