Vous êtes sur la page 1sur 22

Captulo

UM
Computador Ramses

RAMSES possui todas as caractersticas do computador NEANDER e incorpora, adicionalmente,


recursos que visam facilitar sua programao. Estes recursos compreendem:

quatro modos de endereamento,


dois registradores de uso geral,
um registrador de ndice,
indicadores de carry, negativo e zero,
instrues adicionais (chamada de subrotina, negao e deslocamento de bits, etc ...).

RAMSES compatvel com NEANDER. Todos os programas desenvolvidos para NEANDER


tambm so executveis em RAMSES. A compatibilidade entre os dois computadores, entretanto, s
vlida em um sentido: programas RAMSES no rodam em NEANDER. Esta caracterstica
freqentemente encontrada em famlias de computadores comerciais.
Para que RAMSES execute programas escritos para NEANDER necessrio que os quatro bits
menos significativos da palavra de instruo de NEANDER sejam ocupados com zeros.
1 . 1 Caractersticas do computador RAMSES
O computador RAMSES tem as seguintes caractersticas:

Largura de dados e endereos de 8 bits


Dados representados em complemento de dois
2 registradores de uso geral (A e B), de 8 bits
1 registrador de ndice (X), de 8 bits
1 apontador de programa de 8 bits (PC)
1 registrador de estado com 3 cdigos de condio: negativo (N), zero (Z) e carry (C)

1 . 2 Formato das instrues


As instrues de RAMSES so formadas por um ou dois bytes, ou seja, ocupam uma ou duas
posies na memria (figura 1.1). O primeiro byte contm o cdigo (4 bits mais significativos), uma
referncia a um registrador (bits 3 e 2), e indicao de um modo de endereamento (bits 1 e 0). Nas
instrues que fazem referncia memria, o segundo byte contm um endereo ou um dado
imediato. Observe a semelhana existente com o formato de instrues do NEANDER (figura 1.2).

Raul F. Weber & Carlos A. L. Lisboa

1-1

cdigo

reg

modo

endereo ou dado imediato

Figura 1.1 - Formato das instrues de RAMSES

1 . 3 Modos de endereamento
Os modos de endereamento so quatro, codificados atravs dos dois bits menos significativos da
instruo:
00 - direto :

o endereo (8 bits) do operando segue a palavra de cdigo da instruo (figura


1.2).

01 - indireto :

o endereo (8 bits) do endereo do operando segue a palavra de cdigo da


instruo (figura 1.3).

10 - imediato :

o operando (8 bits) segue a palavra de cdigo da instruo (figura 1.4).

11 - indexado : o deslocamento (8 bits) que segue a palavra de cdigo da instruo somado ao


RX para formar o endereo do operando (figura 1.5). O deslocamento
representado em complemento de dois.
memria
instruo
endereo

operando

Figura 1.2 - Modo 0 de endereamento (direto)

1-2

Raul F. Weber & Carlos A. L. Lisboa

memria
endereo

instruo
endereo

operando

Figura 1.3 - Modo 1 (endereamento indireto)

memria
instruo
operando

Figura 1.4 - Modo 2 (endereamento imediato)

Reg. X
instruo

memria

endereo

deslocamento

+
operando

Figura 1.5 - Modo 3 (endereamento indexado)

Raul F. Weber & Carlos A. L. Lisboa

1-3

Nas instrues de desvio, os modos de endereamento fornecem o endereo de desvio, ao invs do


endereo de operando. Por essa razo, o modo de endereamento imediato ilegal para instrues de
desvio.
Na tabela 1.1, abaixo, so mostrados os mnemnicos usados para codificar os modos de
endereamento de RAMSES. Nesta tabela, n representa um endereo (modos 0, 1 e 3) ou um dado
(modo 2).
Cdigo
00
01
10
11

Modo de
Endereamento Mnemnico
direto
n
indireto
n,I
imediato
#n
indexado
n,X

Tabela 1.1 - Codificao dos modos de endereamento

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

Raul F. Weber & Carlos A. L. Lisboa

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

Tabela 1.3 - Aes executadas pelas instrues


Nas tabelas acima, end representa o endereo, tal como calculado pelo modo de endereamento, e r
indica o registrador utilizado na instruo (A, B ou X). No modo de endereamento imediato,
MEM(end) corresponde posio de memria que segue a instruo. Para instrues de desvio, o
modo imediato tratado exatamente como se fosse o modo direto.
1 . 5 Cdigos de condio
A unidade lgica e aritmtica de RAMSES fornece os seguintes cdigos de condio:
N - (negativo) - sinal do resultado
1 - resultado negativo
0 - resultado positivo
Z - (zero) - indica resultado igual a zero
1 - resultado igual a zero
0 - resultado diferente de zero
C - (carry) - carry-out de operaes aritmticas
1 - carry-out igual a um
0 - carry-out igual a zero
As instrues de RAMSES afetam os trs cdigos de condio (N, Z e C) de acordo com o mostrado
na tabela 1.4. As instrues no indicadas na tabela (STR, JMP, JN, JZ, JC, JSR, NOP e HLT) no
afetam os cdigos de condio. Observe-se que os cdigos de condio sempre refletem o estado da
ltima operao lgica ou aritmtica que foi executada, independente de qual registrador foi utilizado
(A, B ou X). Os cdigos de condio no refletem o contedo atual de nenhum registrador.

Raul F. Weber & Carlos A. L. Lisboa

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)

Tabela 1.4 - Alterao dos cdigos de condio


Na instruo SHR, o bit menos significativo do registrador deslocado para o bit de carry (C).
1 . 6 Programao em linguagem simblica
RAMSES possui um montador de linha, que permite a entrada de instrues na forma simblica,
usando os mesmos mnemnicos encontrados nas tabelas desse captulo. Este montador manipula
apenas uma instruo de cada vez. Endereamento simblico (rtulos/labels) no pode ser utilizado.
Erros durante a montagem da instruo so sinalizados atravs da linha de mensagens, e nestes casos
nenhum cdigo gerado (nem armazenado). Cuidado especial deve ser tomado nas regies superiores
da memria, pois o montador no passa automaticamente do endereo 256 para o endereo 0, somente
indicando erro (excedido limite da memria).
O exemplo a seguir ilustra os trs tipos possveis de entrada. O modo simblico obtido atravs do
montador, e os modos hexa e decimal so obtidos atravs do editor de memria.
Simblico

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.

Raul F. Weber & Carlos A. L. Lisboa

1-7

O mecanismo de chamada de subrotina em RAMSES no permite recursividade nem reentrncia.


Entretanto, no existe limite para o nmero de chamadas de subrotinas que podem ser aninhadas.
Uma conveno que deve ser adotada a forma como os parmetros so passados para a subrotina.
Um parmetro pode ser passado por valor (fornecendo-se o valor de uma varivel) ou por nome
(fornecendo-se o endereo da varivel). Alm disso, os parmetros podem ser passados atravs de
registradores, posies pr-estabelecidas de memria, estrutura de dados pr-estabelecida (tambm na
memria) e vrios outros mtodos, inclusive misturando-se os mtodos entre si (alguns parmetros
por registrador e outros por memria, por exemplo).
Seja por exemplo uma subrotina que realize multiplicao. Esta rotina recebe os dois valores a serm
multiplicados e devolve o resultado. Por simplicidade, assuma-se que todos os operandos so de oito
bits, inteiros positivos. Os parmetros no programa principal esto em trs posies de memria:
primeiro_operando, segundo_operando e resultado. A subrotina utiliza trs outras posies: op1, op2
e resul.
Um primeiro caso poderia envolver somente registradores: os valores dos operandos so recebidos
nos registradores A e B, e o resultado devolvido no registrador A (note que isto uma conveno inmeras variaes so possveis).
Programa principal
LDR A primeiro_operando
LDR B segundo_operando
JSR multiplica
STR A resultado

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

Outro esquema interessante colocar os parmetros da subrotina imediatamnte aps a instruo de


desvio. A subrotina utiliza ento o endereo de retorno como ponteiro para esta lista de parmetros.
No caso do exemplo de multiplicacao, a chamada poderia ser:
JSR multiplica
<valor do primeiro operando>
<valor do segundo operando>
<endereo do resultado>
<< instruo seguinte >>
A subrotina obteria os parmetros e atualizaria o endereo de retorno com o seguinte programa:
multiplica: NOP
1-8

Raul F. Weber & Carlos A. L. Lisboa

LDR A multiplica,I
STR A param1
LDR multiplica
ADD A #1
STR multiplica

; obtem valor do primeiro operando

LDR A multiplica,I
STR A param2
LDR multiplica
ADD A #1
STR multiplica

; obtem valor do segundo operando

; atualiza endereo de retorno

; atualiza endereo de retorno

<multiplicao>
LDR A multiplica,I
STR A param3
LDR B resul
STR B param3, I
LDR A multiplica
ADD A #1
STR A multiplica

; obtem endereco do terceiro operando

JMP multiplica, I

; retorna da subrotina

; obtem resultado da rotina


; salva resultado no endereo do terceiro parmetro
; atualiza endereo de retorno

Em linguagens de baixo nvel, a passagem de parmetros de e para subrotinas feita obedecendo


alguma conveno estabelecida pela equipe de programadores. Podem ser reservados alguns
registradores ou alguma rea de memria para tal fim. Em linguagens de alto nvel, tambm se segue
alguma conveno, estabelecida pelo compilador.
1 . 8 Programao RAMSES
Os recursos adicionais do RAMSES sobre o NEANDER permitem escrever programas mais curtos,
mais rpidos e mais legveis. Para exemplificar isto, considere-se um programa NEANDER para
somar (totalizar) n posies consecutivas de memria, a partir do endereo inicial e. No feita
nenhuma consistncia sobre os valores de n e e. Em alto nvel, o programa seria:

lao:

total:=0
ponteiro := e
contador := n
if contador = 0, termina
total := total + mem(ponteiro)
ponteiro := ponteiro + 1
contador := contador 1
goto lao

Considerando a seguinte rea de dados na memria:


Endereo
Contedo
128
n
129
e
130
total
131
contador
132
constante 0 (zero)
133
constante 255 (-1)
134
constante 1 (um)
Um possvel programa NEANDER seria:
Raul F. Weber & Carlos A. L. Lisboa

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

; inicializa (zera) o total


; inicializa ponteiro
; inicializa contador
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

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

; inicializa (zera) o total


; inicializa ponteiro
; na posio 17
; inicializa contador
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

No programa acima, dois pontos so importantes:


Quatro instrues (endereos 4, 16, 20 e 24) manipulam um endereo (17) que faz parte do
prprio programa.
A instruo do endereo 16 (ADD 17) ter o seu campo de endereo inicializado pela instruo do
endereo 6 (STA 17) para o valor de e; e depois consecutivamente incrementado pelas instrues
20 a 24 (LDA 17, ADD 134, STA 17) para e+1, e+2, ... e+31.

1-10

Raul F. Weber & Carlos A. L. Lisboa

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

; inicializa (zera) o total


; inicializa ponteiro
; na posio 17
; inicializa contador
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

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

; inicializa (zera) o total


; inicializa ponteiro
; na posio 17
; inicializa contador
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

rea de dados na memria fica ento:


Endereo
Contedo
128
n
129
e
130
total
131
contador

Raul F. Weber & Carlos A. L. Lisboa

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

; inicializa (zera) o total


; inicializa ponteiro
; na posio 132
; inicializa contador
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

rea de dados na memria:


Endereo
Contedo
128
n
129
e
130
total
131
contador
132
ponteiro
A terceira alterao est no uso do registrador B. Como RAMSES possui trs registradores, as
variveis (total, contador e ponteiro) no necessitam estar localizadas necessariamente na memria.
Transferindo a varivel contador para o registrador B economiza-se uma posio na rea de dados e
as instrues de transferncia de e para a memria desta varivel (posies 10, 26 e 30 no programa
acima). Assim, o programa ocupa menos memria e executa mais rpido. As alteraes relevantes
esto marcadas em negrito (observe-se que alguns endereos so modificados pelo fato que o
programa diminuiu).
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
1-12

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

; inicializa (zera) o total


; inicializa ponteiro
; inicializa contador (reg B)
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

Raul F. Weber & Carlos A. L. Lisboa

rea de dados na memria:


Endereo
Contedo
128
n
129
e
130
total
132
ponteiro
A quarta alterao est no uso do registrador X para a varivel ponteiro. Isto libera a posio 132 da
rea de dados, mas requerer uma pequena alterao no modo de endereamento. J que o ponteiro est
no registrador X, o modo indireto deve ser substitudo pelo indexado, onde o endereo base o
endereo zero. Note-se que com isto no est se utilizando o modo indexado na sua capacidade plena
(soma de dois valores), mas sim como um modo registrador indireto.
O programa novamente diminui de tamanho e tem seu tempo de execuo reduzido. Isto
consequncia da passagens de variveis de memria para registradores, o que permite eliminar uma
srie de instrues de movimentao de dados (LDR e STR).
rea de dados na memria fica:
Endereo
Contedo
128
n
129
e
130
total
E o programa fica (as alteraes relevantes esto marcadas em negrito):
Endereo
0
2
4
6
8
10
12
14
16
18
20
22

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

; inicializa (zera) o total


; inicializa ponteiro (reg X)
; inicializa contador (reg B)
; testa se contador zero
; carrega total no acumulador
; soma com posio de memria
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao

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

Raul F. Weber & Carlos A. L. Lisboa

; inicializa (zera) total (reg A)


; inicializa ponteiro (reg X)
; inicializa contador (reg B)
; testa se contador zero
; soma com posio de memria
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao
; atualiza total
1-13

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

; inicializa (zera) total (reg A)


; inicializa ponteiro (reg X)
; inicializa contador (reg B)
; testa se contador zero
; soma com posio de memria
; incrementa ponteiro
; decrementa contador
; retorna ao incio do lao
; atualiza total

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

Execuo da instruo LDR

1-14

Raul F. Weber & Carlos A. L. Lisboa

Execuo da instruo ADD


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

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

Execuo da instruo AND


Modo Direto

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

Execuo da instruo SUB

Execuo da instruo NEG


Execuo da instruo NOT
Execuo da instruo SHR

r, N, Z, C (r)
r, N, Z not(r)
r, N, Z, C shr(r)

Raul F. Weber & Carlos A. L. Lisboa

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

Execues das instrues JN com N=0, JZ com Z=0, JC com C=0


Modo Direto

Modo Indireto

Modo Imediato

Modo Indexado

PC PC +1

PC PC +1

PC PC +1

PC PC +1

Execuo da instruo JSR


Modo Direto

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

Execuo da instruo HLT


Parar o processamento
As trs figuras seguintes mostram trs possveis organizaes que implementam as sequncias acima.
Note-se que os recursos utilizados em termos de registradores, seletores e unidades aritmticas variam
em funo da forma exata como as diversas seqncias so implementadas.
A primeira organizao (figura 1.6) utiliza duas unidades aritmticas. Uma, com maiores capacidades,
utilizada para implementar as instrues, e a outra, mais especializada, usada especificamente para
tratar o modo de endereamento indexado.

1-16

Raul F. Weber & Carlos A. L. Lisboa

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.

Raul F. Weber & Carlos A. L. Lisboa

1-17

Figura 1.6 - Organizao do RAMSES com duas unidades aritmticas

1-18

Raul F. Weber & Carlos A. L. Lisboa

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

Sinais de Controle para a UCP

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

Figura 1.7 - Organizao do RAMSES com uma nica unidade aritmtica

Raul F. Weber & Carlos A. L. Lisboa

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

Sinais de Controle para a UCP

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

Figura 1.8 - Organizao do RAMSES com registrador auxiliar

1-20

Raul F. Weber & Carlos A. L. Lisboa

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

Sinais de Controle para a UCP

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

posio 128: multiplicando


posio 129: multiplicador
posio 130: resultado (byte mais significativo)
posio 131: resultado (byte menos significativo)
6. Multiplicao: faa um programa que multiplique duas variveis positivas de 8 bits e fornea o
resultado em 8 bits, indicando a ocorrncia de overflow.
posio 128: multiplicando
posio 129: multiplicador
posio 130: resultado
posio 131: contedo = 0H quando no ocorreu overflow
contedo = FFH quando ocorreu overflow
7. Converso de cdigo: faa um programa que converta 3 dgitos numricos codificados em ASCII
em um nmero binrio positivo em complemento de dois armazenado em 16 bits e indique a
ocorrncia de overflow na converso.
posio 129: dgito ASCII mais significativo
at
posio 131: dgito ASCII menos significativo
posio 132: resultado
posio 133: contedo = 0H quando no ocorreu overflow
contedo = FFH quando ocorreu overflow
8. Converso de cdigo: idem ao (6) mas com a posio 128 contendo um caracter ASCII espao ou
"+" indicando nmeros positivos e "-" indicando nmeros negativos. O resultado ser positivo ou
negativo, dependendo desse caracter.
9. Subrotinas: o programa (6) deve ser escrito como uma subrotina e ser chamado em um programa
principal (por exemplo, o do exerccio 8).
10. Subrotinas: escrever uma subrotina para contar o nmero de bits que esto com valor 1 em uma
palavra cujo endereo est armazenado na posio 128 da memria.

1-22

Raul F. Weber & Carlos A. L. Lisboa

Vous aimerez peut-être aussi