View
116
Download
0
Embed Size (px)
Estrutura do programa e programaoAssembly com 8051
O que entende por linguagem assembly?i. Apresenta um nvel de abstraco intermdia entre os dois extremos: linguagem mquina e linguagem alto-nvel
ii. Facilita a programao pela substituio do cdigo binrio da linguagem mquina com smbolos Escrita usando labels(etiquetas), mnemnicas, e.t.c. Um programa em assembly no executvel Todos os smbolos tais como mnemnicas, etiquetas devem ser traduzidos para cdigo binrioMicroprocessadores Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Como que se processa a traduo de um programa assembly para programa mquina ?Dependendo da complexidade do ambiente de programao pode envolver vrias etapas at a produo do cdigo executvel i. Assemblera. b. Traduz um programa em assembly para programa em linguagem mquina (cdigo objecto) O cdigo objecto pode estar na forma absoluta ou forma relocatable
ii. Linkera. b. Combina vrios programas objectos na forma relocatable, produzindo um programa executvel atravs da atribuio de endereos absolutos Produz tambm um ficheiro contendo o mapa de memria e tabela de smbolosMicroprocessadores Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
O que acontece ao invocar o assembler a partir da linha de comando ?Sintaxe: ASM51 ficheiro fonte [controlos do assembler] Exemplo: ASM51 echo.srcPasso 1 (Tabela de smbolos)1. 2. (LC) =0 / ORG (LC) += length(inst) ou (LC) += length(DB/DW/DS)
LC = Location CounterUsado pelo assembler como endereo da instruo ou valor da label
ASM51
3.
SymT[...] = ( label,(LC) ) ou SymT[...] = ( symbol,(EQU) ) Echo.lst
Programa.src (echo.src)
Programa.lstPasso 21. 2. Mnemnica opcode Determinao dos operandos Todos os smbolos so substitudos pelo valor na tabela de smbolos Microprocessadores Prof. Adriano (DEI-Universidade do Minho) Echo.obj
Programa.obj
Estrutura do programa e programaoAssembly com 8051
Contador de localizao (Location Counter) O assembler possui um contador de localizao para cada um dos cincos segmentos1. 2. 3. 4. 5. CODE DATA IDATA BIT XDATA (0000h - FFFFH) (00H FFH)/(00H 7FH) (00H FFH)/(00H 7FH) (00H FFH)/(20H 2FH) (0000H FFFFH) (0000h) (30h) (80h) (00h) (0000h)
Cada contador de localizao inicializado com o valor zero e pode posteriormente ser alterado usando as directivas para o assembler O smbolo $ pode ser usado para especificar o valor do contador de localizao do segmento activo:TABLE: LEN DB EQU 1,2,3,4,5,6,7,8,9 $-TABLEMicroprocessadores Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Ficheiro .lst e tabela de smbolosControlos do assemblerInforma ao ASM51 que as subrotinas foram definidas noutro mdulo
A resolver pelo linker ( assembler desconhece 0 endereo do segmento relocatable)
Identifica o fim de um programa assemblerOpcode das instrues
Pertencem a outros mdulos, e por isso s o linker pode determinar o endereo absoluto
Porqu opcode = 80H (SJMP) e no 02H (LJMP) ou (AJMP)?Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Saltos e chamadas genricasASM51 permite o uso de mnemnicas genricas JMP ou CALL em vez de SJMP, AJMP, LJMP ou ACALL, LCALL A converso da mnemnica genrica para instruo real segue a seguinte regra:1. JMP substitudo por SJMP se no for usada forward reference e o destino do salto estiver na gama de 128 localizaesforward reference:uso de um smbolo antes da respectiva definio
2.
JMP/CALL substitudo por AJMP/ACALL se no for usada forward reference e a instruo que segue JMP/CALL pertencer mesma pgina de 2K que a instruo destino Caso contrrio, ser usado a converso para LJMP/LCALL
3.r)
Resposta pergunta do slide anterior: sendo o salto para trs com deslocamento (offset) inferior a 128 bytes, aplica-se a condio 1Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Ficheiro .lst e tabela de smbolosTorna as subrotinas visveis a outros mdulos
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Ficheiro .lst e tabela de smbolos (cont.)
Reserva espao para 40 caracteres
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Qual a principal diferena entre um ficheiro objecto absoluto e um relocatable?1. O ficheiro objecto absoluto contm apenas bytes binrios (00H FFh) de um programa em linguagem mquina
2. Um ficheiro relocatable contm ainda uma tabela de smbolos e outras informaes necessrias para que o linker possa produzir o programa executvel
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Qual a sintaxe de invocao do linker?RL51 lista_de_relocatable [ficheiro_destino] [controlos_de_localizao]
Exemplo:Pg. 164: errado
RL51 ECHO.obj, IO.obj TO EXAMPLE & CODE(EPROM(8000H)) DATA(ONCHIP(30) )1. 2. 3. Ficheiros relocatable: echo.obj, io.obj Programa executvel: example Os mdulos apresentam dois segmentos relocatable EPROM para cdigo localizado em 8000H e ONCHIP para dados localizado a partir de 30H
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Exemplo de ficheiro .Map criado pelo LinkerDiga como apareceria no ficheiro executvel a codificao da instruo CALL INIT, invocada no mdulo MAIN?
1.
Do ficheiro echo.lst, linha 14 obtmse o opcode da instruo como sendo 12H Da tabela de smbolos do ficheiro example.M51 obtm-se o endereo absoluto de INIT como sendo 8024H Sendo CALL de 3 bytes (porqu?) a respectiva codificao seria 12 8024h
Esta tabela de smbolos aparece no ficheiro .M51 porque os ficheiros .src comeam com a directiva $DEBUG
2.
3.
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Qual o formato da linguagem assembly?1. Um programa assembly contm os seguintes elementos:1. 2. 3. 4. Instrues mquina Directivas para o assembler Controlos do assembler Comentrios
2. O formato genrico para cada linha o seguinte:1.2. 3. 4. 5.
[ smbolo ] mnemnica [operando] [,operando] [...] [;comentrio]A mnemnica pode ser uma instruo ou uma directiva para o assembler O operando contm o endereo ou dado usado pela instruo O primeiro caractere de um smbolo deve ser sempre uma letra, ?, ou _ que ser seguida por letras, dgitos, ?, _. Pode conter no mximo 31/256? caracteres Uma etiqueta (label) um smbolo que termina obrigatoriamente com o caractere :.Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Exemplo de smbolosPAR START: Mensagem: VAR: BitVar: Start: DATA LOW ALPHA# ?_?_? 1st_var MOD TITLE MOV EQU MOV DB DS DBIT JMP EQU CODE DW DBIT DS DW SEGMENT IDATA 500 A, #0FFH Help 10 16 THERE 100 80H 00FFh 12 3 19 Smbolo Etiqueta Etiqueta Etiqueta Etiqueta etiqueta legal legal legal legal legal ilegal /duplicado ilegal/directiva assembly ilegal / operador do assembly contm caractere ilegal legal 1 caractere ilegal ilegal / operador do assembler ilegal / controlo do assembler ilegal /instruo assembly
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Caractersticas dos dados imediatos Todos os dados imediatos com excepo do MOV DPTR, #dado, requerem constantes de 8-bit No entanto, os dados imediatos so tratados como constantes de 16-bit e posteriormente usado apenas o LSBNeste caso todos os bits do MSB devem ser iguaisCONSTANTE EQU MOV ORL MOV MOV MOV MOV 100 A, #0FEH 40H, #CONSTANTE A, #0FF00H A, #00D8H A, 0FE00H A, #01FFH legal legal legal legal ilegal ilegal
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Como especificar o endereo de um bit numa instruo?ONExplicitamente pelo endereo
EQU 0E7H 99H, $ ACC.7 224.ON 0E0H.7 TI, $ C
7
SETB JNB SETB SETB SETB JNB CLR
Usando o operador .
Usando um smbolo pr-definido
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Bases nmericasDecimal Binrio Octal MOV MOV MOV A, #15 A, #15D #1111B A, #17Q A, #17O A, #0FH A, #0A5H A, #A5H?Microprocessadores
MOV MOV Hexadecimal MOV MOV MOV
Para diferenciar um dado hexadecimal imediato de um smbolo
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Cadeias de caractereMOVASPAS
A, #m 8051 A, #Q, AGUARDE A, #0 DPTR, #AB DPTR, #4142H
carrega A com 06Dh, valor do ASCII m Define ASPAS como sendo 22h Armazenar na memria de cdigo 8, 0, 5,1 Fica a espera que (A) seja do caractere Q Converte dgito ASCII para dgito binrio Ambas as instrues carregam o DPTR com a cadeia de caractere AB
EQU DB
AGUARDE:
CJNE SUBB MOV MOV
Microprocessadores
Prof. Adriano (DEI-Universidade do Minho)
Estrutura do programa e programaoAssembly com 8051
Operadores de expresso
Smbolo do Operador+, -, /, * MOD
OperaoAdio, subtraco Diviso, multiplicao Resto da diviso Ou-lgico E-lgico Ou-exclusivo Complemento Rodar direita Rodar esquerda Obter o MSB Obter o LSB Igual a Diferente Menor que Menor ou igual Maior que Maior ou igual