Escolar Documentos
Profissional Documentos
Cultura Documentos
1
A memória agora trabalha com palavras de 12 bits e os 2 terminais E (Habilita) e R/W
foram substituídos pelos terminais R (ler) e W (escrever), que são ativados em nível 1 (não é
permitido R = W = 1).
O Registrador de Instrução (RI) foi substituído por dois registradores: um Registrador de
Propósito Geral (RPG), de 12 bits, e um Registrador de Operação (ROP), de 4 bits. Assim, com 4
bits, pode-se ter agora 16 instruções. Quando uma instrução é lida da memória, uma palavra de
12 bits é transferida para RPG: 4 bits serão transferidos para ROP e, quando necessário, 8 bits,
possivelmente, para REM (p.ex., como endereço do operando). Dessa forma, pode-se trabalhar
com operação e endereço separadamente. RPG pode armazenar também um operando de 12 bits.
Notar que há conexões diretas RPG-Memória, RPG-ROP, RPG-REM e RPG-ULA (com
duas ligações separadas). Ainda, há dois caminhos separados RPG PC e PC RPG,
permitindo, inclusive, trocas simultâneas entre RPG e PC num único ciclo de relógio (por
exemplo, usando FFs mestre-escravo). (observar que RPG atende 4 microoperações; observar tb a ligação R
com MRPG)
Observar que a ULA tem um registrador F de um bit (um FF) e que ela pode executar 8
microoperações, incluindo as de rotacionar RAC em 1 bit à direita (ROR) e à esquerda (ROL)
através de F. Ainda, há duas entradas F e Z (de um bit cada) que chegam ao Controlador: F
(“flag”) que vem do registrador F e Z que vem de RPG (Z estará em 1 quando todos os 12 bits de
RPG estiverem em zero).
Se as instruções são simples e poucas, o controlador será mantido simples; neste caso, os
programas de instruções deverão ser mais longos. Para a escrita de programas mais simples e
curtos, torna-se necessária a definição de instruções mais complexas e numerosas; com isso, o
controlador torna-se correspondentemente mais elaborado. (Qual a ligação disso com arquiteturas CISC e
RISC?)
Instruções
A sequência de microoperações para buscar (“fetch”) uma instrução é:
Ciclo de
Relógio Microoperação Descrição
2
Após a busca, a parte da operação da instrução foi transferida para ROP e, se houver
operando envolvido na instrução, seu endereço é deixado na parte de endereço de RPG [RPG
(End)].
Instruções elementares:
Uma instrução elementar requer que apenas um único terminal (sinal) seja ativado
(colocado em nível 1), consistindo assim de uma única microoperação, podendo ser executada
num único ciclo de relógio.
Instrução
(microoperação) Descrição Mnemônico
Obs: Se a próxima instrução a ser buscada for SFZ e esta estiver no endereço E de memória,
durante sua busca, PC é incrementado (como acontece na busca de qualquer instrução) e tem-se
PC = E + 1. A seguir, a instrução SFZ é executada. Se F = 1, nada acontece e a próxima instrução
a ser buscada é a do endereço (E + 1). No entanto, se F = 0, ocorrerá um incremento adicional de
PC (PC = E + 1 + 1). Assim, a instrução do endereço (E + 1) será saltada (condicionalmente a F).
A instrução SFZ pode ser usada, por exemplo, em conjunto com a instrução JMP: um caminho ou
outro é selecionado; p.ex.:
3
endereço instrução
(E-1): (instr qualquer)
E : SFZ
(E+1): instr 1 (p.ex., JMP L1)
(E+2): instr 2 (p.ex., JMP L2)
….
L1 : (conjunto de instrs referentes a L1)
…. (ao final deste bloco, há uma instr “JMP L3”)
(fim do programa)
Outras Instruções:
Para transferir um operando da memória para RAC, ou seja, Carregar RAC, pode-se
utilizar a sequência de instruções CRA e ADD em conjunto.
b) ADDI end_m: adiciona ao conteúdo de RAC o operando do endereço contido no endereço end_m.
Ciclo de
Relógio Microoperação Descrição
4
Quando o endereço de um operando é obtido dessa forma (a partir de outro endereço) diz-
se que a instrução envolve um Endereço Indireto.
Depois de executar (JMP, end_m), a próxima instrução a ser buscada será a do local end_m e, a
partir daí, a máquina prosseguirá em ordem para as instruções em (end_m + 1), (end_m + 2), etc.
e) JMPI end_m: saltar (jump) para a instrução cujo endereço está armazenado no endereço
end_m (forma Indireta da instrução JMP).
Ciclo de
Relógio Microoperação Descrição
5
f) CSR end_m: chamar uma subrotina.
Ciclo de
Relógio Microoperação Descrição
1 RPG (End) REM Transferir end_m (endereço onde end_ret deve ser armazenado) p/ REM;
Uma Subrotina é uma lista de instruções armazenada num local específico de memória, na
ordem em que elas devem ser executadas.
Quando a instrução (CSR, end_m) é executada, o endereço de retorno “end_ret” ao
programa principal é armazenado no local de memória “end_m” e o processamento é desviado
para o endereço “end_m + 1”, ou seja, executa a subrotina buscando as próximas instruções a
partir do endereço “end_m + 1”. Este processo de desvio da sequência ordenada de instruções é
denominado Chamada de Subrotina. Na conclusão de uma chamada de subrotina deve haver
sempre um retorno ao local do programa principal “end_ret” de onde foi feita a chamada; isso
pode ser feito utilizando a instrução (JMPI, end_m).
end_m+k
end_m+k+1 JMPI end_m JMP indireto para end_m p/ recuperar end_ret
6
g) ISZ end_m: lê o valor em end_m, incrementa este valor e o reescreve no seu local original.
Se, depois de incrementar RPG, seu valor for zero (ou seja, Z=1), a próxima instrução é saltada.
Ciclo de
Relógio Microoperação Descrição
1 RPG (End) REM Transferir endereço (end_m) do valor a ser incrementado para REM;
A instrução ISZ pode ser usada para a execução repetitiva de uma sequência de
instruções, o chamado Laço de Programa. A última instrução da sequência deve ser uma
instrução de salto (JMP) para o começo do laço. A instrução ISZ é usada para interromper este
processo de retorno quando o laço tiver sido repetido um certo número de vezes: este número de
vezes é armazenado como um valor negativo em end_m e é incrementado até zero; assim, a
próxima instrução (JMP) é saltada, fazendo com que o programa avance para fora do laço.
P.ex.:
….
laço: instr 1
instr 2
….
ISZ Cont (variável para contar num de vezes)
JMP laço
1a. instr fora do laço
….
7
Exemplos de utilização dessas 16 instruções; os 4 bits mais à esquerda da instrução definem a
operação:
i) Programa para somar três números (representados em hexadecimal):
endereço
00 CRA x x
01 ADD 0 6 Carregar 1o. operando em RAC
02 ADD 0 7
03 ADD 0 8
04 STA 0 9
05 HLT x x
06 0 1 7
07 0 0 B
08 0 1 C
09 ? ? ? Para armazenar o resultado (03EH)
ii) Programa para somar três números usando endereços simbólicos de memória:
rótulos
CRA
ADD A
ADD B
ADD C
STA R
HLT
A 017
B 00B
C 01C
R ? ? ? (para armazenar resultado)
8
iii) Programa para subtrair dois números (pois não há instrução de subtração):
rótulos
CRA
ADD Sub (carregar subtraendo em RAC)
CTA
ITA
ADD Min (adicionar minuendo a RAC)
STA Dif
HLT
Sub 09C
Min 0B7
Dif ? ? ? (para armazenar a diferença 0B7 – 09C = 01BH)
v) Programa para somar 100 números colocados em locais sucessivos da memória (a partir de
EndOp), usando instruções ADDI, ISZ e JMP:
Rótulos
CRA
Laço ADDI End (carregar 1o. operando em RAC)
ISZ End (incrementar endereço dos operandos)
ISZ Cont (incrementar contador)
JMP Laço
STA Res
HLT
Res ? ? ? (para armazenar resultado)
End EndOp (endereço do próximo operando)
9
Cont F9C (número de operandos = -100)
EndOp Opn1 (endereço 1o. operando)
Opn2
.....
Opn100
vi) Programa para multiplicar dois números (pois não há instrução de multiplicação):
Rótulos
CRA
STA Parc (limpar local Parc)
Laço CRA
ADD Mor (carregar multiplicador em RAC)
ROR (colocar bit mais à direita em F)
STA Mor (rearmazenar multiplicador deslocado em Mor)
SFZ
JMP Um (saltar se F = 1)
JMP Zero (saltar se F = 0)
Um CRA
ADD Mnd (carregar multiplicando deslocado em RAC)
ADD Parc (somar ao resultado parcial)
STA Parc (rearmazenar resultado parcial em Parc)
CRF (p/ não inserir um 1 à direita de Mnd quando for multiplicar por 2)
Zero CRA
ADD Mnd (carregar multiplicando em RAC)
ROL
STA Mnd (rearmazenar multiplicando deslocado em Mnd)
ISZ Cont
JMP Laço
HLT
Cont FF4 (para o contador; inicialmente = -12)
Mnd XXX (para armazenar multiplicando)
Mor YYY (para armazenar multiplicador)
Parc ? ? ? (para produto de 12 bits)
O programa dado usa o esquema de deslocamento e adição. Uma vez que os dados são de 12 bits,
o processo de adicionar produtos parciais (quando F = 1) e de deslocamento deve ser feito 12
vezes
10
vii) Programa para chamada de subrotina de multiplicação, para calcular (N1*N2 + N3*N4)
Rótulos
A N1 (Primeiro operando)
B N2
C N3
D N4
Nbit FF4 (valor -12 a ser usado na subrotina MULT)
CRA
ADD A
STA Mnd (coloca N1 em “Mnd”)
CRA
ADD B
STA Mor (coloca N2 em “Mor”)
CSR MULT
CRA
ADD Parc
STA Res (carregar resultado parcial em “Res”)
CRA
ADD C
STA Mnd (coloca N3 em “Mnd”)
CRA
ADD D
STA Mor (coloca N4 em “Mor”)
CSR MULT
CRA
ADD Parc (carregar RAC com N3 * N4)
ADD Res (fazer N1*N2 + N3*N4)
HLT (parar, deixando o resultado final em RAC)
MULT End_ret (para armazenar endereço de retorno, que é diferente em cada chamada )
CRA
ADD Nbit
STA Cont
CRA (início do processo de multiplicação)
STA Parc
Laço CRA
ADD Mor
.....
.....
STA Mnd
ISZ Cont
JMP Laço (final da subrotina de multiplicação)
JMPI MULT (retorno indireto ao programa principal)
Cont ? ? ? (para o contador; inicialmente = -12)
Mnd ? ? ? (para armazenar multiplicando)
Mor ? ? ? (para armazenar multiplicador)
Parc ? ? ? (para produto de 12 bits)
Res ? ? ? (para soma de produtos)
11
Observação 1: CICLO DE MÁQUINA e CICLO DE INSTRUÇÃO
Define-se como CICLO DE MÁQUINA o número de ciclos de relógio, chamados ESTADOS,
necessários para um computador realizar a busca e a execução de uma instrução que envolve
apenas um acesso a dispositivo externo (por exemplo, memória). Se uma instrução necessita de
apenas um acesso externo (as 8 instruções elementares, JMP e HLT envolvem apenas um acesso
à memória, no ciclo de busca), ela tem um CICLO DE INSTRUÇÃO igual ao ciclo de máquina.
No entanto, se uma instrução necessita de mais de um acesso a dispositivos externos (as outras
instruções), ela terá um ciclo de instrução de dois ou mais ciclos de máquina.
Quando um programa está num formato que utiliza mnemônicos, ele está escrito em
LINGUAGEM DE MONTAGEM, chamado de PROGRAMA FONTE. Se este programa foi
convertido para sua forma em binário (0 e 1), ele está escrito em LINGUAGEM DE MÁQUINA,
chamado de PROGRAMA OBJETO (a versão do programa em hexadecimal também é
considerada como em linguagem de máquina).
12