Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
E EN NG GE EN NH HA AR RIIA AD DE EC CO OM MP PU UT TA A O O
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.
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 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 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.
LABEL Inst:
MNEMNICO LDAA
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)
Figura 4
6
MODO DE ENDEREAMENTO inerente ou implcito #expresso imediato expresso direto, estendido ou relativo expresso,x indexado
LABEL Number
DIRETIVA EQU
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 % @ $
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
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
LABEL nome
DIRETIVA FCB
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
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
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
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
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
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.
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
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
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
? ? ? ?
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
LABEL nome
DIRETIVA EQU
Como exemplo, a figura 18 mostra como a diretiva EQU utilizada para associar nomes simblicos a valores numricos.
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 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.
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
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
0210h
2Ah 2Bh
VarD
1000h
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
A figura 28 mostra como os dados relativos ao programa da figura 27, ficam organizados na memria.
MEMRIA Endereo 7 0
LABEL
DIRETIVA OPT
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
Figura 34
28
29