Sei sulla pagina 1di 30

UNIVERSIDADE FEDERAL DE ITAJUB

E EN NG GE EN NH HA AR RIIA AD DE EC CO OM MP PU UT TA A O O

LING U A G EM ASSEMBLY 6800

Prof. Jos Vantuil Lemos Pinto


DEPARTAMENTO DE ELETRNICA ABRIL/2004

LINGUAGEM ASSEMBLY 6800


Para se programar em linguagem assembly essencial conhecer a arquitetura do microprocessador que se ir utilizar. Com a linguagem assembly possvel fazer com que o microprocessador use toda a sua capacidade na execuo de uma tarefa. Aproximadamente, pode-se dizer que as linguagens de alto nvel utilizam 90% da capacidade do microprocessador, enquanto, a linguagem assembly permite utilizar 100% da capacidade do microprocessador. Dentre as vantagens da linguagem assembly, tem-se: maior velocidade de execuo dos programas; total acesso ao hardware do computador; controle sobre os aspectos de operao do computador. Dentre as desvantagens da linguagem assembly, tem-se: requer muito mais prtica para se escrever programas do que a maioria das linguagens de alto nvel; d mais trabalho para se escrever os programas; mais passvel de erros; mais difcil de se encontrar os erros do programa. A programao em linguagem ASSEMBLY mais produtiva do que a programao em linguagem de MQUINA, pois a linguagem assembly tem uma orientao humana em contraste com a linguagem de mquina que orientada para os microprocessadores.

PROGRAMAO EM LINGUAGEM DE MQUINA


A programao em linguagem de mquina tem algumas desvantagens; uma delas se deve ao fato desta linguagem ser de difcil leitura e entendimento para os seres humanos. Outras desvantagens so a dificuldade para se escrever o cdigo de mquina das instrues de um programa e a dificuldade para se entrar com o programa em linguagem de mquina na memria do computador. Alm disto, o programador humano que por ventura venha a trabalhar em linguagem de mquina tende a cometer erros que so de difcil localizao. Uma maneira de melhorar a programao em linguagem de mquina escrevendo e entrando com os programas na memria do computador em cdigo hexadecimal. Entretanto, o cdigo hexadecimal apresenta
1

basicamente os mesmos problemas que o cdigo binrio. A nica vantagem da codificao em hexadecimal o fato dela ser mais compacta do que a codificao binria. Como o microprocessador somente consegue entender o cdigo binrio, um programa escrito em cdigo hexadecimal deve ser convertido em cdigo binrio antes de ser enviado ao microprocessador. Felizmente, esta converso de hexadecimal para binrio geralmente feita pelo codificador do teclado do prprio computador.

PROGRAMAO EM LINGUAGEM ASSEMBLY


Acima da linguagem de mquina e a um passo mais prximo da linguagem humana tem-se a linguagem assembly. Esta linguagem pelo uso intensivo de notao simblica, uma linguagem mais orientada aos seres humanos. At o momento as instrues foram representadas por meio de um mnemnico e de seus operandos. Esta representao na realidade um subconjunto da linguagem assembly. A linguagem assembly consiste basicamente de 2 (dois) tipos de declaraes que so: a declarao instruo assembler e a declarao diretiva assembler. Estas declaraes sero abordadas posteriormente.

O PROGRAMA ASSEMBLER
Como o microprocessador somente consegue entender o cdigo de mquina relacionado ao seu conjunto de instrues, um programa em linguagem assembly necessita ser traduzido para um programa em linguagem de mquina antes de ser enviado ao microprocessador. Esta traduo feita por um programa especial chamado programa assembler. O programa assembler ou simplesmente assembler um programa capaz de traduzir uma entrada em linguagem assembly para uma sada em linguagem de mquina. O processo de assembler conforme mostra a figura 1, inicia com um PROGRAMA FONTE, que se torna entrada para o programa assembler. O programa fonte um arquivo escrito em linguagem assembly, onde cada linha corresponde a uma declarao, que pode ser do tipo instruo assembler ou do tipo diretiva assembler.
2

PROGRAMA FONTE
ORG $20 LDAA #$1A . . . FCB $2B WAI

PROGRAMA ASSEMBLER
ORG $20 LDAA #$1A . . . FCB $2B WAI 1000 0110 0001 1010 . . . 0011 1110

PROGRAMA OBJETO
1000 0110 0001 1010 1101 0010 . . . 0011 1110

ENTRADA

SADA

LINGUAGEM ASSEMBLY TRADUO

LINGUAGEM DE MQUINA

Figura 1

O programa assembler traduz cada linha do programa fonte, de modo a obter como sada um programa em linguagem de mquina que o microprocessador possa entender. O programa que obtido como sada do processo de assembler chama-se PROGRAMA OBJETO. este programa objeto que se torna entrada para o microprocessador. Um programa objeto pode ser composto por vrios mdulos, assim antes do programa objeto se tornar entrada para o microprocessador necessrio juntar os seus mdulos em um nico. Este processo realizado por um programa especial chamado linker. No caso de um computador o linker ainda prepara o programa objeto, a fim de criar um programa executvel que seja compatvel com as caractersticas do sistema operacional do computador. De um modo geral, conforme mostra a figura 2, para se criar um programa em linguagem de mquina a partir da linguagem assembly, deve-se primeiro escrever o programa fonte em linguagem assembly. Em seguida o programa fonte deve ser "assemblado", isto , o programa fonte deve se tornar uma entrada para o programa assembler, de modo a ser traduzido para um programa objeto. Finalmente, o programa objeto obtido como sada do processo de assembler deve ser submetido ao programa linker, a fim de se obter um programa executvel compatvel com as caractersticas do sistema operacional do computador.

PROGRAMA FONTE ASSEMBLER

PROGRAMA OBJETO LINKER

PROGRAMA EXECUTVEL

Figura 2

Um programa em linguagem de mquina escrito para o microprocessador 6800, no ir funcionar corretamente em um microprocessador que tenha uma arquitetura interna diferente a da CPU 6800. Pelo fato de existirem microprocessadores com diferentes arquiteturas existem diferentes tipos de assemblers. Portanto, o assembler para o microprocessador 6800 no funcionar corretamente com um microprocessador que tenha uma arquitetura interna diferente a da CPU 6800.

A DECLARAO INSTRUO ASSEMBLER


A declarao instruo ou simplesmente instruo o nico tipo de declarao que o programa assembler traduz em cdigo de mquina, de modo a poder ser executada pelo microprocessador. Portanto, as declaraes instruo de um programa fonte so todas traduzidas em cdigo de mquina pelo programa assembler. O cdigo de mquina correspondente a cada declarao instruo que aparece no programa fonte armazenado no programa objeto na mesma seqncia que a declarao instruo aparece no programa fonte. Pode-se dizer que as declaraes instruo tm significado somente para o microprocessador. Como exemplo, a figura 3 mostra uma declarao instruo tpica em linguagem assembly.

LABEL Inst:

MNEMNICO LDAA

OPERANDO COMENTRIO #$1A ;carregar acumulador Figura 3

O formato da declarao instruo dividido em segmentos que so designados por campos. Cada um destes campos contm um tipo de informao com respeito a declarao instruo. O primeiro campo da declarao chamado LABEL (etiqueta). Este campo usado para se especificar um nome simblico (label) que atribudo declarao instruo. No necessrio especificar um label para cada instruo, no entanto, em algumas situaes o uso de labels facilita o desenvolvimento de um programa em linguagem assembly. O segundo campo da declarao, chamado MNEMNICO, usado para especificar o mnemnico da instruo e, portanto, a operao a ser executada pelo microprocessador. O prximo campo da declarao instruo o campo OPERANDO. Este campo usado para especificar o operando da instruo. No caso das instruo onde o operando implcito ou at mesmo no exista este campo deixado em branco. O ltimo campo da declarao o campo COMENTRIO. Este campo usado para documentar a instruo, entretanto, o preenchimento deste campo no obrigatrio. De um modo geral, os comentrios so usados para documentar o programa. Num programa muito curto, a necessidade de documentao pode no ser evidente. Contudo, em um programa mais longo muito fcil esquecer porque foi feito um certo procedimento de determinado modo. Os comentrios tambm auxiliam outras pessoas a entenderem o programa. Certos caracteres devem ser usados para indicar o incio e o final dos diferentes campos de uma declarao, pois se todos os campos fossem colocados juntos o assembler no os entenderia. Os caracteres que marcam os limites de um campo so chamados delimitadores. Como exemplo, nos campos da declarao instruo apresentada na figura 3, pode-se ver como os delimitadores so usados. O incio do campo LABEL marcado pela primeira letra do nome simblico (label) especificado neste campo. O fim do campo LABEL marcado pelo caractere ":" (dois pontos). Para o assembler a ser utilizado, o label pode ter no mximo 15 caracteres alfanumricos, sendo que, o primeiro caractere deve ser obrigatoriamente uma letra. Na especificao
5

do label este assembler faz distino entre letras maisculas e minsculas. Conseqentemente, os labels num01, Num01 e NUM01 so considerados pelo assembler como labels diferentes. O campo MNEMNICO usa o caractere " " (espao) como o seu delimitador inicial. O final deste campo tambm indicado por um caractere " " (espao). Na especificao do mnemnico, o assembler a ser utilizado, no faz distino entre letras maisculas e minsculas. Conseqentemente, os mnemnicos adda, AddA e ADDA so interpretados da mesma forma. O campo OPERANDO usa o delimitador final do campo MNEMNICO, como o seu delimitador inicial. Caso o campo COMENTRIO no seja usado o delimitador final do campo OPERANDO um caractere de controle chamado "retorno de carro" (Carriage Return - CR). O incio do campo COMENTRIO marcado pelo caractere ";" (ponto e vrgula). Toda informao escrita aps o caractere ";" (ponto e vrgula) considerada pelo assembler como um comentrio. O final do campo COMENTRIO, bem como o final da declarao instruo, marcado pelo caractere de controle "retorno de carro" (Carriage Return - CR). Caso seja conveniente, uma declarao instruo pode conter somente o campo COMENTRIO, para isto a declarao deve obrigatoriamente comear pelo caractere ";" (ponto e vrgula) e terminar com o caractere de controle "retorno de carro" (Carriage Return - CR). A fim de tornar a leitura de um programa mais fcil, pode-se inserir mais de um caractere " " (espao) em qualquer lugar nas declaraes, onde se utiliza o caractere " " (espao) como delimitador. Assim, as declaraes instruo mostradas na figura 4(a) poderiam ser escritas como indicado na figura 4(b). Como se pode observar o uso do caractere " " (espao) melhora a aparncia e facilita a leitura do programa. Repeat: LDAA #$01;carregar acumulador ADDA $1234;adicionar
a) declaraes sem o uso do caractere (espao)

Repeat: LDAA #$01 ADDA $1234

;carregar acumulador ;adicionar

b) declaraes com o uso do caractere (espao)

Figura 4
6

FORMATO DOS OPERANDOS NA DECLARAO INSTRUO ASSEMBLER


Para o assembler considerado neste texto, o campo OPERANDO pode assumir uma das formas especificadas na tabela 1, conforme o modo de endereamento utilizado pela instruo. Tabela 1 OPERANDO

MODO DE ENDEREAMENTO inerente ou implcito #expresso imediato expresso direto, estendido ou relativo expresso,x indexado

A DECLARAO DIRETIVA ASSEMBLER


A declarao diretiva ou simplesmente diretiva um tipo de declarao que usado no programa fonte para passar informaes ao programa assembler, tais como: onde na memria o programa objeto deve ser armazenado, onde os dados do programa objeto devem ser armazenados, qual deve ser o contedo inicial de uma determinada localizao da memria. Embora as declaraes diretiva sejam includas no programa fonte, elas nunca so traduzidas em cdigo de mquina e, portando, no so includas no programa objeto. Pode-se dizer que as declaraes diretiva tm significado somente para o programa assembler, o microprocessador no as consegue entender. As declaraes diretiva possuem o mesmo formato das declaraes instruo, isto , cada declarao diretiva dividida em campos. Contudo, os campos de uma declarao diretiva diferem em nome, contedo e finalidade dos campos de uma declarao instruo. Como exemplo, a figura 5 mostra uma declarao diretiva tpica em linguagem assembly.

LABEL Number

DIRETIVA EQU

ARGUMENTO $2B Figura 5

COMENTRIO ;associar valor

O primeiro campo da declarao diretiva tambm chamado LABEL. Algumas diretivas assembler requerem que um nome simblico seja especificado neste campo, enquanto, outras requerem que este campo permanea vazio. Em alguns casos a especificao de um nome simblico neste campo opcional. O segundo campo da declarao, chamado DIRETIVA ou PSEUDO OPCODE, usado para especificar uma diretiva a ser passada ao programa assembler. De um modo geral, uma diretiva especifica uma operao a ser realizada pelo prprio programa assembler. Como os mnemnicos usados nas declaraes instruo, as diretivas so referenciadas por verses abreviadas do seu nome. Por exemplo, a diretiva de equivalncia equate referenciada por EQU. O prximo campo da declarao diretiva o campo dos argumentos ou ARGUMENTO. Este campo pode se usado para se especificar uma quantidade numrica ou at mesmo um endereo da memria. De um modo geral, o contedo deste campo ditado pela diretiva especificada no campo DIRETIVA. O ltimo campo da declarao o campo dos comentrios ou COMENTRIO. Este campo usado para documentar a diretiva assembler. Assim como, na declarao instruo o preenchimento deste campo no obrigatrio. Da mesma forma que em uma declarao instruo os campos numa declarao diretiva so tambm definidos por caracteres delimitadores. A figura 5 mostra um exemplo dos delimitadores usados numa declarao diretiva. O incio do campo LABEL marcado pela primeira letra do nome especificado neste campo. O fim deste campo marcado pelo caractere " " (espao) e no pelo caractere ":" (dois pontos) como nas declaraes instruo. Caso um nome simblico no seja especificado, o campo deve ser deixado em branco. A especificao de um nome simblico na declarao diretiva segue os mesmos princpios apresentados para a especificao de um label (etiqueta) na declarao instruo. O campo DIRETIVA usa o delimitador final do campo LABEL, como o seu delimitador inicial. O final deste campo indicado por um caractere " " (espao). Este caractere por sua vez tambm marca o incio do campo ARGUMENTO.

Caso o campo COMENTRIO no seja usado, o delimitador final do campo ARGUMENTO, bem como o da declarao diretiva o caractere de controle "retorno de carro" (Carriage Return - CR). O incio do campo COMENTRIO marcado pelo caractere ";" (ponto e vrgula). Caso este campo seja usado numa declarao, o seu delimitador de incio tambm usado como delimitador final do campo ARGUMENTO. Toda informao escrita aps o caractere ";" (ponto e vrgula) considerada pelo assembler como um comentrio. O final do campo COMENTRIO, bem como o final da declarao diretiva, marcado pelo caractere de controle "retorno de carro" (Carriage Return CR). Caso seja conveniente uma declarao diretiva pode conter somente o campo COMENTRIO, para isto a declarao deve obrigatoriamente comear pelo caractere ";" (ponto e vrgula) e terminar com o caractere de controle "retorno de carro" (Carriage Return - CR). Do mesmo modo que numa declarao instruo, pode-se inserir mais de um caractere " " (espao) em qualquer lugar da declarao diretiva, onde se utiliza o caractere " " (espao) como delimitador. Isto tem por objetivo tornar a leitura de um programa mais fcil.

DIRETIVAS ASSEMBLER
As diretivas assembler ou simplesmente diretiva so especificadas no campo DIRETIVA de uma declarao diretiva, e so referenciadas por verses abreviadas do seu nome. De um modo geral, as diretivas especificam operaes a serem realizadas pelo programa assembler. Atualmente existem diferentes tipos de assemblers at mesmo para um microprocessador em especifico, porm cada assembler possui seu prprio conjunto de diretivas. O assembler considerado neste texto assume como padro (default) a base decimal para todos os nmeros que aparecem no programa fonte, a menos que seja especificado do contrrio. Para se especificar no programa fonte um nmero numa outra base, diferente da decimal, necessrio inicializlo com um dos prefixos indicado na tabela 2, de acordo com a base que se deseja.

Tabela 2 PREFIXO % @ $

BASE Decimal Binria Octal Hexadecimal caractere ASCII

(10) (2) (8) (16)

Como exemplo tem-se que: $20 corresponde a 32 decimal $1000 corresponde a 4096 decimal @12 corresponde a 10 decimal %10110 corresponde a $16 (hexadecimal) ou a 22 decimal 255 corresponde a $FF (hexadecimal) A corresponde a $41 (hexadecimal) a corresponde a $61 (hexadecimal) O argumento de uma declarao diretiva assembler ou o operando de uma declarao instruo pode ser especificado por meio de uma expresso envolvendo operadores, valores numricos e/ou nomes simblicos. A tabela 3 mostra os operadores do assembler considerado neste texto.

Tabela 3 OPERADOR

+ * / % & | ^

NOME Adio Subtrao Multiplicao Diviso Resto da diviso and (bit a bit) or (bit a bit) xor (bit a bit)

As expresses so avaliadas da esquerda para direita. Numa expresso no permitido o uso de parnteses "(...)" para mudar o grau de prioridade e nem o uso do caractere " " (espao). Assim, caso MaxChar seja igual a 10, tem-se que:

10

$FF/MaxChar 10+$FF/MaxChar $FF&MaxChar $FF^MaxChar 10+$FF / MaxChar

igual a 25 decimal igual a 26 decimal igual a 10 decimal igual a $F5 decimal no produz o resultado esperado por causa do carectere de espao usado na expresso

DIRETIVAS ASSEMBLER DE ALOCAO


As diretivas de alocao de memria so usadas para reservar um espao na memria, definir o seu contedo inicial e associar um nome simblico ao endereo do espao reservado. As diretivas de alocao de memria so especificadas a seguir: Diretiva FCB: A diretiva de alocao FCB (Form Constant Byte) usada para alocar um espao na memria do tamanho de um byte, definir o seu contedo inicial e associar um nome simblico ao endereo do espao alocado. O contedo inicial do byte que alocado na memria pela diretiva FCB pode ser alterado durante a execuo do programa. A figura 6 mostra o formato tpico da declarao diretiva assembler que aloca um byte na memria. Nesta figura tem-se que: nome - associado ao endereo do byte alocado na memria, portanto, serve para referenciar no programa fonte o byte alocado. expresso - corresponde ao valor de 8 bits a ser armazenado inicialmente no byte alocado na memria.

LABEL nome

DIRETIVA FCB

ARGUMENTO expresso Figura 6

COMENTRIO ;alocar byte

Como exemplo, a figura 7 mostra como a diretiva FCB usada numa declarao diretiva assembler para alocar um byte na memria. Nesta figura o nome simblico VarByte associado com o endereo do byte alocado na memria, que por sua vez inicializado com o valor 12hex.

11

VarByte

FCB $12

;alocar byte
MEMRIA

0 VarByte

12h

Figura 7 Diretiva FDB: A diretiva de alocao FDB (Form Double Byte Constant) usada para alocar dois bytes consecutivos na memria (16 bits), definir o seu contedo inicial e associar um nome simblico ao endereo do espao alocado. O contedo inicial das localizaes de memria que so alocadas pela diretiva FDB pode ser alterado durante a execuo do programa. A figura 8 mostra o formato tpico da declarao diretiva assembler que aloca um dado de 16 bits na memria. Nesta figura tem-se que: nome - associado ao endereo do byte mais significativo (MSByte) do espao alocado na memria, portanto, serve para referenciar no programa fonte o dado alocado. expresso - corresponde ao valor de 16 bits a ser armazenado inicialmente no espao alocado na memria.

LABEL nome

DIRETIVA FDB

ARGUMENTO expresso Figura 8

COMENTRIO ;alocar dois bytes

A diretiva de alocao FDB segue a conveno adotada pela MOTOROLA, isto , armazena na localizao mais baixa do espao alocado na memria o byte mais significativo (MSByte) do dado a ser armazenado.

12

Como exemplo, a figura 9 mostra como a diretiva FDB usada numa declarao diretiva assembler para alocar um espao do tamanho de 16 bits (dois bytes) na memria. Nesta figura o nome simblico Var16Bits associado com o endereo do byte mais significativo (MSByte) do espao alocado na memria, que por sua vez inicializado com o valor 3456hex.

Var16Bits

FDB $3456

;alocar dois bytes

MEMRIA

0 Var16Bits

34h 56h

Figura 9

Duas ou mais diretivas FCB ou FDB podem ser agrupadas numa nica declarao diretiva assembler, conforme mostra a figura 10, onde: nome - associado ao endereo do byte mais significativo (MSByte) do primeiro dado (exp1) alocada na memria, portanto, serve para referenciar no programa fonte os dados alocados. FxB - equivale a diretiva de alocao FCB ou a diretiva FDB. expN - corresponde a um dado a ser armazenado inicialmente numa localizao alocada na memria.

LABEL nome

DIRETIVA FxB

ARGUMENTO exp1,exp2,...,expN Figura 10

COMENTRIO ;alocar

importante resaltar que na especificao de exp1,exp2,...,expN no permitido o uso do caractere " " (espao). A declarao diretiva apresentada na figura 10 tem o mesmo efeito das declaraes diretivas a seguir:

13

LABEL nome

DIRETIVA FxB FxB ... FxB

ARGUMENTO exp1 exp2 expN Figura 11

COMENTRIO ;alocar ;alocar ;alocar

A figura 12 mostra o uso da declarao diretiva FDB na alocao de trs dados de 16 bits.

VarDados

FDB $1234,256+%10,$5678
MEMRIA

;alocar

7 exp1 MSByte LSByte exp2 MSByte LSByte exp3 MSByte LSByte

0 VarDados VarDados + 2 VarDados + 4

12h 34h 01h 02h 56h 78h

Figura 12

Caso a diretiva fosse especificada conforme descrito abaixo o resultado no seria o esperado, uma vez que, o carectere de espao foi utilizado na expresso. VarDados FDB $1234, 256+%10,5678 ;alocar

Diretiva FCC: A diretiva de alocao FCC (Form Constant Character String) usada para alocar um espao na memria, a fim de armazenar um string ASCII em consecutivos bytes da memria, definir o contedo inicial das localizaes alocadas e associar um nome simblico ao endereo do primeiro byte do espao alocado para o string.
14

O contedo inicial das localizaes de memria que so alocadas pela diretiva FCC, pode ser alterado durante a execuo do programa. A figura 13 mostra o formato tpico da declarao diretiva assembler que aloca um string na memria. Nesta figura tem-se que: nome - associado ao endereo do primeiro byte do espao alocado na memria para o string, portanto, serve para referenciar no programa fonte o string alocado. string - corresponde ao string a ser armazenado inicialmente no espao alocado na memria.

LABEL nome ou nome

DIRETIVA FCC FCC

ARGUMENTO string string Figura 13

COMENTRIO ;alocar string ;alocar string

Como exemplo, a figura 14 mostra como a diretiva FCC usada numa declarao diretiva assembler para alocar string na memria. Nesta figura o nome simblico VarString associado com o endereo do primeiro byte do espao alocado na memria para o string, que por sua vez inicializado com o cdigo ASCII das letras do string ABC (41hex, 42hex e 43hex).

VarString

FCC ABC

;alocar string

MEMRIA

0 VarString

41h A 42h B 43h C

Figura 13

15

Diretiva RMB: A diretiva de alocao RMB (Reserve Memory Bytes) usada para alocar um determinado nmero de bytes consecutivos na memria, e associar um nome simblico ao endereo do primeiro byte alocado. O contedo inicial das localizaes de memria, alocadas pela diretiva RMB aleatrio, entretanto, pode ser alterado durante a execuo do programa. A figura 14 mostra o formato tpico da declarao diretiva assembler que aloca um determinado nmero de bytes consecutivos na memria. Nesta figura tem-se que: nome - associado ao endereo do primeiro byte do espao alocado na memria, portanto, serve para referenciar no programa fonte o espao alocado. expresso - corresponde ao nmero de bytes a serem alocados na memria.

LABEL nome

DIRETIVA RMB

ARGUMENTO expresso Figura 14

COMENTRIO ;alocar bytes

Como exemplo, a figura 15 mostra como a diretiva RMB usada numa declarao diretiva assembler para alocar 4 (quatro) bytes na memria. Nesta figura o nome simblico VarVetor associado com o endereo do primeiro byte alocado na memria.

VarVetor

RMB 4

;alocar 4 (quatro) bytes


MEMRIA

0 VarVetor VarVetor + 1 VarVetor + 2 VarVetor + 3 ? indefinido

? ? ? ?

Figura 15
16

Diretiva ZMB: A diretiva de alocao ZMB (Zero Memory Bytes) similar a diretiva RMB, ou seja, aloca um determinado nmero de bytes consecutivos na memria, e associar um nome simblico ao endereo do primeiro byte alocado. A diferena reside no fato de que a diretiva ZMB inicializa as localizaes alocadas da memria com zero. Deve-se observar que o nome usado para referenciar uma localizao da memria, que foi alocada por meio de uma diretiva de alocao, corresponde ao endereo da localizao da memria alocada . Conseqentemente, se a diretiva: Var FCB $12

alocar a posio de memria cujo endereo seja 1020H, a diretiva: VarEndereco FDB Var

ir alocar dois bytes consecutivos na memria em um outro endereo, e ir inicializ-los com o nmero binrio de 16 bits, cuja representao em hexadecimal igual a 1020hex. A figura 16 ilustra esta situao.

MEMRIA Endereo 7 0

1020h

12h

Var

10h 20h

VarEndereco

Figura 16

17

DIRETIVA ASSEMBLER DE EQUIVALNCIA


Em qualquer parte do programa fonte pode-se usar a diretiva de equivalncia para associa um valor numrico a um nome simblico. A diretivas de equivalncia especificada a seguir: Diretiva EQU: A diretiva de equivalncia EQU (Equate) associa um nome simblico a um valor numrico de 16 bits. Sempre que este nome simblico aparecer no programa fonte, o assembler o substitui pelo valor que lhe foi associado. Esta diretiva no aloca nenhum espao na memria e pode ser usada em qualquer parte do programa fonte, porm no pode ser utilizada para redefinir o valor associado a um determinado nome simblico. A figura 17 mostra o formato tpico da declarao diretiva assembler que associa um nome simblico a um valor. Nesta figura tem-se que: nome - uma representao alfanumrica que associada a expresso. expresso - corresponde ao valor a ser associado ao nome.

LABEL nome

DIRETIVA EQU

ARGUMENTO expresso Figura 17

COMENTRIO ;associar valor

Como exemplo, a figura 18 mostra como a diretiva EQU utilizada para associar nomes simblicos a valores numricos.

Const8Bits Const16Bits ExpA ExpB ExpC ExpD

EQU EQU EQU EQU EQU EQU

$10 $2030 2+4*6 ExpA-4 ExpA*$100 Expc+ExpB

;associa ;associa ;associa ;associa ;associa ;associa

Const8Bits a 0010h Const16Bits a 2030h ExpA a 0024h ExpB a 0020h ExpC a 2400h ExpD a 2420h

Figura 18

A figura 19 mostra como os nomes simblicos definidos na figura 18 podem ser utilizados numa declarao instruo e o efeito que eles produzem, isto , como o assembler os interpreta.
18

DECLARAO INSTRUO LDAA ADDA INC Inc SUBA SUBA ANDA #Const8Bits Const16Bits ExpA ExpC #ExpA+ExpB ExpA*ExpB ExpD+$AE

INTERPRETAO DO ASSEMBLER LDAA ADDA INC INC SUBA SUBA ANDA Figura 19 #$10 $2030 $0024 $2400 #$44 $0480 $24CE

A figura 20 mostra como os nomes simblicos definidos na figura 18 podem ser utilizados numa declarao diretiva de alocao e o efeito que eles produzem, isto , como o assembler os interpreta.

DECLARAO DIRETIVA VarA VarB VarC VarD FCB FDB FCB FCB Const8Bits Const16Bits ExpA+ExpB-$10 ExpA,ExpB-$10

INTERPRETAO DO ASSEMBLER aloca um byte e o inicializa com 10h aloca dois bytes (16 bits) e os inicializa com 2030h aloca um byte e o inicializa com 34h aloca 2 bytes consecutivos e os inicializa com 24h e 10h, respectivamente aloca dois bytes (16 bits) e os inicializa com FFE0h

VarE

FDB

ExpC-ExpD

Figura 20

PROCESSO DE ASSEMBLER
A fim de traduzir um programa em linguagem assembly (programa fonte) para um programa em linguagem de mquina (programa objeto), o programa assembler, considerado neste texto, varre o programa fonte duas vezes, por isso, este assembler chamado assembler de dois passos.

19

PROGRAMA FONTE
ORG $20 LDAA #$1A . . . FCB $2B WAI

PROGRAMA ASSEMBLER
ORG $20 LDAA #$1A . . . FCB $2B WAI 1000 0110 0001 1010 . . . 0011 1110

PROGRAMA OBJETO
1000 0110 0001 1010 1101 0010 . . . 0011 1110

ENTRADA

SADA

LINGUAGEM ASSEMBLY TRADUO

LINGUAGEM DE MQUINA

Figura 21

O propsito do primeiro passo determinar a localizao dos labels (nomes simblicos) no programa fonte, e o propsito do segundo passo gerar o cdigo de mquina das instrues especificadas no programa fonte. Para localizar os labels o assembler usa uma varivel interna conhecida por contador de locao (location counter). Quando o programa fonte varrido, o contador de locao automaticamente incrementado de um nmero igual ao nmero de bytes requerido pela instruo ou diretiva. No incio de cada varredura (passo) o contador de locao automaticamente zerado. Durante o primeiro passo o assembler usa o contador de locao para construir uma tabela interna, chamada tabela de smbolos, que contm o endereo dos labels. Esta tabela permite que o assembler gere o endereo dos operandos durante o segundo passo. Como exemplo, seja o programa assembly da figura 22. PROGRAMA Var Cont FCB EQU CLRA LDAB Repeat: ADDA DECB BNE WAI ... $50 $10 #Cont Var Repeat CONTADOR COMPRIMENTO DE LOCAO EM BYTES 0000h 1 0001h 0 0001h 1 0002h 2 0004h 2 0006h 1 0007h 2 0009h 1 ... Figura 22
20

Para o programa acima tem-se que: O contador de locao zerado no incio do programa. A primeira linha contm uma diretiva de alocao de um byte. Por isso, o contador de locao incrementado de uma unidade. A segunda linha contm uma diretiva EQU que no gera cdigo de mquina, por isso, o valor do contador de locao no alterado. As seis linhas seguintes contm instrues em que os correspondentes cdigo de mquina possuem, respectivamente, 1, 2, 2, 1, 2 e 1 byte de comprimento. Por isso, o contador de locao alterado conforme o tamanho do cdigo de mquina da instruo. O assembler cria uma tabela de smbolos como indicado na figura 23. SMBOLO ... Var Cont Repeat ... VALOR ... 0000h 0010h 0004h ...

Figura 23

Um assembler geralmente possui uma segunda tabela, conhecida por tabela de smbolos permanentes, que contm todas as informaes relativas as instrues e as diretivas que so reconhecidas pelo assembler. Entre outras coisas esta tabela contm os mnemnicos, cdigo de mquina, formas associadas as instrues e a informao (comprimento) necessria para incrementar o contador de locao.

DIRETIVA E OPERADOR ASSEMBLER RELACIONADO AO CONTADOR DE LOCAO


O programa assembler considerado neste texto, possui uma diretiva e um operador relacionado ao contador de locao. A diretiva e o operador so especificados a seguir: Diretiva ORG: Quando o assembler comea a montar o cdigo de mquina das instrues ou alocar dados, ele atribui a cada instruo ou dado alocado um endereo seqencial a partir de 0000hex (zero). A diretiva ORG (Origin) permite definir, durante o processo de assembler, um novo valor para o "contador de locao", de modo a fazer com que o cdigo de mquina da prxima
21

instruo a ser montada ou a prxima alocao de dados, fique em um determinado endereo. Se a diretiva ORG no for encontrada no programa fonte o contador de locao inicializado com 0000hex. A figura 24 mostra o formato tpico da declarao diretiva assembler que altera o valor do contador de locao. Nesta figura tem-se que: endereo - corresponde ao endereo a ser atribudo ao contador de locao.

LABEL

DIRETIVA ORG

ARGUMENTO endereo Figura 24

COMENTRIO ;contador de locao

Como exemplo do uso da diretiva ORG, considere o programa da figura 25. PROGRAMA VarA Cont FCB EQU ORG CLRA LDAB Repeat: ADDA DECB BNE WAI ORG VarB FDB VarC FDB ORG VarD FDB ... $50 $10 $1000 #Cont VarA Repeat $0100 $1A1B $1C1D $0200+Cont $2A2B CONTADOR COMPRIMENTO DE LOCAO EM BYTES 0000h 1 0001h 0 0001h 0 1000h 1 1001h 2 1003h 2 1005h 1 1006h 2 1008h 1 1009h 0 0100h 2 0102h 2 0104h 0 0210h 2 ... -

Figura 25

A figura 26 mostra como os dados relativos ao programa da figura 25, ficam organizados na memria.

22

MEMRIA Endereo 7 0

0000h 0100h

50h

VarA VarB VarC

1Ah 1Bh 1Ch 1Dh

0210h

2Ah 2Bh

VarD

1000h

4Fh C6h 10h

CLRA LDAB #Cont

Figura 26 Operador *: O caractere * predefinido pelo assembler e representa, dependendo do contexto, o valor corrente do contador de locao, isto , o endereo do cdigo de mquina da prxima instruo a ser montada, ou da localizao de memria que est sendo alocada. Este operador pode ser extremamente til para calcular o comprimento da rea de dados ou instrues. Como exemplo do uso do operador *, considere o trecho de programa da figura 27. PROGRAMA ... ORG FCB FDB FDB EQU ... $0500 $0A * *-Var1 *-Var1 CONTADOR COMPRIMENTO DE LOCAO EM BYTES ... 0500h 0 0500h 1 0501h 2 0503h 2 0505h 0 ... Figura 27
23

Var1 Var2 Var3 Nbytes

A figura 28 mostra como os dados relativos ao programa da figura 27, ficam organizados na memria.

MEMRIA Endereo 7 0

0500h 0501h 0503h

0Ah 05h 01h 00h 03h

Var1 Var2 Var3

Nbytes = 0005h Figura 28

DIRETIVA ASSEMBLER DE CONTROLE DE LISTAGEM


No processo de traduo de um programa em linguagem assembly (programa fonte) para um programa em linguagem de mquina (programa objeto), o programa assembler considerado neste texto pode produzir, alm do arquivo relativo ao programa objeto, um arquivo de listagem contendo informaes a respeito do processo de traduo. As informaes a serem includas neste arquivo pelo assembler so definidas pela diretiva de controle de listagem especificada a seguir: Diretiva OPT: A diretiva OPT (Option) tem por finalidade informar ao assembler as informaes a serem includas num arquivo de listagem a ser produzido juntamente com o arquivo contendo o programa objeto. A figura 29 mostra o formato tpico da diretiva assembler OPT. Nesta figura tem-se que: opo - especifica o tipo de informao a ser includa no arquivo de listagem.

LABEL

DIRETIVA OPT

ARGUMENTO opo Figura 29

COMENTRIO ;opo de listagem

24

Na diretiva OPT a opo deve ser escrita em letras minsculas, sendo que, cada opo posui uma condio padro (default). Os valores que uma determinada opo pode assumir so descritos na tabela 4. De modo a se incluir mais de um tipo de informao no arquivo de listagem, a diretiva OPT pode ser utilizada mais de uma vez no programa fonte.

Tabela 4 OPO DESCRIO l Habilita a listagem do cdigo de mquina do programa fonte. Exemplo: figura 30. nol Desabilita a listagem do cdigo de mquina do programa fonte (condio default). Exemplo: figura 31. s Habilita a listagem da tabela de smbolos do programa fonte. Exemplo: figura 32. cre Habilita a listagem da tabela de referncia cruzada do programa fonte. Exemplo: figura 33. c Habilita a listagem do nmero de ciclos das instrues. Exemplo: figura 34. noc Desabilita a listagem do nmero de ciclos das instrues (condio default).

Assembler release TER_2.0 version 2.09 (c) Motorola (free ware) 0001 OPT l ;cdigo de mquina 0002 0003 0000 0a VarA FCB $0A 0004 0005 Cont EQU $05 0005 0006 0010 ORG $0010 0007 0008 0010 4f CLRA 0009 0011 c6 05 LDAB #Cont 0010 0013 9b 00 Repeat: ADDA VarA 0011 0015 5a DECB 0012 0016 26 fb BNE Repeat 0013 0018 3e WAI 0014 Program + Init Data = 10 bytes Error count = 0

Figura 30

25

Assembler release TER_2.0 version 2.09 (c) Motorola (free ware) 0001 OPT l ;cdigo de mquina 0002 0003 0000 0a VarA FCB $0A 0004 0005 Cont EQU $05 0005 0006 0010 ORG $0010 0007 0008 0010 4f CLRA 0009 0011 c6 05 LDAB #Cont 0010 0013 9b 00 Repeat: ADDA VarA OPT nol ;desabilita listagem Program + Init Data = 10 bytes Error count = 0

Figura 31

Assembler release TER_2.0 version 2.09 (c) Motorola (free ware) 0001 OPT l ;cdigo de mquina 0002 OPT s ;tabela de simbolos 0003 0004 0000 0a VarA FCB $0A 0005 0005 Cont EQU $05 0006 0007 0010 ORG $0010 0008 0009 0010 4f CLRA 0010 0011 c6 05 LDAB #Cont 0011 0013 9b 00 Repeat: ADDA VarA 0012 0015 5a DECB 0013 0016 26 fb BNE Repeat 0014 0018 3e WAI 0015 Program + Init Data = 10 bytes Error count = 0 Cont Repeat VarA 0005 0013 0000

Figura 32

26

Assembler release TER_2.0 version 2.09 (c) Motorola (free ware) 0001 OPT l ;cdigo de mquina 0002 OPT s ;tabela de simbolos 0003 OPT cre ;tabela referncia 0004 0005 0000 0a VarA FCB $0A 0006 0005 Cont EQU $05 0007 0008 0010 ORG $0010 0009 0010 0010 4f CLRA 0011 0011 c6 05 LDAB #Cont 0012 0013 9b 00 Repeat: ADDA VarA 0013 0015 5a DECB 0014 0016 26 fb BNE Repeat 0015 0018 3e WAI 0016 Program + Init Data = 10 bytes Error count = 0 Cont Repeat VarA Cont Repeat VarA 0005 0013 0000 0005 *0006 0011 0013 *0012 0014 0000 *0005 0012

Figura 33

27

Assembler release TER_2.0 version 2.09 (c) Motorola (free ware) 0001 OPT l 0002 OPT s 0003 OPT cre 0004 OPT c 0005 0006 0000 0a VarA FCB $0A 0007 0005 Cont EQU $05 0008 0009 0010 ORG $0010 0010 0011 0010 4f [2] CLRA 0012 0011 c6 05 [2] LDAB #Cont 0013 0013 9b 00 [3] Repeat: ADDA VarA 0014 0015 5a [2] DECB 0015 0016 26 fb [4] BNE Repeat 0016 0018 3e [9] WAI 0017 Program + Init Data = 10 bytes Error count = 0 Cont Repeat VarA Cont Repeat VarA 0005 0013 0000 0005 *0007 0012 0013 *0013 0015 0000 *0006 0013

;cdigo ;tabela ;tabela ;nmero

de mquina de simbolos referncia de ciclos

Figura 34

28

VANTAGENS DA LINGUAGEM ASSEMBLY


Provavelmente a grande vantagem da programao em linguagem assembly a sua notao simblica. Isto , desejvel por dois motivos: o primeiro se deve ao fato de ser mais fcil entender a notao simblica, pois o uso de mnemnicos e labels (nomes simblicos) mais simples do que o uso da linguagem de mquina. O segundo motivo se deve ao fato da linguagem assembly permitir que o programa seja armazenado em qualquer lugar da memria, ou tenha linhas acrescentadas e/ou retiradas sem a necessidade de alterar todo o programa. Isto significa que o programa independente de posio. O uso de notao simblica para se conseguir independncia de posio o grande recurso da programao assembly. Quando um programa escrito em notao simblica o assembler se encarrega do clculo dos endereos e de sua designao para os dados e instrues. Assim, de modo a manter o programa independente de posio uma localizao da memria no deve ser referenciada por seu endereo real, mas sim por meio de uma notao simblica. Se for necessrio modificar o programa fonte de modo a acrescentar e/ou retirar linhas, deve-se aps serem feitas as modificaes "assemblar" novamente o programa para que o assembler associe novos endereos as notaes simblicas que referenciam localizaes de memria.

29

Potrebbero piacerti anche