EA869 - Introdução a Sistemas de Computação Digital
2o Semestre de 1997 - 2a Prova - Duração: 2 horas - Sem consulta
Considere o processador microprogramado da figura em anexo e as duas instruções de máquina:
1)ADD end Acc <- (Acc) + (end)A linha de mapeamento para as microinstruções que implementam a execução da instrução (1) está na posição 6 da micromemória, e a linha de mapeamento para as microinstruções que implementam a execução da instrução (2), na posição 13. O microprograma correspondente à instrução (1) está armazenado a partir da posição n1, enquanto que o microprograma correspondente à instrução (2) está armazenado a partir da posição n2, com n1 e n2 calculados utilizando os dois últimos dígitos do seu RA ra, como segue:
Endereço da micromemória | Microoperações | Sinais de Controle | Comentários (obrigatórios) |
---|---|---|---|
Ciclo de Busca (0.6 pt) | |||
0 | REM <- (PC) + 0 | SC1 (fase 1), SC15 (fase 2) | transferir para o registrador REM o endereço da instrução |
RDM <- ((REM)) | SC16 (fase 3) | transferir para o registrador RDM a instrução | |
MPC <- (MPC) + 1 | SC19, SC23 (fase 4) | incrementar MPC, para acessar a próxima microinstrução | |
1 | PC <- (PC) + 1 | SC1, SC5 (fase 1), SC10 (fase 2) | incrementar PC, para acessar a próxima palavra da Memória |
RI <- (RDM) | SC18 (fase 3) | transferir para o registrador RI a instrução lida da Memória | |
MPC <- (MPC) + (RI)4 bits mais significativos | SC22, SC23 (fase 4) | desvio, em função do código de operação, para o endereço correto de mapeamento | |
Mapeamento (0.4 pt) | |||
6 | MPC <- 0 + n1 | SC24 (fase 4) | desvio para SUBTR, (10 dígitos mais significativos do MPC) = (n1)base 2 |
13 | MPC <- 0 + n2 | SC24 (fase 4) | desvio para JZ, (10 dígitos mais significativos do MPC) = (n2)base 2 |
Execução de ADD (0.5 pt) | |||
n1 | REM <- 0 + (RI)12 bits menos significativos | SC6 (fase 1), SC15 (fase 2) | transferir para o registrador REM o endereço no campo de endereço da instrução |
RDM <- ((REM)) | SC16 (fase 3) | transferir para o registrador RDM o operando | |
MPC <- (MPC) + 1 | SC19, SC23 (fase 4) | incrementar MPC, para acessar a próxima microinstrução | |
n1+1 | Acc <- (Acc) + (RDM) | SC2, SC7 (fase 1), SC11 (fase 2) | somar os conteúdod de Acc e RDM e transferir o resultado para Acc |
MPC <- 0 + 0 | (fase 5) | retorno à busca | |
Execução de JN (0.5 pt) | |||
n2 | MPC <- (MPC) + TESTNEG | SC21, SC23 (fase 4) | Se Acc=0, então MPC<-(MPC)+1; senão MPC<-(MPC)+2 |
n2+1 | PC <- 0 + (RI)12 bits menos significativos | SC6 (fase 1), SC10 (fase 2) | transferir para PC o endereço de desvio |
MPC <- 0 + 0 | (fase 5) | retorno à busca | |
n2+2 | MPC <- 0 + 0 | (fase 5) | retorno à busca |
(MPC)+C.O.SUBTR = 6 |
---|
(MPC)+C.O.JZ = 13 |
C.O.SUBTR = 5 = (0101)base 2 |
---|
C.O.JZ = 12 = (1100)base 2 |
A seguir, estão listados elementos e conceitos associados ao controlador microprogamado e ao controlador por registradores. Caso existam conceitos comuns aos dois controladores, indique-os na Tabela 2.1. Excluindo os conceitos indicados na Tabela 2.1, montar a Tabela 2.2 indicando todas as possíveis correspondências um a um entre as duas colunas. Por exemplo: memória de controle (a3) coresponde a conjunto de todos os registradores (b2).
Controlador Microprogramado | Controlador por registradores |
---|---|
a1) leitura de microinstrução | b1) decodificação |
a2) instrução de máquina | b2) conjunto de todos os registradores de deslocamento |
a3) memória de controle | b3) registrador de deslocamento |
a4) mapeamento | b4) deslocamento |
a5) microprograma | b5) código de operação |
a6) microinstrução | b6) flip-flop D |
a2 |
---|
b5 |
a3 | b2 |
---|---|
a1 | b4 |
a4 | b1 |
a5 | b3 |
a6 | b6 |
Seja a seguinte definição de macro:
MACRO | CHAMA PF1,PF2,PF3,PF4 |
---|---|
MOV PF2,R1 | |
MOV PF3,R2 | |
CALL PF1 | |
MOV R8,PF4 | |
ENDMACRO |
O trecho do programa que a utiliza é dado na forma:
: | |
---|---|
CHAMA SUB1,DADO1,DADO2,REST | |
: | |
STOP | |
DADO1: | DW 7 |
DADO2: | DW 8 |
REST: | DS 1 |
: |
SUB1: | ADD #4,R1 |
---|---|
MUL R1,R2 | |
MOV R2,R8 | |
RTS |
MOV DADO1,R1 |
---|
MOV DADO2,R2 |
CALL SUB1 |
MOV R8,REST |
SUB2: | ADD #12,R1 |
---|---|
MOV R1,R8 | |
RTS |
MOV PF2,R1 |
---|
MOV PF3,R2 |
CALL SUB1 |
MOV R8,PF4 |
MOV PF2,R1 |
---|
CALL SUB2 |
MOV R8,PF4 |
MACRO | CHAMA PF1,PF2,PF3,PF4 |
---|---|
MOV PF2,R1 | |
AIF ('PF3'="") . DESVIO | |
MOV PF3,R2 | |
.DESVIO | CALL PF1 |
MOV R8,PF4 | |
ENDMACRO |
Sua função é definir como será interpretado o conteúdo do campo de endereçamento no processo de obtenção do endereço efetivo.
b) O conteúdo do campo de endereçamento de uma instrução corresponde ao endereço efetivo do operando da instrução? Justifique. (valor 0.3)
Nem sempre. Considerando os modos básicos de endereçamento, isto pode ocorrer no modo direto, mas não vai ocorrer no modo indireto.
c) Considere a seguinte instrução em uma máquina fictícia de dois endereços (EE = endereço efetivo): (valor 1.8)
MOV EE1, EE2 EE2 ¬ (EE1)
Assumindo que o formato da instrução nesta máquina é dado por:
C.O. |
modo1 |
campo de endereçamento 1 |
|
///////////////////////// |
modo2 |
campo de endereçamento 2 |
e sabendo-se que esta máquina admite os seguintes modos de endereçamento (n é um número inteiro com sinal):
modo de endereçamento |
código binário |
notação |
endereço efetivo |
por registrador direto |
0001 |
R |
R |
por registrador indireto |
0010 |
(R) |
(R) |
absoluto direto |
0011 |
end |
end |
absoluto indireto |
0100 |
(end) |
(end) |
baseado |
0101 |
n (RB) |
(RB)+n |
relativo |
0110 |
n (PC) |
(PC)+n * |
autoincremento (pós-incremento) |
0111 |
(R)+ |
(R) |
autodecremento (pré-decremento) |
1000 |
- (R) |
(R)- 1 |
indexado direto |
1001 |
RIX(n) |
(RIX)+n |
(
*) neste caso, o conteúdo de PC corresponde ao endereço de memória do início da próxima instruçãofaça:
Notação em linguagem de montagem |
EE1 |
EE2 |
|
1a instrução |
MOV (R2)+, 381 |
382 |
381 |
2a instrução |
MOV (716), 277(PC) |
384 |
385 |
3a instrução |
MOV (R1), RIX(50) |
715 |
383 |
Obs: Toda notação não-binária presente na configuração de memória apresentada a seguir está sendo utilizada para representar os respectivos códigos binários que efetivamente estão presentes.
100 |
mov |
0111 |
|||
101 |
r 2 |
||||
102 |
/////////// |
0011 |
|||
PC |
100 |
103 |
381 |
||
104 |
mov |
0100 |
|||
105 |
716 |
||||
R1 |
715 |
106 |
/////////// |
0110 |
|
107 |
277 |
||||
108 |
mov |
0010 |
|||
R2 |
382 |
109 |
r 1 |
||
110 |
/////////// |
1001 |
|||
111 |
50 |
||||
RIX |
333 |
» |
» |
||
381 |
385 |
||||
382 |
715 |
||||
RB |
666 |
383 |
716 |
||
384 |
382 |
||||
385 |
381 |
||||
» |
» |
||||
715 |
383 |
||||
716 |
384 |
||||
» |
» |
Tabela 5.1
PC |
R1 |
R2 |
RIX |
RB |
381 |
382 |
383 |
384 |
385 |
715 |
716 |
||
100 |
715 |
382 |
333 |
666 |
385 |
715 |
716 |
382 |
381 |
383 |
384 |
- |
- |
104 |
383 |
715 |
|||||||||||
108 |
382 |
||||||||||||
112 |
383 |
Questão 5 (valor 2,0)
O programa a seguir está armazenado na memória a partir do endereço 100, seguido imediatamente pela subrotina SUB. O programa tem como única opção utilizar pilha para armazenar o endereço de retorno da subrotina. Sua função é atribuir um valor para o conteúdo do registrador R1 e, em seguida, modificá-lo para o quadrado do valor atribuído. O registrador R2 está sendo utilizado como um registrador de trabalho. Independentemente do programa apresentado corresponder ou não à forma mais eficiente de executar sua função, responda:
INÍCIO: |
MOV #250, SP |
SUB: |
POP R4 |
||
MOV #40, R1 |
POP R1 |
||||
PUSH R1 |
POP R2 |
||||
PUSH R1 |
MUL R1, R2 |
||||
CALL SUB |
PUSH R2 |
||||
POP R1 |
PUSH R4 |
||||
STOP |
RTS |
CALL end |
(SP) ¬ (PC) |
|
SP ¬ (SP) + 1 |
||
JUMP end |
RTS |
SP ¬ (SP) – 1 |
PC ¬ ((SP)) |
a) os parâmetros estão sendo passados por valor ou por endereço? Justifique sua resposta sem recorrer à natureza do dado armazenado em R1. (valor 0.5)
Os parâmetros estão sendo passados por valor, pois após a chamada da subrotina o programa principal apresenta uma instrução para armazenar o resultado que se encontra na pilha, o que não ocorreria se a passagem de parâmetros fosse por endereço. Isto implica que a passagem de parâmetros utilizada implementa apenas a entrada de dados.
b) qual é o mecanismo de passagem de parâmetros empregado? (valor 0.5)
Passagem de parâmetros por pilha.
c) explique a função do registrador R4 na subrotina SUB. (valor 0.5)
Como a pilha está sendo utilizada tanto para armazenar o endereço de retorno ao programa (endereço correspondente à primeira instrução após a chamada da subrotina) como para passagem de parâmetros por valor, o registrador R4 é empregado para armazenar temporariamente o endereço de retorno. Isto é necessário, pois quando a subrotina vai acessar a pilha, o endereço de retorno está ocupando a primeira posição, com os parâmetros (passados por valor) vindo a seguir. Como a subrotina deve restaurar o estado da pilha antes do retorno ao programa, o endereço de retorno armazenado em R4 é novamente colocado na primeira posição da pilha.
d) os mecanismos de armazenamento do endereço de retorno e passagem de parâmetros utilizados são apropriados para a implementação de subrotinas recursivas? Justifique. (valor 0.5)
Sim. O processo de recursão implica que as primeiras chamadas à "função" recursiva sejam as últimas a terminar. Como a pilha utiliza o mecanismo LIFO para entrada e saída de dados, ela representa uma estrutura apropriada para a implementação de subrotinas recursivas.
Questão 6 (valor 2,0)
Responda às seguintes questões:
a) Descreva como se dá a composição do endereço efetivo no modo de endereçamento paginado por registrador de página. Com base em sua descrição, indique a dimensão dos campos de endereço envolvidos nesta composição, sabendo que a memória endereçável contém 2048 (211) palavras e cada página deve ter 256 (28) palavras. (valor 0.5)
O endereço efetivo no modo de endereçamento paginado é obtido pela concatenação do conteúdo do registrador de página (correspondendo aos bits mais significativos) e do conteúdo do campo de endereçamento da instrução (correspondendo aos bits menos significativos). O registrador de página indica a página a ser acessada e o campo de endereçamento da instrução indica o deslocamento dentro desta página. Sendo assim, visto que cada página contém 28 palavras, a memória endereçável conterá 23 páginas. Logo, o registrador de página deve aceitar 3 bits e o campo de endereçamento 8 bits.
b) Assuma que o endereço efetivo do campo de endereço de uma dada instrução é composto pela soma de duas parcelas, uma proveniente do campo de endereço da instrução e outra proveniente de um registrador especial na forma:
Nas situações a seguir, indique qual deve ser o conteúdo das parcelas P1 e P2. (valor 0.5)
Situação 1: Utilizando a instrução acima, deve-se escrever um programa em linguagem de montagem que some vários elementos de um dado vetor. O endereço inicial do vetor na memória é conhecido em tempo de montagem, enquanto que os elementos a serem somados são conhecidos apenas em tempo de execução.
P1 ® endereço inicial do vetor (endereço-base)
P2 ® posição dos elementos a serem somados (deslocamento)
Situação 2: Utilizando a instrução acima, deve-se escrever um programa em linguagem de montagem que some o mesmo elemento de vários vetores. A posição do elemento dentro do vetor é conhecida em tempo de montagem, enquanto que os endereços iniciais dos vetores são conhecidos apenas em tempo de execução.
P1 ® posição do elemento dentro do vetor (deslocamento)
P2 ® endereços iniciais dos vetores (endereço-base)
c) Um código relocável é um código cuja execução independe de sua posição na memória; um código reentrante é um código cuja execução independe da posição dos seus dados. Dado o programa abaixo ocupando um bloco contíguo de 320 palavras a partir da posição 100 da memória, pode-se afirmar, considerando tão somente a instrução na posição 150, que o código é reentrante mas não é relocável (as demais instruções atendem os requisitos de relocabilidade e reentrância). Justifique esta afirmação. Modifique o modo de endereçamento da instrução para que o código seja relocável. (valor 1.0)
100 × × ×
150 CALL 250
250 × × ×
419 RTS
Considerando tão somente a instrução na posição 180, o código é reentrante por não fazer referência direta a dados, e é não relocável por utilizar explicitamente um endereço absoluto. Se o programa for relocado para uma outra posição de memória , o endereço 250 não mais conterá a instrução desejada. Para que o código seja relocável, basta substituir o modo de endereçamento absoluto pelo modo de endereçamento relativo, resultando a instrução CALL 99(PC).
Last modified: Fri Oct 31 09:22:27 BRA 1997
Sugestões para ting@dca.fee.unicamp.br
Voltar para a página do curso.
e Fernando