Académique Documents
Professionnel Documents
Culture Documents
UM
Computador Ramses
1-1
cdigo
reg
modo
1 . 3 Modos de endereamento
Os modos de endereamento so quatro, codificados atravs dos dois bits menos significativos da
instruo:
00 - direto :
01 - indireto :
10 - imediato :
operando
1-2
memria
endereo
instruo
endereo
operando
memria
instruo
operando
Reg. X
instruo
memria
endereo
deslocamento
+
operando
1-3
Modo de
Endereamento Mnemnico
direto
n
indireto
n,I
imediato
#n
indexado
n,X
1 . 4 Conjunto de instrues
As instrues de manipulao de dados operam sobre um dos trs registradores da arquitetura,
codificados atravs dos bits 3 e 2 da instruo :
00 = A (registrador RA)
01 = B (registrador RB)
10 = X (registrador de ndice)
11 = nenhum registrador selecionado.
RAMSES possui 16 instrues, codificadas atravs dos quatro bits mais significativos da instruo,
conforme mostrado na tabela 1.2. Observe-se que as 11 instrues originais do NEANDER mantm
seu significado. Estas 11 instrues s foram acrescidas dos modos de endereamento e dos
registradores extras.
Cdigo
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Instruo
NOP
STR r end
LDR r end
ADD r end
OR r end
AND r end
NOT r
SUB r end
JMP end
JN end
JZ end
JC end
JSR end
NEG r
SHR r
HLT
Operao Executada
nenhuma operao
armazena registrador na memria - (store)
carrega registrador da memria - (load)
adio - soma memria ao registrador
"ou" (adio lgica) - resultado no registrador
"e" (multiplicao lgica) - resultado no registrador
inverte (complementa para 1) registrador
subtrao - subtrai memria do registrador
desvio incondicional - (jump)
desvio condicional se < - (jump on negative)
desvio condicional se = - (jump on zero)
desvio condicional se carry = 1 - (jump on carry)
desvio para subrotina - (jump subroutine)
troca de sinal - (negate)
deslocamento para a direita - (shift right)
parada - (halt)
Tabela 1.2 - Conjunto de instrues
1-4
As operaes efetuadas por cada uma das instrues podem ser vistas na tabela a seguir.
Instruo
NOP
STR r end
LDR r end
ADD r end
OR r end
AND r end
NOT r
SUB r end
JMP end
JN end
JZ end
JC end
JSR end
NEG r
SHR r
Operao Efetuada
Nenhuma operao
MEM(end) r
r MEM(end)
r MEM(end) + r
r MEM(end) OR r
r MEM(end) AND r
r NOT r
r r - MEM(end)
PC end
IF N=1 THEN PC end
IF Z=1 THEN PC end
IF C=1 THEN PC end
MEM(end) PC ; PC end+1
r -r
r r/2
1-5
Cdigos
N
n
n
n
n
n
n
n
n
Instruo
0010 - LDR
0011 - ADD
0100 - OR
0101 - AND
0110 - NOT
0111 - SUB
1101 - NEG
1110 - SHR
de condio
Z
C
z
z
c
z
z
z
z
c
z
c
z
c (lsb)
Hexa
LDR A 128
ADD A 129
ADD A 130
STR A 131
HLT
20
30
30
10
F0
80
81
82
83
Decimal
32
48
48
16
240
128
129
130
131
Observe que:
- os cdigos de mquina so exatamente os mesmos aceitos por NEANDER (mera coincidncia ?!).
- como existem trs registradores em RAMSES (RA, RB e RX), deve ser assinalado qual o
registrador a ser utilizado, usando os mnemnicos A, B e X.
- o modo de endereamento direto no precisa ser assinalado com nenhum smbolo especial no
programa simblico.
1 . 7 Subrotinas
Uma subrotina uma seqncia de instrues que pode ser ativada (chamada) de qualquer ponto de
um programa. Aps a execuo de uma subrotina, o controle retorna instruo seguinte quela que a
ativou. Em linguagens de baixo nvel, instrues que permitem a ativao de uma subrotina so
denominadas instrues de desvio para subrotina. JSR (jump to subroutine) no RAMSES um
exemplo.
1-6
Raul F. Weber & Carlos A. L. Lisboa
Quando JSR executada, o controle do programa passa subrotina que se encontra no endereo
indicado por JSR. Assim, uma chamada de subrotina se assemelha a um desvio incondicional (JMP).
A diferena entre JSR e JMP reside no seguinte fato: no final da execuo da subrotina deve ocorrer
um desvio para a posio que segue imediatamente a instruo que chamou essa subrotina. Esse
desvio chamado de retorno.
Existem vrias maneiras possveis de efetuar o retorno da subrotina para a posio adequada no
programa. Todas elas implicam em armazenar o endereo do retorno. O endereo de retorno o
endereo da instruo que segue a instruo que chamou a subrotina. Esse endereo o prprio valor
que o PC assume aps a decodificao da instruo de JSR .
A forma e o lugar em que est armazenado o endereo de retorno determinam as seguintes
caractersticas de uma subrotina:
a) recursividade - capacidade de um subrotina de se chamar a si prpria.
b) reentrncia - possibilidade de vrios programas em um ambiente multiprogramado
compartilharem uma nica cpia de uma mesma subrotina.
c) nmero de nveis de aninhamento de subrotinas - subrotinas aninhadas so subrotinas
que foram chamadas por subrotinas, que foram chamadas por subrotinas, que foram chamadas por
subrotinas ...
Em RAMSES, quando JSR executada, o endereo de retorno armazenado na primeira palavra da
subrotina (ou seja, a posio correspondente a end de JSR end). No existe instruo de retorno em
RAMSES. O retorno realizado atravs da instruo JMP, usando a primeira palavra da subrotina
como endereo indireto para desvio.
JSR end
MEM(end) PC
PC end+1
Exemplo:
Considere como exemplo uma subrotina que calcula o complemento de dois de um dado
armazenado no registrador B. Essa subrotina est armazenada na posio 60 de memria.
60 NOP % incio da subrotina
61 NOT B
62 ADD B #1
64 JMP 60,I % retorno da subrotina
A chamada dessa subrotina, no programa, feita atravs de JSR 60. Considere um programa que
tem um JSR 60 na posio 10 e outro na posio 16. Na posio 60 de memria (que corresponde
instruo NOP) ser armazenado:
- aps a execuo da instruo na posio 10, o valor 12,
- aps a execuo da instruo na posio 16, o valor 18.
Em ambos os casos, aps a execuo de JSR, o PC assume valor 61.
Nota: a subrotina mostrada acima ocupar 6 palavras na memria; como poderia ser codificada
para ocupar apenas 4 palavras, produzindo o mesmo resultado ?
Fim de exemplo.
1-7
Subrotina
NOP
STR A op1
STR B op2
<multiplicao>
LDR A resul
JMP multiplica,I
Em um segundo caso, poderiam ser utilizadas posies pr-estabelecidas de memria. Por exemplo,
sejam as posies param1, param2 e param3, conhecidas tanto pelo programa principal como pela
subrotina. Ento a chamada e o corpo da subrotina ficam:
Programa principal
LDR A primeiro_operando
STR A param1
LDR A segundo_operando
STR A param2
JSR multiplica
LDR A param3
STR A resultado
Subrotina
NOP
LDR A param1
STR A op1
LDR A param2
STR A op2
<multiplicao>
LDR A resul
STR A param3
JMP multiplica,I
LDR A multiplica,I
STR A param1
LDR multiplica
ADD A #1
STR multiplica
LDR A multiplica,I
STR A param2
LDR multiplica
ADD A #1
STR multiplica
<multiplicao>
LDR A multiplica,I
STR A param3
LDR B resul
STR B param3, I
LDR A multiplica
ADD A #1
STR A multiplica
JMP multiplica, I
; retorna da subrotina
lao:
total:=0
ponteiro := e
contador := n
if contador = 0, termina
total := total + mem(ponteiro)
ponteiro := ponteiro + 1
contador := contador 1
goto lao
1-9
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
Instruo
LDA 132
STA 130
LDA 129
STA ponteiro
LDA 128
STA 131
JZ 34
LDA 130
ADD mem(ponteiro)
STA 130
LDA ponteiro
ADD 134
STA ponteiro
LDA 131
ADD 133
STA 131
JMP 12
HLT
O programa praticamente uma traduo direta do programa de alto nvel. O nico ponto crtico est
na varivel ponteiro. O computador NEANDER no tem recursos para trabalhar com ponteiros, e
assim a soluo adotada fazer o programa se auto-modificar, ou seja, armazenar a varivel
ponteiro no prprio cdigo do programa. A instruo que soma a posio de memria indicado por
ponteiro est no endereo 16, o que significa que o campo de endereo est no byte 17. Esta a
posio da varivel ponteiro, e com isto o programa fica:
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
Instruo
LDA 132
STA 130
LDA 129
STA 17
LDA 128
STA 131
JZ 34
LDA 130
ADD 0
STA 130
LDA 17
ADD 134
STA 17
LDA 131
ADD 133
STA 131
JMP 12
HLT
1-10
Transcrevendo o programa para o RAMSES (sem realizar nenhuma alterao quanto a registradores e
modos de endereamento), tem-se a troca dos mnemnicos LDA e STA por LDR e STR e a indicao
explcita do uso do registrador A.
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
Instruo
LDR A 132
STR A 130
LDR A 129
STR A 17
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 17
STR A 130
LDR A 17
ADD A 134
STR A 17
LDR A 131
ADD A 133
STR A 131
JMP 12
HLT
A primeira alterao a ser realizada est no uso do modo imediato. Trs instrues utilizam posies
de memria para armazenar constantes. Substituindo a indicao do endereo da constante pela
prpria indicao da constante, economizam-se trs posies de memria na rea de dados. Os
endereos 132, 133 e 134 no so mais necessrios. As alteraes esto indicadas em negrito:
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
Instruo
LDR A #0
STR A 130
LDR A 129
STR A 17
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 17
STR A 130
LDR A 17
ADD A #1
STR A 17
LDR A 131
ADD A #255
STR A 131
JMP 12
HLT
1-11
A segunda alterao est no uso do modo indireto para implementar a varivel ponteiro. Para isto
utilizada o endereo de memria 132. Para acessar a posio de memria apontada pelo ponteiro
utiliza-se o modo de endereamento indireto. As alteraes esto indicadas em negrito.
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
Instruo
LDR A #0
STR A 130
LDR A 129
STR A 132
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 132,I
STR A 130
LDR A 132
ADD A #1
STR A 132
LDR A 131
ADD A #255
STR A 131
JMP 12
HLT
Instruo
LDR A #0
STR A 130
LDR A 129
STR A 132
LDR B 128
JZ 28
LDR A 130
ADD A 132,I
STR A 130
LDR A 132
ADD A #1
STR A 132
ADD B #255
JMP 10
HLT
Instruo
LDR A #0
STR A 130
LDR X 129
LDR B 128
JZ 22
LDR A 130
ADD A 0,X
STR A 130
ADD X #1
ADD B #255
JMP 8
HLT
A quinta alterao est no uso do registrador A para a varivel total. Esta alterao vem
naturalmente, uma vez que o registrador A no est sendo usando para nenhuma outra finalidade, e
assim no existe mais a necessidade de buscar o total da memria e atualiz-lo na memria a cada
passagem do lao. Com isto cada registrador tem uma funo especfica. O registrador A contm o
total, B contm o contador e X contm o ponteiro. Note-se que a varivel total, localizada no endereo
130, somente atualizada no fim do programa.
Endereo
0
2
4
6
8
10
12
14
16
Instruo
LDR A #0
LDR X 129
LDR B 128
JZ 16
ADD A 0,X
ADD X #1
ADD B #255
JMP 6
STR A 130
18
HLT
Por questes de legibilidade, a instruo ADD B #225 na realidade uma subtrao e pode ser
substituda por um SUB B #1. Com isto a verso final do programa fica:
Endereo
0
2
4
6
8
10
12
14
16
18
Instruo
LDR A #0
LDR X 129
LDR B 128
JZ 16
ADD A 0,X
ADD X #1
SUB B #1
JMP 6
STR A 130
HLT
1 . 9 Organizao
Devido aos quatro modos de endereamento, aos trs registradores (A, B e X) e s instrues extras,
a organizao do RAMSES mais complexa que a do NEANDER. A seguir so listadas as diversas
seqncias de transferncias necessrias para realizar cada instruo. Para simplificar estas
sequncias, o uso alternativo dos registradores A, B e X foi simplesmente indicado por r.
Fase de Busca, todas as instrues:
REM PC
Read; PC PC + 1
RI RDM
Execuo da instruo NOP
Nenhuma operao
Execuo da instruo STR
Modo Direto
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
REM RDM
RDM r
Write
REM PC
Read; PC PC +1
REM RDM
Read
REM RDM
RDM r
Write
PC PC +1
REM PC
Read; PC PC +1
REM RDM + X
RDM r
Write
Modo Direto
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
REM RDM
Read
r, N, Z RDM
REM PC
Read; PC PC +1
REM RDM
Read
REM RDM
Read
r, N, Z RDM
REM PC
Read; PC PC +1
r, N, Z RDM
REM PC
Read; PC PC +1
REM RDM + X
Read
r, N, Z RDM
1-14
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
REM RDM
Read
r,N,Z,C r + RDM
REM PC
Read; PC PC +1
REM RDM
Read
REM RDM
Read
r,N,Z,C r + RDM
REM PC
Read; PC PC +1
r,N,Z,C r + RDM
REM PC
Read; PC PC +1
REM RDM + X
Read
r,N,Z,C r + RDM
Modo Direto
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
REM RDM
Read
r,N,Z r or RDM
REM PC
Read; PC PC +1
REM RDM
Read
REM RDM
Read
r,N,Z r or RDM
REM PC
Read; PC PC +1
r,N,Z r or RDM
REM PC
Read; PC PC +1
REM RDM + X
Read
r,N,Z r or RDM
Execuo da instruo OR
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
REM RDM
Read
r,N,Z r and RDM
REM PC
Read; PC PC +1
REM RDM
Read
REM RDM
Read
r,N,Z r and RDM
REM PC
Read; PC PC +1
r,N,Z r and RDM
REM PC
Read; PC PC +1
REM RDM + X
Read
r,N,Z r and RDM
Modo Direto
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
REM RDM
Read
r,N,Z,C r - RDM
REM PC
Read; PC PC +1
REM RDM
Read
REM RDM
Read
r,N,Z,C r - RDM
REM PC
Read; PC PC +1
r,N,Z,C r - RDM
REM PC
Read; PC PC +1
REM RDM + X
Read
r,N,Z,C r - RDM
r, N, Z, C (r)
r, N, Z not(r)
r, N, Z, C shr(r)
1-15
Execues das instrues JMP, JN com N=1, JZ com Z=1, JC com C=1
Modo Direto
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read
PC RDM
REM PC
Read
REM RDM
Read
PC RDM
PC PC +1
REM PC
Read
PC RDM + X
Execues das instrues JN com N=1, JZ com Z=1, JC com C=1 (iguais execuo de JMP)
Modo Direto
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read
PC RDM
REM PC
Read
REM RDM
Read
PC RDM
PC PC +1
REM PC
Read
PC RDM + X
Modo Indireto
Modo Imediato
Modo Indexado
PC PC +1
PC PC +1
PC PC +1
PC PC +1
Modo Indireto
Modo Imediato
Modo Indexado
REM PC
Read; PC PC +1
temp RDM
REM temp
RDM PC
Write; PC temp + 1
REM PC
Read; PC PC +1
REM RDM
Read
temp RDM
REM temp
RDM PC
Write; PC temp + 1
PC PC +1
REM PC
Read; PC PC +1
temp RDM + X
REM temp
RDM PC
Write; PC temp + 1
1-16
A segunda organizao (figura 1.7) utiliza somente uma unidade aritmtica, tratado a soma do modo
indexado tambm na UAL das instrues. Isto altera significativamente os caminhos (ligaes) entre
os registradores, notadamente o PC e o RDM.
A terceira organizao (figura 1.8) introduz um elemento extra, o registrador auxiliar (Raux), mas
simplifica as ligaes entre os registradores. Note-se que nesta organizao todos os registradores
(com exceo do RI) recebem o seu valor da UAL, ou seja, todas as transferncias passam pela UAL
(com exceo de RI <- RDM).
A escolha final entre estas trs organizaes (e outras possveis) deve ser feita levando-se em conta
diversos fatores:
velocidade de execuo
nmero de elementos utilizados, seus tipos e conexes
elementos disponveis
potencialidade de incluso de novas instrues, registradores e modos de endereamento
facilidade de implementao de outras arquiteturas
facilidade de projeto
automatizao do projeto
Estes fatores saem do escopo desta apostilha, e sero analisados em outras disciplinas.
1-17
1-18
RA
carga RA
RB
carga RB
RX
carga RX
carry in
s1, s2
X
UAL
carga
N/Z
carga
C
P
C
DECOD.
Cd. Op.
carga PC
REG
Unidade de Controle
N Z C
s5, s6
incrementar PC
ME
RI
carga RI
s3, s4
R
E
M
RDM
MEM
s7
carga RDM
write
read
X+Y
X-Y
X and Y
X or Y
not X
neg X
shr X
Y
Operaes da UAL
carga REM
1-19
RA
carga RA
RB
carga RB
RX
carga RX
carry in
s1, s2
X
UAL
carga
N/Z
carga
C
P
C
DECOD.
Cd. Op.
carga PC
REG
Unidade de Controle
N Z C
incrementar PC
s5
ME
RI
carga RI
s3,s4
R
E
M
RDM
MEM
carga RDM
write
read
X+Y
X-Y
X and Y
X or Y
not X
neg X
shr X
Y
Operaes da UAL
carga REM
1-20
s1, s2
s3,s4
RA
carga RA
RB
carry in
UAL
carga
N/Z
Raux
RX
carga RB
carga Raux
carga RX
carga
C
P
C
DECOD.
Cd. Op.
carga PC
REG
Unidade de Controle
N Z C
incrementar PC
ME
RI
carga RI
R
E
M
RDM
MEM
carga RDM
write
read
Operaes da UAL
X
X+Y
X-Y
X and Y
X or Y
not X
neg X
shr X
Y
carga REM
1 . 1 0 Concluso
RAMSES, apesar de mais poderoso que NEANDER no tocante aos recursos de programao, ainda
um computador muito simples. Processadores modernos so ainda mais sofisticados que RAMSES,
apesar de possurem os mesmos elementos bsicos.
1 . 1 1 Exerccios
Os exerccios apresentados aqui devem ser programados em RAMSES. Para todos os programas
sugeridos, vale a seguinte conveno:
incio do programa
- posio 0 - 0H
incio da rea de dados - posio 128 - 80H
Essa conveno adotada apenas para facilitar a correo dos programas.
1. Explique a diferena entre as seguintes instrues:
LDR B 128
LDR B 128,I
LDR B #128
LDR B 128,X
Considerando que a posio 128 contm 130, a posio 130 contm 128, e o registrador X contm
2, qual o contedo dos registradores A, B e X aps a execuo de cada uma das instrues acima?
2. Somar duas variveis de 16 bits: faa um programa para somar duas variveis de 16 bits
representadas em complemento de dois. As variveis e o resultado esto dispostos segundo o mapa
de memria abaixo:
posio 128: byte mais significativo da primeira varivel
posio 129: byte menos significativo da primeira varivel
posio 130: byte mais significativo da segunda varivel
posio 131: byte menos significativo da segunda varivel
posio 132: byte mais significativo do resultado
posio 133: byte menos significativo do resultado
3. Limpeza de uma rea de memria de n posies: faa um programa para zerar um nmero qualquer
de posies consecutivas na memria. O nmero de posies determinado pelo contedo da
posio 128 de memria, e a posio inicial da memria a ser zerada dada pelo contedo da
posio 129 de memria.
posio 128: nmero de posies
posio 129: posio inicial
4. Movimento de blocos de n posies: faa um programa para mover (sem zerar a origem) um
nmero qualquer de posies consecutivas na memria. O nmero de posies determinado pelo
contedo da posio 128 de memria, a posio inicial do bloco de memria a ser movido dada
pelo contedo da posio 129 de memria e endereo inicial do bloco de destino dado pela
posio 130.
posio 128: nmero de posies
posio 129: posio inicial da origem
posio 130: posio inicial do destino
5. Multiplicao: faa um programa que multiplique duas variveis positivas de 8 bits e fornea o
resultado em 16 bits.
Raul F. Weber & Carlos A. L. Lisboa
1-21
1-22