Você está na página 1de 7

Arquitectura de

Computadores
Aula Prática n.º 1
Ano Lectivo de 1999/2000
n = 57 (base 10) = ? base (2) n = 00111001 (2) = ? base (10)
57/2 = 28 : 1
00111001 (2) =
28/2 = 14 : 0
= 0x27+0x26+1x25+1x24+1x23+0x22+0x21+1x20
14/2 = 7 : 0
= 32 + 16 + 8 + 1
7/2 = 3 : 1
= 57 (10)
3/2 = 1 : 1
1/2 = 0 : 1

57 (10) = 111001 (2) = 00111001 (8


bits)
n = -57 (base 10) = ? base (2) n = 11000111 (2) = ? base (10)
-57 = complemento (57) +1 11000111 (2) =
= complemento (00111001) +1 = -1x27+1x26+0x25+0x24+0x23+1x22+1x21+1x20
= 11000110 + 1 = -128 + 64 + 4 + 2 + 1
= 11000111 = -57

1. Indique a representação binária de 8 bits sem sinal dos seguintes números inteiros
:
a. 75
b. 102
c. 127
d. 240
2. Passe para a base decimal os seguintes números inteiros codificados na base
binária sem sinal:
a. 00101010
b. 01100101
c. 10010010
d. 11100011
3. Indique a representação binária de 8 bits com sinal em complemento para 2 dos
seguintes números inteiros:
a. 20
b. -20
c. 126
d. -126
4. Passe para a base decimal os seguintes números inteiros codificados na base
binária com sinal em complemento para 2:
a. 00101010
b. 01100101
c. 10010010
d. 11100011
5. Indique quais dos seguintes números não é possível representar na base binária
usando a representação em complemento para 2 com 8 bits:
a. 127
b. 128
c. -128
d. -129
6. Calcule o resultado das seguintes operações usando durante o cálculo a base
binária na representação em complemento para 2 com 8 bits :
a. 15 + 10
b. 13 - 4
c. -25 + 20
d. -14 - 20 (será que é possível representar o resultado desta operação com 8
bits)
e. 120+10 (será que é possível representar o resultado desta operação com 8
bits)

Arquitectura de
Computadores
Aula Prática n.º 2
Ano Lectivo de 1999/2000
float = 32 bits= 1 / 8 / 23 ( Sinal / Expoente / Mantissa)
double = 64 bits= 1 / 11 / 52 ( Sinal / Expoente / Mantissa)

número(10) = (-1)sinal x (1 + mantissa(10) ) x 2(expoente(10)-desvio)


(desvio=127 para 32 bits e 1023 para 64 bits)
x = 0.921875 (base 10) = ? base (2 / IEEE754) com 32 bits
0.921875
= 0.5 + 0.25+ 0.125 + 0.03125 + 0.015625
= 2-1+2-2+2-3+2-5+2-6
= (1+1x2-1+1x2-2+0x2-3+1x2-4+1x2-5) x 2-1

Sinal = 0
Expoente - desvio = -1 <=> Expoente = 126
Mantissa = 11011000000000000000000
x = 0 01111110 11011000000000000000000
x= 00111111011011000000000000000000 (base 2 / IEEE754) = ? base (2)
00111111011011000000000000000000
= 0 01111110 11011000000000000000000

Sinal = 0
Expoente = 126<=> Expoente - desvio = -1
Mantissa = 11011000000000000000000

x = (-1)0x (1+1x2-1+1x2-2+0x2-3+1x2-4+1x2-5) x 2-1


x = 1/2 + 1/4 + 1/8 + 1/32 + 1/64
x = 0.921875

7. Indique a representação binária formato IEEE754 32bits com sinal dos seguintes
números:
a. 0.25
b. 0.046875
c. -16.375
d. -0.5625

8. Passe para a base decimal os seguintes números codificados na base binária


formato IEEE754 32bits:
a. 0 01111101 10010000000000000000000
b. 0 10000010 11001000000000000000000
c. 1 01111100 01011000000000000000000
d. 1 10000011 10011100000000000000000

Algoritmo de adição em Floating Point


9. Calcule o resultado das seguintes operações usando durante o cálculo a base
binária no formato IEEE754 com 32 bits (verifique se existe over/underflow):
a. 32.5 + 0.046875
b. -0.875 - 0.5625
c. -325.875 + 0.546875
d. 524288.25 - 0.0078125

10. Qual o número normalizado mais pequeno que pode representar com precisão
simples/dupla ?
e não normalizado ?
e o maior normalizado com precisão simples/dupla ?
11. Calcule: 1.00101 x 2-126 - 1.00010 x 2-126
Há overflow ?
Há underflow ?
Que tipo de valor IEEE754 é obtido ?

Arquitectura de
Computadores
Aula Prática nº 3
Ano Lectivo de 1999/2000

1. Para cada um dos programas C apresentados na tabela abaixo, responda às


seguintes alíneas:
CI C II C III
main( ) {
int i=2;
main( ) {
int j; switch(i) { main( ) {
float i; case 1: i=1; break; int j =100;
case 2: i=2; break; float i =0;
i=3.1415; case 3: i=3; break;
for(j=15;j<=27;j++) case 4: i=5; break; while(j>0) i+=sqrt(j--);
i=cos(i); case 5: i=8; break;
printf("i =%f\n",i);
printf("i=%f\n",i); default: i=0; }
} }
printf("i=%d",i);
}

a. Compile o código C para código assembly. No caso de obter erros na compilação,


altere o programa para que passe a compilar correctamente.
b. Compare o código assembly obtido com o código C e tente identificar as
estruturas principais do programa: atribuições, chamadas às funções, e saltos.
c. Use a figura 1 para identificar em que fase da compilação se encontra. Compile o
código assembly obtido na primeira alínea para o código binário final. No caso de
obter erros durante esta fase da compilação, observe a figura 1 para tentar
identificar o problema.

Arquitectura de
Computadores
Aula Prática nº 4
Ano Lectivo de 1999/2000
1) Faça download dos seguintes ficheiros para a sua área: emu.c, p1.h, p2.h

Estes 3 ficheiros irão servir de base para o primeiro trabalho prático que consiste no
desenvolvimento de um emulador capaz de correr programas escritos no pseudo-
assembly definido nas aulas teóricas.
No ficheiro emu.c encontrará uma primeira versão do emulador, contendo apenas um
conjunto muito restrito de instruções:

ADD R1 R2 R3 R1 = R2 + R3
...
NOT R1 R2 R1 = not R2
...
LW R1 R2 ADDR R1 = *(ADDR +R2)
...
BEQ R1 R2 ADDR PC = (R1==R2)? PC+4+ADDR:PC+4
...
J ADDR PC = ADDR
...
SYS 0 stop cpu
SYS 1 print registers
SYS 2 R1 print (int R1)
SYS 3 R1 R1 = read (int )
SYS 4 R1 print (char R1)
SYS 5 R1 R1 = read (char )
SYS 6, n print ( string n)
SYS 9 clear screen
...

Nesta aula prática pretende-se que perceba e execute o código do emulador apresentado,
e que adicione as seguintes instruções : SUB, AND, SW, BNE

2) Escreva um programa em C que apresente no ecrã os números entre 1 e 100. "Compile


à mão" o código C para o código assembly definido na pergunta anterior (crie um
programa p3.h).

3) Que modos de endereçamento estão representados nas instruções: registo /


deslocamento / pc absoluto / pc relativo / imediato ?

4) Será que com o actual conjunto de instruções, e com os registos todos a zero,
consegue resolver o problema da pergunta 2 ? E com as posições de memória também
zero ? Qual seria a instrução necessária para poder resolver o problema ?

5) Que modo temos de adicionar na 4.