RESOLUÇÃO

Propaganda
NOME
Nº
RESOLUÇÃO
2º Teste de Arquitectura de Computadores
LESIM e LERCI
IST - Taguspark
Prof. responsável: José Delgado
2º Semestre 2002/2003
5 de Abril de 2003
Início: 10H00
FIM: 10H50
SEM consulta
Tolerância: até às 11H00
Identifique todas as folhas!
RESPONDA APENAS NOS RECTÂNGULOS.
Se precisar de mais espaço, é porque está a responder ao que não foi
pedido (se mesmo assim quiser insistir, use o verso da folha e indique
CLARAMENTE esse facto)
Use as caixas de “Justificação” para justificar as respostas e fazer
cálculos intermédios
Não é permitido qualquer outro material sobre a mesa de exame para
além deste enunciado. Se precisar de folhas de rascunho, use o verso
das folhas do enunciado.
1 - Considere os números 10 e –14 em decimal.
a) - Represente-os em complemento para 2 com 16 bits, em hexadecimal.
10
-14
000AH
FFF2H
Justificação:
Considerando primeiro os módulos dos números inteiros decimais dados, vamos
obter a sua conversão para hexadecimal:
10 = AH ; 14 = EH
o que representado em 16 bits dá:
10 = 000AH ; 14 = 000EH
Para representar os números inteiros com sinal, recorre-se à representação em
complemento para 2. No caso do nº positivo, ela é igual à do nº sem sinal (embora
o ultimo bit seja agora o sinal – 0 visto que é positivo). No caso do nº negativo,
temos de obter o seu complemento p/2, ficando o bit mais significativo
automaticamente a 1 – visto que é negativo:
-14 = compl/2 (000EH) = FFF2H
1
NOME
Nº
b) - Supondo que esses números estão nos registos R1 e R2, respectivamente, indique
qual o resultado, em hexadecimal (16 bits), de cada uma das instruções seguintes
consideradas independentemente (não em sequência)
i) NEG R2
; R2 ← - R2
R2=000EH
ii) ADD R1, R2
; R1 ← R1 + R2
R1=FFFCH
iii) AND R1, R2
; R1 ← R1 ∧ R2
R1=0002H
iv) OR R1, R2
; R1 ← R1 ∨ R2
R1=FFFAH
Justificação:
i)
Comp/2(R2) = Comp/2 (FFF2H) = 000EH
ii)
R1 = R1 + R2 ;
000AH + FFF2H = FFFCH ;
iii)
R1 = R1 ^R2;
000AH ^ FFF2H = 0002H
R1 = -4
Apenas calculando para o nibble menos significativo visto que os bits mais
significativos do resultado serao sempre 0:
1010
0010
0010
iv)
R1 = R1 v R2;
000AH ^ FFF2H = FFFAH
Apenas calculando para o nibble menos significativo visto que os bits mais
significativos do resultado serao sempre 1:
1010
0010
1010
2
NOME
Nº
2 - Suponha que a instrução XCH R1, R2 troca o conteúdo dos registos R1 e R2. Considere
agora que não tem essa instrução ao seu dispôr. Mostre como implementar a mesma
funcionalidade com várias instruções assembly, com recurso:
a) - a um outro registo, temporário;
MOV R3, R1
; Salva conteúdo de R1 em R3
MOV R1, R2
; Troca conteúdos
MOV R2, R3
; copiando R2 para R1 e R3 para R2
b) - à pilha.
PUSH R1
; Salva R1 na pilha
PUSH R2
; Salva R2 na pilha
POP
R1
; Restaura R1 com conteúdo de R2
POP
R2
; Restaura R2 com conteúdo de R1
3 - Considere o seguinte programa em C:
int [100] a;
int i;
i = 1;
while (i != 100)
{
a[i] = a[i] + a[i – 1];
i++;
}
Considere ainda, para servir de ajuda, as instruções em assembly (com o respectivo significado
em RTL) e os modos de endereçamento das tabelas seguintes:
3
NOME
Nº
Instruções
MOV
SHR
NEG
AND
JMP.Z
JMP.NZ
JMP
INC
CMP
PUSH
op1, op2
op, n
op
op1, op2
op
op
op
op
op1, op2
op
; op1 ← op2
; op ← op >> n
; op ← -op
; op1 ← op1 ∧ op2
; Z: PC ← op
; NZ: PC ← op
; PC ← op
; op ← op + 1
; Z ← (op1 - op2) = 0
; SP ← SP + 1; M[SP] ← op
Modos de endereçamento
(W e i são especificados nas
instruções)
Nome
Operando está em
Imediato
W
Registo
R[i]
Directo
M[W]
Indirecto
M[M[W]]
Indirecto por
registo
Indexado
Baseado
Baseado com
deslocamento
M[R[i]]
M[R[i]+W]
M[R[i]+ R[j]]
M[R[i]+ R[j]+W]
Usando as instruções assembly que achar conveniente, converta as instruções de C (as
declarações das variáveis não) para assembly em cada uma das alíneas seguintes,
assumindo que a variável i está localizada no registo R1 e o vector a está localizado a
partir do endereço indicado para cada um dos casos. Utilize os modos de endereçamento
e os registos temporários que entender.
a) - O vector a está localizado a partir do endereço 1000H
; Usando endereçamento indexado
LOOP:
MOV R1, 1
; Inicializa i a 1
CMP R1, 64H
; Verifica se I chegou a 100 (64H)
JMP.Z FIM
; e se sim acaba
MOV R2, M[R1 + FFFH] ; Modo indexado para aceder a a[i-1]
ADD M[R1 + 1000H], R2 ; a[i] = a[i] + a[i-1]
INC
R1
; i++
JMP LOOP
FIM:
; end while
…
b) - O vector a está localizado a partir do endereço indicado pelo registo R5. Indique
apenas as diferenças em relação ao caso anterior.
; Usando endereçamento baseado c/ deslocamento e baseado, respectivamente,
; as diferenças ocorrem nas seguintes instruções
MOV R2, M[R5+R1-1]
; Modo indexado para aceder a a[i-1]
ADD M[R5+R1], R2
; a[i] = a[i] + a[i-1]
4
NOME
4 -
Nº
Considere o programa indicado na tabela seguinte.
a) - Para cada uma das instruções indique qual o nome do modo de endereçamento
usado e descreva-o sucintamente.
Nº
Nome do modo
de
endereçamento
imediato
Instrução
1
2
3
4
5
MOV R1, 1
ADD R1, M[1000H]
directo
PUSH R1
registo
ADD R2, M[R1+5]
INC
Descrição sucinta
O operando está na própria instrução
A instrução especifica
DIRECTAMENTE o operando
O operando está no registo definido
na instrução
O endereço do operando obtém-se
somando o conteúdo de um registo
com um índice especificados na
instrução
A instrução especifica um registo que
contém o endereço do operando
indexado
Indirecto p/
registo
M[R2]
b) - Assumindo que os valores iniciais dos registos relevantes são os referidos e que
todas as palavras de memória estão inicializadas com o valor do byte de menor peso
do respectivo endereço (exemplos: M[1234H] = 34H, M[A3FCH] = FCH), indique
quais os valores (em hexadecimal) desses registos após cada instrução.
Nº
Instrução
Valores iniciais
R1
1000H
R2
2000H
SP
3000H
1
MOV R1, 1
0001H
2000H
3000H
2
ADD R1, M[1000H]
0001H
2000H
3000H
3
PUSH R1
0001H
2000H
3001H
4
ADD R2, M[R1+5]
0001H
2006H
3001H
5
INC
0001H
2006H
3001H
M[R2]
Cotação:
1 a)b)2 a)b)3 a)b)4 a)b)-
1 valor
2 valores
3 valores
3 valores
3 valores
2 valores
3 valores
3 valores
5
Download