Você está na página 1de 31

Arquitectura de Sistema com processador de 8 Bits

1 Introdução à Programação em Linguagem Assembly

PROGRAMAÇÃO EM LINGUAGEM ASSEMBLY


Arquitectura de Sistema com processador de 8 Bits

2 PROGRAMAÇÃO EM LINGUAGEM ASSEMBLY

Vamos, através de alguns exemplos, ilustrar algumas das vantagens da


programação em linguagem assembly, efectuando uma comparação com a
especificação em RTL, já usada no programa iniciado na página 43 e que será

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
reproduzido aqui, para a devida análise do respectivo programa em assembly.

1. A ← 0 (inicializa A com zero)


2. M[ soma ] ← A (inicializa soma com zero)
3. A ← N (inicializa A com o valor de N)
4. M[ temp ] ← A (inicializa temp na memória)
5. (A < 0) : PC ← 13 (se tem for negativo, salta para o fim)
6. (A = 0) : PC ← 13 (se tem for zero, salta para o fim)
7. A ← A + M[ soma ] (adiciona soma ao registo A, que é igual a temp)
8. M[ soma ] ← A (actualiza soma na memória)
9. A ← M[ temp ] (vai buscar temp, de novo)
10. A ← A – 1 (decrementa A)
11. M[ temp ] ← A (actualiza temp na memória)
12. PC ← 6 (salta para o endereço 6)
13. PC ← 13 ( fim do programa)

Vejamos, na página seguinte, o programa em instruçõs de linguagem assembly.


Arquitectura de Sistema com processador de 8 Bits

3 PROGRAMAÇÃO EM LINGUAGEM ASSEMBLY

N EQU 4 ; Valor pretendido para N


soma EQU 30 ; Endereço da célula de memória soma

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
temp EQU 31 ; Endereço da célula de memória temp

inicio: LD 0 ; Inicializa A com zero


ST [soma] ; Inicializa soma com zero
LD N ; Inicializa A com o valor de N
ST [temp] ; Actualiza temp na memória
JN fim ; Se A for negativo, salta para o fim
teste: JZ fim ; Se A for zero, salta para o fim
ADD [soma] ; Adiciona soma ao registo A, que é igual a temp
ST [soma] ; Actualiza soma na memória
LD [temp] ; Vai buscar temp, de novo
SUB 1 ; Decrementa A
ST [temp] ; Actualiza temp na memória
JMP teste ; Salta … vai ver se temp já chegou a zero
fim: JMP fim ; Fim do programa

A tabela da página seguinte, mostra a correspondência de instruções e


endereços entre o algorítmo em RTL e o programa em linguagem assembly.
Arquitectura de Sistema com processador de 8 Bits

4 EXERCÍCIO DE REVISÃO

Passo do Algorítmo (RTL) Endereço na Instruções em Assembly


Algorítmo Memória
N EQU 4

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
soma EQU 30
temp EQU 31

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

5 PROGRAMAÇÃO EM ASSEMBLY: Programa: Soma

Opcode Assembly Endereço Programa em Assembly


00H LD valor 00H NOP
01H LD [endereço] 01H início: LD 0 00 00
02H ST [endereço] 02H ST [soma] 02 30
03H ADD valor 03H LD N 00 04
04H ADD [endereço] 04H ST [temp] 02 31
05H SUB valor 05H JN fim 0D 0D
06H SUB [endereço] 06H teste: JZ fim 0C 0D
07H AND valor 07H ADD [soma] 04 30
08H AND [endereço] 08H ST [soma] 02 30
09H OR valor 09H LD [temp] 01 31
0AH OR [endereço] 0AH SUB 1 05 01
0BH JMP endereço
0BH ST [temp] 02 31
0CH JZ endereço JMP teste
0CH 0B 06
0DH JN endereço
0DH fim: JMP fim 0B 0D
0EH NOP
0EH
Arquitectura de Sistema com processador de 8 Bits

6 SIMULAÇÃO DO CIRCUITO COMPLETO

Na tabela, o significado e o resultado dos dois programas são identicos, apenas a forma
de representação é diferente.

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
Existem algumas diferenças entre as duas representações do programa, que importa
referir:

� A atribuição de valores numéricos às constantes simbólicas (seja numa instrução que


requer um valor de dados, como na instrução LD constante, seja numa instrução que
requer endereço, como LD [endereço]). As primeiras linhas do programa de assembly
têm essa função. EQU é uma directiva para o assembler (também conhecida por
pseudoinstrução) que não gera instruções em código-máquina. Indica apenas ao
assembler que a constante simbólica que aparece antes da directiva tem o valor
indicado depois. Durante todo o resto do programa, a constante simbólica (por
exemplo, N) é equivalente ao seu valor numérico (neste caso, 4). Normalmente as
constantes 0 e 1, usam-se como constantes numéricas e não simbólicas, por serem
usadas com extrema frequência. Uma das vantagens de se ter constantes simbólicas é
que se se quiser alterar o valor da constante basta mudar o valor na directiva EQU,
enquanto se se usarem apenas valores numéricos tem de se alterar o valor em todas as
instruções em que ela aparecer, o que pode estar sujeito a erros ( como por exemplo,
alterar inadvertidamente outro número não relacionado mas que por coincidência
tinha o mesmo valor) e omissões (esquecer de alterar num ou mais sítios)
Arquitectura de Sistema com processador de 8 Bits

7 SIMULAÇÃO DO CIRCUITO COMPLETO

� 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.

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
� O valor das constantes de endereço de programa, usadas nas instruções de salto,
poderia ser especificado por uma directiva EQU. Porém, tal implicaria que o
programador andasse a contar instruções para saber qual o endereço para onde
deveria saltar. Os assemblers poupam essa tarefa através do uso das etiquetas (labels),
tais como inicio, teste e fim. À medida que vai convertendo as instruções assembly
para instruções em código-máquina, o assembler vai contando os endereços e sabe
em que endereço está a instrução, o que permite atribuir automaticamente os valores
correctos às etiquetas como constantes simbólicas nas instruções de salto. Tem
também a vantagem de que se forem introduzidas novas instruções ao programa, os
valores das etiquetas são alterados automaticamente, sem necessidade de
intervenção ( com a possibilidade de erros ) por parte do programador.

� 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

Exemplo 1 Sejam os valores de


Programa: Multiplicação factA = 5 e
A multiplicação factB = 4

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
produto = factA x factB
é feita com base em somas sucessivas, tal que: logo
produto = 5 x 4
produto = factA + factA + … + factA
=5+5+5+5
< ----- factB vezes ------ > = 20

1. produto � 0 (inicializa produto com zero)


2. factA � 5 (inicializa factA com o valor 5)
3. factB �4 (inicializa factB com o valor 4)
4. Se ( factB = 0 ) salta para 8 (se factB for zero, salta para o fim)
5. produto � produto + factA (adiciona factA a produto)
6. factB � factB – 1 (decrementa factB)
7. Salta para 4 (salta para o passo 4)
8. Salta para 8 (fim do programa)
Arquitectura de Sistema com processador de 8 Bits

9 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

� 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

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
30H, factA em 31H e factB em 32H; as células de memória com os endereços
31H e 32H, vão, por exemplo, ser inicializadas com os valores, 5 e 4,
respectivamente)

1. M[30H] � 0 (inicializa produto com zero)


2. M[31H] � 5 (inicializa factA com o valor 5)
3. M[32H] � 4 (inicializa factB com o valor 4)
4. Se (M[32H] = 0) salta para 8 (se factB for zero, salta para o fim)
5. M[30H] � M[30H] + M[31H] (adiciona factA a produto)
6. M[32H] � M[32H] – 1 (decrementa factB)
7. Salta para 4 (salta para o passo 4)
8. Salta para 8 (fim do programa)
Arquitectura de Sistema com processador de 8 Bits

10 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação


� Endereços só com números, é muito confuso!
� Constante simbólica = identificador com um valor
� Define-se uma vez e depois pode usar-se como se fosse o número com que

Microprocessadores I: Introdução Arquitetura 8 Bitss


ela foi definida.

Chicapa, E.. - 2020


produto EQU 30H (definição do endereço da variável soma)
factA EQU 31H (definição do endereço da variável factA)
factB EQU 32H (definição do endereço da variável factB)

1. M[produto] � 0 (inicializa produto com zero)


2. M[factA] � 5 (inicializa factA com o valor 5)
3. M[factB] � 4 (inicializa factB com o valor 4)
4. Se (M[factB] = 0) salta para 8 (se factB for zero, salta para o fim)
5. M[produto] � M[produto] + M[factA] (adiciona factA a produto)
6. M[factB] � M[factB] – 1 (decrementa factB)
7. Salta para 4 (salta para o passo 4)
8. Salta para 8 (fim do programa)
Arquitectura de Sistema com processador de 8 Bits

11 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação


� As variáveis ficam na memória de dados
� As instruções ficam na memória de instruções
� Cada passo do algoritmo é uma instrução

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
� O número do passo é o endereço na memória de instruções

produto EQU 30H (definição do endereço da variável soma)


factA EQU 31H (definição do endereço da variável factA)
factB EQU 32H (definição do endereço da variável factB)

1. M[produto] � 0 (inicializa produto com zero)


2. M[factA] � 5 (inicializa factA com o valor 5)
3. M[factB] � 4 (inicializa factB com o valor 4)
4. Se (M[factB] = 0) salta para 8 (se factB for zero, salta para o fim)
5. M[produto] � M[produto] + M[factA] (adiciona factA a produto)
6. M[factB] � M[factB] – 1 (decrementa factB)
7. Salta para 4 (salta para o passo 4)
8. Salta para 8 (fim do programa)
Arquitectura de Sistema com processador de 8 Bits

12 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação


� O Contador de Programa (PC),
vai evoluindo instrução a instrução (mas os endereços das memórias
começam em 0 e não em 1).

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
� Após cada instrução, o PC contém o endereço da instrução seguinte.
� “Saltar” equivale a escrever um novo valor no PC.

produto EQU 30H (definição do endereço da variável soma)


factA EQU 31H (definição do endereço da variável factA)
factB EQU 32H (definição do endereço da variável factB)

0. M[produto] � 0 (inicializa produto com zero)


1. M[factA] � 5 (inicializa factA com o valor 5)
2. M[factB] � 4 (inicializa factB com o valor 4)
3. Se (M[factB] = 0) PC � 7 (se factB for zero, salta para o fim)
4. M[produto] � M[produto] + M[factA] (adiciona factA a produto)
5. M[factB] � M[factB] – 1 (decrementa factB)
6. PC � 3 (salta para o passo 3)
7. PC � 7 (fim do programa)
Arquitectura de Sistema com processador de 8 Bits

13 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Agora vamos analisar as constantes usadas no programa …


� Cada instrução pode ter de 1 a 3 constantes.

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
� Mas o tamanho das instruções:
� Se é variável (pode complicar o controlo), ou
� Se é fixo com 3 constantes (pode provocar desperdício de memória).

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

14 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação


A solução para o problema colocado em relação ás constantes passa por:
� Decompôr instruções com várias constantes em instruções mais simples, cada uma só
com uma constante.

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
� Usando-se um registo auxiliar (A) para guardar valores entre instruções

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

15 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Que operações são necessárias?


Para correr o programa em análise, o hardware tem de suportar as seguintes
operações:

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
Operação Exemplo
Escrever uma constante no registo A A�0
Armazenar o registo A na memória M[produto] � A
Ler uma célula de memória e escrever no
registo A A � M[produto]

Operação com o registo A e uma célula de


memória como operandos A � A + M[factA]

Operação com o registo A e uma constante


como operandos A�A–1

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
ç
ç

LD valor Load (imediato) 00H A � valor

Microprocessadores I: Introdução Arquitetura 8 Bitss


Transferência de

Chicapa, E.. - 2020


LD [endereço] Load (memória) 01H A � M[endereço]
dados
ST [endereço] Store (memória) 02H M[endereço] � A

ADD valor Add (imediato) 03H A � A + valor

ADD [endereço] Add (memória) 04H A � A + M[endereço]


Operações
aritméticas SUB valor Subtract (imediato) 05H A � A – valor

SUB [endereço] Subtract (memória) 06H A � A – M[endereço]

AND valor AND (imediato) 07H A � A � valor


Operações AND [endereço] AND (memória) 08H A � A � M[endereço]
lógicas OR valor OR (imediato) 09H A � A � valor
OR [endereço] OR (memória) 0AH A � A � M[endereço]
JMP endereço Jump 0BH PC � endereço
Saltos
JZ endereço Jump if zero 0CH (A=0) : PC � endereço
JN endereço Jump if negative 0DH (A<0) : PC � endereço
Diversos NOP No operation 0EH
Arquitectura de Sistema com processador de 8 Bits

17 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Programa em RTL Programa em assembly


0 A�0 00H início: LD 0

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
1 M[produto] � A 01H ST [produto]
2 A�5 02H LD 5
3 M[factA] � A 03H ST [factA]
4 A�4 04H LD 4
5 M[factB] � A 05H ST [factB]
6 (A < 0) : PC � 12 06H teste: JZ fim
7 A � M[produto] 07H LD [produto]
8 A � A + M[factA] 08H ADD [factA]
9 M[produto] � A 09H ST [produto]
10 A � M[factB] 0AH LD [factB]
11 A�A–1 0BH SUB 1
12 M[factB] � A 0CH ST [factB]
13 PC � 6 0DH JMP teste
14 PC � 12 0EH fim: JMP fim
Arquitectura de Sistema com processador de 8 Bits

18 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Opcode Assembly Endereço Programa em Assembly


00H LD valor 00H início: LD 0 00 00
01H LD [endereço] 01H ST [produto] 02 30
02H ST [endereço] 02H LD 5 00 05
03H ADD valor 03H ST [factA] 02 31
04H ADD [endereço] 04H LD 4 00 04
05H SUB valor 05H ST [factB] 02 32
06H SUB [endereço] 06H teste: JZ fim 0C 0E
07H AND valor 07H LD [produto] 01 30
08H AND [endereço] 08H ADD [factA] 04 31
09H OR valor 09H ST [produto] 02 30
0AH OR [endereço] 0AH LD [factB] 01 32
0BH JMP endereço
0BH SUB 1 05 01
0CH JZ endereço
0CH ST [factB] 02 32
0DH JN endereço
0EH NOP 0DH JMP teste 0B 06
0EH fim: JMP fim 0B 0E
Arquitectura de Sistema com processador de 8 Bits

19 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Uma vez em posse do programa assembly da operação que vimos a analisar


estaremos em condições de mostrar
o funcionamento do Processador de 8 bits, com programação em linguagem
assembly , visando

� Montagem do circuito com um módulo que simula o Processador ao nível


das instruções;

� Funcionamento individual das várias instruções do processador, em termos


dos recursos de hardware e sinais de controlo que envolvem;

� Execução do programa em ambiente de desenvolvimento:


• Execução das instruções passo a passo (single-step), verificando a
evolução dos registos A e PC;
• Utilização de pontos de paragem (breakpoints);
• Modificação manual do valor dos registos durante a execução do
programa (após uma paragem motivada por execução passo a passo
ou ponto de paragem).
Arquitectura de Sistema com processador de 8 Bits

20 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação


A figura abaixo tem como principal elemento o circuito do processador, aqui designado
Pepe8, para além dos módulos das memórias de instruções PROM e de dados RAM .
O módulo Pepe8 simula o funcionamento dos blocos de hardware que o constituem e que já

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
foram objecto da nossa análise em aulas anteriores
Arquitectura de Sistema com processador de 8 Bits

21 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

• O módulo Reset dá um impulso na


entrada Reset do PEPE-8 quando se faz

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
START na simulação, para inicializar o
processador.

• A simulação deve começar com o


accionamento do START do painel de
controlo do módulo relógio

• Para carregar o programa assembly,


deve-se abrir o painel de controlo do
PEPE8, carregar na opção COMPILE e
escolher o arquivo fonte (extensão
.asm); Ao ser carregado este dará
lugar ao arquivo de código de mesmo
nome (com a extensão .cod) e que
estará localizada na mesma pasta que
o arquivo fonte
Arquitectura de Sistema com processador de 8 Bits

22 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

• Deverá carregar o código na


memória de instruções PROM, abrindo
o seu painel de controlo e escolher a

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
opção
Code -> Load Binary

Neste momento, já aparece na PROM


as instruções em binário a executar
pelo PEPE-8

• No painel do PEPE-8, deverá


carregar no botão “Parse Mem”, o que
faz o PEPE-8 ler a PROM e actualizar a
sua janela com as instruções, que
apresenta em linguagem assembly por
conversão a partir das instruções em
binário. No entanto, note que já não
tem informação sobre as etiquetas e
símbolos definidos com EQU no
programa fonte
Arquitectura de Sistema com processador de 8 Bits

23 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

A figura abaixo mostra a memória de instruções, PROM com


as instruções, em hexadecimal, carregadas.

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
Arquitectura de Sistema com processador de 8 Bits

24 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Após o Parse Mem, as instruções em o código binário, da PROM aparecem


convertidas, em assembly, no painel do processador, para iniciar a sua
execução.

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
Arquitectura de Sistema com processador de 8 Bits

25 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

Agora o programa está pronto a ser executado, o que pode ser feito de três formas:

• Passo a passo (single-step), ou instrução a instrução

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
• Execução contínua até um ponto de paragem (breakpoint)
• Execução contínua

O painel do PEPE-8 mostra o conteúdo do PC e do registo A e indica ainda se o valor do A é


zero (Z) ou negativo (N).
O conteúdo da memória de dados pode ser verificado com duplo clique na RAM.

Exemplo de Execução passo a passo


Carregue no botão STEP do painel do PEPE-8. De cada vez que o faz, avança uma única
instrução. A próxima instrução a ser executada aparece com uma barra azul.
Vá carregando em STEP e verifique o seguinte (se necessário, execute a simulação várias
vezes para ver os vários aspectos):

• No painel do PEPE-8, o PC vai variando de forma consistente com a barra azul;


• No painel do PEPE-8, o registo A vai indicando o seu valor;
• No painel da RAM, as instruções ST alteram o conteúdo da RAM nos endereços
indicados (30H, 31H e 32H, que correspondem às variáveis produto, factA e factB);
Arquitectura de Sistema com processador de 8 Bits

26 PROGRAMAÇÃO EM ASSEMBLY: Programa Multiplicação

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á

Microprocessadores I: Introdução Arquitetura 8 Bitss


aparecem com os seus valores iniciais, respectivamente, 5 e 4, como seria de esperar; Atente igualmente aos

Chicapa, E.. - 2020


valores de PC e do registo A, que reflectem o estado actual de execução do programa
Arquitectura de Sistema com processador de 8 Bits

27 PROGRAMAÇÃO EM ASSEMBLY
Programa: Divisão Sejam os valores de
A divisão dividendo = 8 e
quociente = dividendo / divisor divisor = 2

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
é feita com base em subtrações sucessivas, tal que:
quociente = ((dividendo – divisor) – divisor) … - logo
divisdor)..) quociente = 8 / 2
=(((8 -2) – 2) – 2)-2)
< ----- a diferença atingir zero ------ >
=4

1. quociente � 0 (inicializa quociente com zero)


2. divisor � 2 (inicializa divisor com o valor 2)
3. dividendo � 8 (inicializa dividendo com o valor 4)
4. Se ( dividendo = 0 ) salta para 8 (se dividendo for zero, salta para o fim)
5. dividendo � dividendo - divisor (subtrai divisor de dividendo)
6. quociente � quociente + 1 (incrementa valor quociente)
7. Salta para 4 (salta para o passo 4)
8. Salta para 8 (fim do programa)
Arquitectura de Sistema com processador de 8 Bits

28 PROGRAMAÇÃO EM ASSEMBLY: Programa Divisão

Programa em RTL Programa em assembly


0 A�0 00H início: LD 0

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
1 M[Quociente] � A 01H ST [Quociente]
2 A�2 02H LD 8
3 M[Divisor] � A 03H ST [Divisor]
4 A�8 04H LD 8
5 M[Dividendo] � A 05H ST [Dividendo]
6 (A = 0) : PC � 14 06H teste: JZ fim
7 A � A - M[Divisor] 07H SUB [Divisor]
8 M[Dividendo] � A 08H ST [Dividendo]
9 A � M[Quociente] 09H LD [Quociente]
10 A�A+1 0AH ADD 1
11 M[Quociente] � A 0BH ST [Quociente]
12 A � M[Dividendo] 0CH LD [Dividendo]
13 PC � 6 0DH JMP teste
14 PC � 12 0FH fim: JMP fim
Arquitectura de Sistema com processador de 8 Bits

29 PROGRAMAÇÃO EM ASSEMBLY: Programa Divisão

Opcode Assembly Endereço Programa em Assembly


00H LD valor 00H início: LD 0 00 00
01H LD [endereço] 01H ST [Quociente] 02 20
02H ST [endereço] 02H LD 2 00 02
03H ADD valor 03H ST [Divisor] 02 21
04H ADD [endereço] 04H LD 8 00 08
05H SUB valor 05H ST [Dividendo] 02 22
06H SUB [endereço] 06H teste: JZ fim 0C 0E
07H AND valor 07H SUB [Divisor] 06 21
08H AND [endereço] 08H ST [Dividendo] 02 22
09H OR valor 09H LD [Quociente] 00 20
0AH OR [endereço] 0AH ADD 1 03 01
0BH JMP endereço
0BH ST [Quociente] 02 20
0CH JZ endereço
0CH LD [Dividendo] 00 22
0DH JN endereço
0EH NOP 0DH JMP teste 0B 06
0EH fim: JMP fim 0B 0E
Arquitectura de Sistema com processador de 8 Bits

30 PRÁTICA: DIVISÃO COM PROGRAMAÇÃO EM ASSEMBLY


; Constantes de Dados
ValorQuociente EQU 00H ; Valor inicial do Quociente
ValorDividendo EQU 08H ; Valor do Dividendo
ValorDivisor EQU 02H ; Valor do Divisor

Microprocessadores I: Introdução Arquitetura 8 Bitss


Chicapa, E.. - 2020
; Constantes de Endereços
Quociente EQU 20H ; endereço do Quociente (Resultado)
Divisor EQU 21H ; endereço do divisor
Dividendo EQU 22H ; endereço do dividendo

; 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
���������������������������������������������������������������������������
���������������������������������������������������������������������������������
�����������������������������������������������������

Você também pode gostar