Escolar Documentos
Profissional Documentos
Cultura Documentos
4 EXERCÍCIO DE REVISÃO
00H NOP
1 A← 0 01H inicio: LD 0
2 M[soma] ← A 02H ST [soma]
3 A← N 03H LD N
4 M[temp] ← A 04H ST [temp]
5 ( A < 0) : PC ← 13 05H JN fim
6 ( A = 0) : PC ← 13 06H teste: JZ fim
7 A ← A + M[soma] 07H ADD [soma]
8 M[soma] ← A 08H ST [soma]
9 A ← M[temp] 09H LD [temp]
10 A← A - 1 0AH SUB 1
11 M[temp] ← A 0BH ST [temp]
12 PC ← 6 0CH JMP teste
13 PC ← 13 0DH fim: JMP fim
Arquitectura de Sistema com processador de 8 Bits
Na tabela, o significado e o resultado dos dois programas são identicos, apenas a forma
de representação é diferente.
� A presença dos comentários, colocados desde o fim de uma instrução até ao final da
linha, começando com um caracter fixo; Utiliza-se habitualmente o ponto e vírgula.
� A presença da instrução NOP (No Operation) na posição 00H, serve apenas para
permitir o alinhamento do inicio do programa nas duas versões. Em RTL, começamos o
programa na posição 1, mas o programa em assembly começa na posição 0.
Arquitectura de Sistema com processador de 8 Bits
8 PROGRAMAÇÃO EM ASSEMBLY
� produto, factB e factA, serão células de memória cujo conteúdo vai variando
ao longo do tempo (o registo A é só para ir efetuando os cálculos intermédios).
� Cada célula de memória tem um endereço (por exemplo, produto fica em
Constantes
produto 0 0. M[produto] � 0
factA 5 1. M[factA] � 5
factB 4 2. M[factB] � 4
factB 0 7 3. Se (M[ factB] = 0) PC � 7
produto produto factA 4.M[produto] � M[produto] + M[ factA]
factB factB 1 5. M[ factB] � M[factB] – 1
3 6. PC � 3
7 7. PC � 7
Arquitectura de Sistema de 8 Bits
0 A�0
0 M[produto] � 0
1 M[produto] � A
2 A�5
1 M[factA] � 5
3 M[factA] � A
4 A�4
2 M[factB] � 4
5 M[factB] � A
3 Se ( M[factB] = 0 ) PC � 7 6 ( A = 0 ) : PC � 14
7 A � M[produto]
4 M[produto] � M[produto] + M[factA] 8 A � A + M[factA]
9 M[produto] � A
10 A � M[factB]
5 M[factB] � M[factB] – 1 11 A�A–1
12 M[factB] � A
6 PC � 3 13 PC � 6
7 PC � 7 14 PC � 14
Arquitectura de Sistema com processador de 8 Bits
Salto incondicional PC � 7
Salto condicional ( A = 0 ) : PC � 14
• Esta notação designa-se RTL (Register Transfer Language)
Arquitectura de Sistema com processador de 8 Bits
16 LINGUAGEM ASSEMBLY
ç
ç
Agora o programa está pronto a ser executado, o que pode ser feito de três formas:
Repare nas figuras abaixo que, já em execução passo-a-passo, a instrução acabada de executar é a que
vem imediatamente antes da assinalada a azul, no painel de controlo do processador. Pode-se nesta altura
constatar que as células da memória de dados (RAM), 31H e 32H, referenciadas por factA e factB, já
27 PROGRAMAÇÃO EM ASSEMBLY
Programa: Divisão Sejam os valores de
A divisão dividendo = 8 e
quociente = dividendo / divisor divisor = 2
; programa
início: LD ValorQuociente ; Carrega o registo A com o valor inicial quociente
ST [Quociente] ; Actualiza memória dados
LD [ValorDivisor] ; Carrega o registo A com o valor do divisor
ST [Divisor] ; Actualiza memória dados
LD [ValorDividendo ; Carrega o registo A com o valor do divisor
teste: ST [Dividendo] ; Actualiza memória dados
JZ fim ; se for zero o dividendo termina …
SUB [Divisor] ; Subtraia divisor do dividendo
ST [Dividendo] ; Actualiza Dividendo na memória
LD [Quociente] ; Carrega o registo A com o quociente
ADD 1 ; Actualiza o quociente
ST [Quociente] ; Actualiza Dividendo na memória
LD [Dividendo] ; Carrega novamente valor dividendo
JMP teste ; Salta para voltar a testar se já é zero
fim JMP fim ; termina o programa
���������������������������������������������������������������������������
���������������������������������������������������������������������������������
�����������������������������������������������������