Curso FFI0396 - Microprocessadores I
Lista 1 (10/08/2010)
1. Calcule as seguintes convers˜oes: • 94310 em base 2, 8 e 16, • 110011112 em base 8, 10 e 16, • 76428 em base 2 e 10,
• D57A416 em base 2 e 10.
2. Complete a tabela
octal hexadecimal decimal
774 . . . . 775 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Calcule • 11 + (+8) • 9 + (-6) • 14 - (+7)
5. Escreva a sua data de nascimento (dia/mˆes/ano) usando n´umeros hexadecimais e octais.
6. Quantos bytes s˜ao necess´arios para representar, em c´odigo BCD, o valor decimal 664219?
7. Escreva o seu primeiro nome usando o c´odigo ASCII. Para cada byte fixe o bit mais significativo usando o c´odigo de paridade com paridade par.
Lista 2 (17/08/2010)
1. Desenhe o circuito correspondente `a fun¸c˜ao
X = f (A, B) = ¯AB+ AB + A ¯B .
2. Construa portas NOT, AND, OR e XOR usando somente portas NOR. 3. O que faz o circuito abaixo?
B0 A0 A1 B1 B2 B3 A2 A3
4. Use um multiplexador com 3 bits para sele¸c˜ao de dados e 8 canais de 1 bit na entrada para implementar a fun¸c˜ao maioria
X = f (A, B, C) = AB ¯C+ A ¯BC+ ¯ABC + ABC .
5. Considere um indicador com 7 segmentos: ele tem 7 pinos (1 para cada seg-mento) e um segmento se ilumina quando vocˆe aplica um sinal 1 no pino corres-pondente (veja a figura abaixo). Sendo que os n´umeros s˜ao representados no c´odigo BCD vocˆe vai precisar de um decodificador BCD → 7 segmentos. Como vocˆe projetaria esse decodificador?
g
a
d
e
f
c
b
C
A
B
D
b a c e f g d6. O que faz o circuito representado na p´agina seguinte? (A figura ´e retirada do livro Structured Computer Organization do A.S. Tanenbaum.)
Lista 3 (26/08/2010)
1. No m´odulo SDM 9431 o teclado ´e selecionado usando o endere¸co (de 16 bits) 111010xxxxxxxxxx
(decodifica¸c˜ao parcial de endere¸co). Verifique que esses endere¸cos correspondem aos endere¸cos (em hexadecimal) E800 at´e EBF F .
Analogamente, o display de cristal l´ıquido, o conversor digital-anal´ogico e o con-versor an´alogo-digital s˜ao selecionados usando, respectivamente, os endere¸cos
111011xxxxxxxxxx 111001xxxxxxxxxx 111000xxxxxxxxxx.
Verifique que esses endere¸cos correspondem aos endere¸cos EC00 at´e EF F F , E400 at´e E7F F e E000 at´e E3F F (respectivamente).
Considerando os endere¸cos usados para os quatros perif´ericos, sobrou algum endere¸co no intervalo E000 at´e EF F F ?
2. Vocˆe tem 4 mem´orias de 1024 × 8 bits e quer criar uma mem´oria de 4096 × 8 bits. De quantos bits de endere¸co vocˆe vai precisar? Como v˜ao ser organizadas as linhas de endere¸co?
3. Construa a tabela verdade (entradas a e b, sa´ıdas S1 e S2) do circuito abaixo e fa¸ca um esquema de montagem usando um chip 7400.
O chip 7400, mostrado na figura abaixo, ´e composto por quatro portas NAND.
4. O que faz o circuito representado na p´agina seguinte? (A figura ´e retirada do livro Structured Computer Organization do A.S. Tanenbaum.)
Lista 4 (6/10/2010)
1. Proponha (e desenhe) um circuito para montagem na aula pr´atica de circuitos l´ogicos e construa a sua tabela verdade.
Lista 5 (26/10/2010)
1. − Inicialize • (A) ← #63d • (B) ← #11d . − Copie (B) ← (A). − Guarde • ((50(B))) ← (A) • (B) ← #15d • ((50(A))) ← (B) .− Escreva o c´odigo come¸cando no endere¸co 5000. − N˜ao use n´umeros decimais.
− Tente reduzir o n´umero de linhas do c´odigo.
• Modifique o c´odigo acima fazendo a troca (A) ↔ (B) em vez de (B) ← (A). − Por que o problema formulado desta maneira vai dar um c´odigo errado?
• O objetivo dessa prova ´e desvendar a frase criptografada v k p g kˆB ˆS ˆR
ou, em hexadecimal,
76 6B 70 67 6B 02 13 12 . (a) Usando o algoritmo recursivo
yi+1= (a yi) mod 2 8
,
com a = 71d e y0 = 31d, crie uma lista de 256 n´umeros. Lembre que
mod 28
fornece o resto da divis˜ao de um n´umero por 28
.
(b) Agora escreva um c´odigo para o gerador de n´umeros aleat´orios de 8 bits xn= SWAP(xn−p∀xn−q) ,
com p = 250d e q = 103d. Aqui ∀ indica a opera¸c˜ao de OR-exclusivo (ou XOR) e a opera¸c˜ao SWAP troca o nibble menos significativo com o nibble mais significativo. Observe que para calcular o valor de xn vocˆe precisa
ter guardado pelo menos os ´ultimos 250 n´umeros gerados. No nosso caso vamos guardar os ´ultimos 256 valores de xn.
− Use um vetor de 256 componentes para guardar a lista dos ´ultimos 256 valores de xn (considere este espa¸co de mem´oria como um buffer
limitado e peri´odico). Use o algoritmo recursivo do exerc´ıcio (a) acima para inicializar essa lista de 256 n´umeros.
− Considere como valor x0 o n´umero guardado na ´ultima componente
do vetor. Assim, na primeira itera¸c˜ao, xn−p ser´a o n´umero guardado
Lista 7 (16/11/2010)
1. Escreva um c´odigo para fazer a soma 13751+23987+17831 (n´umeros decimais). − Transforme os n´umeros decimais em n´umeros hexadecimais.
− Use os registros R0–R5 do banco de registros #0 para armazenar os trˆes n´umeros (observe que os n´umeros s˜ao em precis˜ao dupla e precisamos de dois bytes para armazenar cada n´umero).
− No final do c´odigo a soma deve ser armazenada no acumulador e no registro B, usando o acumulador para guardar o byte mais alto.
Lista 7bis (16/11/2010)
1. Escreva um c´odigo para fazer o produto 13751 × 23987 (n´umeros decimais). − Transforme os n´umeros decimais em n´umeros hexadecimais.
− Use os registros R0–R3 do banco de registros #0 para armazenar os dois n´umeros (observe que os n´umeros s˜ao em precis˜ao dupla e precisamos de dois bytes para armazenar cada n´umero).
− Para calcular o produto escreva os dois n´umeros como N 1 = (H1, L1) e N2 = (H2, L2), onde H1 e L1 (respectivamente H2 e L2) s˜ao o byte mais significativo e o byte menos significativo do n´umero N 1 (respectivamente N2). Podemos agora calcular P 1 = L1 × L2, P 2 = L1 × H2, P 3 = H1 × L2 e P 4 = H1 × H2. Note que P 1, P 2, P 3 e P 4 s˜ao n´umeros de 16 bits. Use os registros R0–R7 do banco de registros #1 para armazenar P1, P 2, P 3 e P 4. O resultado final do produto ´e un n´umero de 32 bits (i.e. de 4 bytes) obtido somando 4 n´umeros de 32 bits: S1 = (Z, Z, P 1), S2 = (Z, P 2, Z), S3 = (Z, P 3, Z) e S4 = (P 4, Z, Z), onde Z ´e un n´umero de 1 byte com todos os bits nulos. Para somar S1, S2, S3 e S4, calcule primeiro a soma SP 1 = S1 + S2 e depois SP 2 = SP 1 + S3 e SP 3 = SP 2 + S4. − No final do c´odigo o resultado (SP 3) deve ser armazenado nos registros
Lista 8 (23/11/2010)
1. Escreva um c´odigo para mover blocos de mem´oria (como a tecla mov blc), para o caso da mem´oria externa. Considere blocos de mem´oria de 256 bytes no m´aximo.
− Use os registros R0–R4 para guardar o endere¸co inicial da regi˜ao fonte (5000h), o endere¸co inicial da regi˜ao destino (5005h) e o n´umero de bytes (por exemplo 20d).
− Tome cuidado para n˜ao escrever sobre dados antes de transferi-los. − Escreva o c´odigo come¸cando no endere¸co 6000.
2. Modifique o c´odigo acima para o caso de endere¸co inicial da regi˜ao fonte maior do que o endere¸co inicial da regi˜ao destino (por exemplo: endere¸co inicial da regi˜ao fonte = 5005h e endere¸co inicial da regi˜ao destino = 5000h; considere ainda 20d bytes a serem transferidos).
3. Escreva um c´odigo que combine os c´odigos acima e que verifique automatica-mente se o endere¸co inicial da regi˜ao fonte ´e maior ou menor do que o endere¸co inicial da regi˜ao destino. Use um salto condicionado para rodar um dos dois casos.
4. Modifique o c´odigo acima para usar subrotinas em vez de saltos condicionados. 5. Modifique o c´odigo da Lista 7 creando uma subroutina para soma de dois n´umeros de 16 bits. Resolva o exerc´ıcio da Lista 7 chamando essa subroutina duas vezes no c´odigo principal.
2. Escreva uma subrotina que, dados dois bits, calcule a fun¸c˜ao XOR entre eles. Use as opera¸c˜oes booleanas AND, OR e NOT. Lembre que XOR(a, b) = a · N OT(b) + N OT (a) · b.
3. Escreva uma subrotina que, dado um byte, use o m´etodo de paridade par (o n´umero total de 1’s deve ser par) para fixar o bit mais significativo. Para isso use a subrotina acima. Note que o bit S = D1 ⊕ D2 ´e 0 quando D1 e D2 contˆem um n´umero par de 1’s e S = 1 quando D1 e D2 contˆem um n´umero ´ımpar de 1’s. O s´ımbolo ⊕ indica a opera¸c˜ao l´ogica XOR.
4. Escreva um loop que aplique a rotina acima a cada letra do seu nome. Armazene os resultados a partir da posi¸c˜ao de mem´oria 6100.
Lista 10 (7/12/2010)
1. Resolva os exerc´ıcios propostos nas experiˆencias 9, 10 e 11 do Manual de ex-periˆencias.
Lista 11 (14/12/2010)
1. Resolva a prova do ano passado.
• Escreva cada c´odigo come¸cando no endere¸co 5500h. • Inicialize a pilha com o valor 2F h.
• Para selecionar os v´arios bancos, n˜ao modifique o P SW mas use o en-dere¸camento direto.
• Lembre que cada c´odigo ´e uma modifica¸c˜ao do c´odigo do exerc´ıcio anterior. • O objetivo dessa prova ´e desvendar a frase criptografada
v k p g kˆB ˆS ˆR ou, em hexadecimal,
76 6B 70 67 6B 02 13 12 . (a) Usando o algoritmo recursivo
y = (a y) mod 28
− Lembre que mod 28
fornece o resto da divis˜ao de um n´umero por 28
. Note que, para calcular mod 28
, n˜ao precisa fazer a divis˜ao.
− Use os registros R0 e R1 do banco #0 para guardar os valores de a e de y0.
− Guarde a lista produzida nos endere¸cos 6000h − 60F F h, i.e. guarde y1
no endere¸co 6000h, y2 no endere¸co 6001h, at´e y256no endere¸co 60F F h.
− N˜ao modifique o conte´udo dos registros R0 e R1 do banco #0. (b) Agora escreva um c´odigo para o gerador de n´umeros aleat´orios de 8 bits
xn= SWAP(xn−p∀xn−q) ,
com p = 250d e q = 103d. Aqui ∀ indica a opera¸c˜ao de OR-exclusivo (ou XOR) e a opera¸c˜ao SWAP troca o nibble menos significativo com o nibble mais significativo. Observe que para calcular o valor de xn vocˆe precisa
ter guardado pelo menos os ´ultimos 250 n´umeros gerados. No nosso caso, para simplificar, vamos guardar os ´ultimos 256 valores de xn.
− Use os endere¸cos 6000h − 60F F h para guardar a lista dos ´ultimos 256 valores de xn (considere este espa¸co de mem´oria como um buffer
limitado e peri´odico). Use o algoritmo recursivo do exerc´ıcio (a) acima para inicializar essa lista de 256 n´umeros.
− Considere como valor x0 o n´umero guardado no endere¸co 60F F h.
As-sim, na primeira itera¸c˜ao, xn−p ser´a o n´umero guardado no endere¸co
6005h, xn−q aquele guardado no endere¸co 6098h e x1 ser´a guardado
no endere¸co 6000h.
− Use os registros R0, R1 e R2 do banco #1 para apontar, respectiva-mente, para xn−p, xn−q e xn na lista dos ´ultimos 256 valores de xn.
a frase decodificada em um coment´ario no final do c´odigo. N˜ao modifique o conte´udo dos registros R0-R7 do banco #3.