Академический Документы
Профессиональный Документы
Культура Документы
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 binrio
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
ii. Linker
a. 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 smbolos
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
LC = Location Counter
Usado pelo assembler como endereo da instruo ou valor da label
ASM51
3.
Programa.src (echo.src)
Programa.lst
Passo 2
1. 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
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 $-TABLE
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Pertencem a outros mdulos, e por isso s o linker pode determinar o endereo absoluto
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 1
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Microprocessadores
Microprocessadores
2. Um ficheiro relocatable contm ainda uma tabela de smbolos e outras informaes necessrias para que o linker possa produzir o programa executvel
Microprocessadores
Exemplo:
Pg. 164: errado
Microprocessadores
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
Exemplo de smbolos
PAR 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
Microprocessadores
Usando o operador .
Microprocessadores
Bases nmericas
Decimal Binrio Octal MOV MOV MOV A, #15 A, #15D #1111B A, #17Q A, #17O A, #0FH A, #0A5H A, #A5H?
Microprocessadores
Cadeias de caractere
MOV
ASPAS
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:
Microprocessadores
Operadores de expresso
Smbolo do Operador
+, -, /, * MOD
Operao
Adio, 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
Precedncia do Operadores
() HIGH, LOW * , /, MOD, SHL, SHR +, EQ, NE, LT, LE, GT, GE, =, <>, <, <=, >, >= NOT AND OR, XOR Operadores com mesma precedncia so avaliados da esquerda para direita
Resultado
0001H 0AAH 0DDH 3 0010B 0FFFEH 4100H 0000H 0FFFFH 0FFFFH 0FFFFH 0FFFFH 1000B 0041H 0000H 4141H 0FFBFH
TRES MTRES
EQU EQU MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
3 -3 A, #10 + 10H A, #1AH A, #25 MOD 7 A, #4 A, #9 AND 0FH A, #9 A, # (NOT TRES) + 1 A, #MTRES A, #11111101B A, #8 SHL 1 A, #10H A, #12H A, #HIGH 1234H A, #5 = 5 A, #$ > 0 A, #100 GE 50
Prof. Adriano (DEI-Universidade do Minho)
Microprocessadores
Sntaxe
Funo
Controlo do estado
expresso
Especifica um valor para contador de localizao do segmento activo Indica ao assembler o fim do programa fonte
END USING
expresso
Indica ao assembler o banco de registo usado no cdigo que vem a seguir directiva. Repare que a comutao do banco de registo deve ser efectuada usando apenas instrues do 8051 Declara um smbolo como sendo um segmento relocatable de um dado tipo. Para comear a usar o segmento, deve-se usar a directiva RSEG Atribu um valor a um smbolo Igual ao EQU, exceptuando o facto de permitir a redefinio o smbolo Atribui ao smbolo um endereo directo da RAM interna Atribui um endereo indirectamente enderevel da RAM interna ao smbolo Atribui ao smbolo um endereo da memria externa Atribu um endereo directo da rea de memria enderevel ao bit a um smbolo Atribu um endereo da memria de cdigo ao smbolo
Definio de smbolos
SEGMENT
Microprocessadores
Jump
Sntaxe
Funo
[LABEL:]
DS
expresso
Reserva espaos em mltiplos de bytes. No pode ser utilizado com segmento do tipo BIT. O valor da expresso deve ser conhecida pelo assembler Reserva espaos em mltiplos de bits. O valor da expresso deve ser conhecida pelo assembler Inicializa a memria de cdigo com valores do tipo byte/word Define uma lista de smbolos que tornam visveis e utilizveis a partir de outros mdulos Informa o assembler da lista de smbolos definidos noutros mdulos e que vo ser utilizados neste. O tipo de segmento pode ser CODE,
DATA, XDATA, IDATA, BIT e um especial designado por NUMBER que especifica um smbolo definido por EQU
DBIT
[LABEL:] [LABEL:]
EXTRN
Microprocessadores
32 16 8
; repare que a label opcional ; reserva um buffer de 16 bytes para a comunicao srie ; reserva um buffer de 8 bytes para a entrada/sada ; selecciona o segmento absoluto enderevel a bit
; a label opcional ; reserva um buffer de 32 bit para operaes de entrada/sada ; cadeia de caractere
DBIT DB
Microprocessadores
Microprocessadores
GOODBYE:
C ...
BUF:
DS END
10H
Microprocessadores
; fim do mdulo
Sendo este smbolos definidos em segmentos relocatable, s sero estabelecidos pelo linker
Prof. Adriano (DEI-Universidade do Minho)
Microprocessadores
; usa R7 como o contador de posies a inicializar ; aponta R0 para a primeira posio do buffer ;escrever no endereo apontado por R0 actualmente, o caractere a ; j atingiu a ltima posio? Se no, ento continua a preencher ; caso contrrio, acabou ; fim do mdulo
ADDR LEN
Microprocessadores
SQUARES: DB MESSAGE: DB
0, 1, 4, 9, 16, 25 Login: , 0
0100h 0101h 0102h 0103h 0104h 0105h 0106h 0107h 0108h 0109h 010Ah 010Bh 010Ch
Microprocessadores
DW
$, A, 1234H, 2 , BC
Endereo
0200h 0201h 0202h 0203h 0204h 0205h 0206h 0207h 0208h 0209h
Contedo
00h 02h 41h 00h 34h 12h 02h 00h 43h 42h
Microprocessadores
Controlos do Assembler
Usados para controlar:
onde o assembler obtm os ficheiros de entrada onde colocar os ficheiros objectos como formatar os ficheiros de listagem
Controlos do assembler
$DATE(data) $TITLE(string) $PAGING $PAGEWIDTH(n) $SYMBOLS $NOPRINT $DEBUG $EJECT $ERRORPRINT(file) $MOD51 $LIST ... Coloca a data no cabealho da pgina Coloca uma cadeia de caracteres no cabealho da pgina Dividir o ficheiro de listagem em vrias pginas Especifica o nmero de colunas (caracteres por linha) numa pgina de listagem Cria uma tabela formatada de smbolos usada no programa Impede a criao de ficheiros de listagem Escreve informao sobre smbolo de depurao nos ficheiros objectos Continua a listagem na prxima pgina Especifica um ficheiro para as MSGs de erros Reconhece os SFR pr-definidos para o 8051 Escreve cada linha do ficheiro de cdigo assembly no ficheiro de listagem ...
Microprocessadores
Macros
til quando uma parcela de cdigo usado repetidamente no programa
i. Escreve-se a parcela de cdigo uma nica vez e ser usada posteriormente em qualquer parte do programa atravs do uso do nome da macro (posio onde o assembler expande o cdigo da macro)
ii. Ao contrrio das macros, as subrotinas so invocadas atravs de instrues especiais CALLs (o corpo da subrotina no expandida, mas muda-se o fluxo de execuo) iii. As macros so usadas no campo das mnemnicas de uma linha de cdigo assembler como se fosse uma instruo i. O nome da macro precedido de % para a distinguir de uma instruo 8051
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Microprocessadores
2. 3. 4.
Sintaxe da Macro
1. Sem passagem de parmetro
%*DEFINE (nome_macro) (corpo da macro)
Exemplos de Macro
%*DEFINE (PUSH_DPTR) ( PUSH DPH PUSH DPL )
%*DEFINE (DEC_DPTR) LOCAL SKIP (DEC DPL MOV A, DPL CJNE A, #0FFH, %SKIP DEC DPH %SKIP:)
%*DEFINE (CMP_NUM (VALOR) ) (CJNE A, #%VALOR, $+3) %*DEFINE (JGT (VALOR, SALTO) ) (CJNE A, #%VALOR+1, $+3 JNC %SALTO)
CJNE uma instruo de 3 bytes
... START: MOV A, #3 %CMP_NUM (20) JNC MAIOR JMP $ MAIOR: MOV A, #0FFH END
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Preservao de dados
1. Deve-se sempre salvaguardar o contedo dos registos alterados pelas macros/subrotinas, caso sejam necessrios (com os valores anterior chamada) aps a chamada da macro/subrotina 2. Uma forma de garantir a preservao destes dados consiste em armazen-los na pilha (push), no incio do corpo da macro/subrotina e restaur-los no final (pop)
No caso das funes antes da execuo do RET
Sendo a pilha uma estrutura LIFO (Last In First Out) a ordem dos PUSHs e POPs devem ser invertidas
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Preservao de dados
%*DEFINE (DEC_DPTR) LOCAL SKIP ( PUSH ACC DEC DPL MOV A, DPL CJNE A, #0FFH, %SKIP DEC DPH POP ACC %SKIP:) START: MOV DPTR, #10F4H MOVX A, @DPTR %DEC_DPTR ADD A, #3 END
Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
Pretende-se efectuar (A) = (10F4H) + 3 e de seguida apontar DPTR para 10F3H. Ser?
Preservao de dados
SDIV: Salvaguarda e restaurao de contexto PUSH ACC PUSH 0F0H DIV AB ADD A, #2 MOV R0, A POP 0F0H POP ACC RET
(A) = 9 (B) = 3 Pretende-se efectuar (R0) = 2 + (A) / 3 = 5 e 12 = (A) = (A) + (B). Ser?
MAIN:
Pilha
SJMP
ADD_IT: MOV DEC DEC ADD XCH RET
R0, SP R0 R0 A, B A, @R0
; carrega R0 com o apontador do topo da pilha ; aponta para a posio aps o endereo de R0 ; retorno ; (A) = (A) + (B) ; troca o contedo de A com o de ((R0)) ; retorna a main SP R0 SP SP SP MSB(PCpop) LSB(PCpop) 04H / 09H
Microprocessadores
Exerccio:Converta um dgito armazenado em R0 para um caracter ASCII que representa o seu valor hexadecimal. O valor em R0 contm apenas um dgito hexadecimal (o MSnibble 0). Guarde o resultado no registo B. Deve invocar uma subrotina que recebe o parmetro e devolve o resultado via pilha.
Incio
No
Salvaguarda B e R0 ( (++SP) ) = (B) ( (++SP) ) = (R0) MAIN: PUSH PUSH CALL 0F0H ; salvaguarda (B) 00H ; salvaguarda (R0) H2Ascii ; converta o
; dgito Hexdecimal
Hex2Ascii
Conclua a converso das letra ou converta o dgito, guarde o resultado na pilha e restaura (A) (A) = (A) + ASCII 0 ( (R0)-1 ) = (A) (A) =( (SP --) ) Restaura (R0) e (B) (R0) = ( (SP - -) ) (B) = ( (SP --) ) JMP $ POP POP 00H
; restaura (R0)
0F0H ; coloca em B o
;valor convertido ; acabou
Fim
ACC R0, SP R0 R0 R0 A, @R0 A, #10, $+3 LETRA GUARDA A, # (A - 0 - 10) A, #0 R0 @R0, A ACC
; salvaguardar o (A) ; 1 apontar R0 para topo da pilha ; e depois aponta-o para ; o valor a converter localizado ; aps o endereo de retorno ; carregar A com o valor a converter ; verificar se letra ou dgito ; sendo letra, vai ajustar o offset ; sendo dgito no precisa ajustar o offset, apenas vai concluir a converso ; ajustar o offset no caso de letra ; concluir a converso tanto para letra como dgito ; apontar R0 para a localizao da pilha onde foi salvaguadado B ; guardar o valor convertido nesta localizao ; restaurar o (A) ; retornar ao main Microprocessadores Prof. Adriano (DEI-Universidade do Minho)
LETRA: GUARDA: