Baixe o app para aproveitar ainda mais
Prévia do material em texto
Organização Básica de computadores e linguagem de montagem 1o Semestre de 2011 Prof. Edson Borin Aula 9 Revisão das diretivas do montador • As diretivas do montador nos permite especificar para o montador como queremos programar o microcontrolador. • Por exemplo, com as diretivas .CSEG, .DSEG, .ESEG e .ORG podemos informar ao montador onde colocar os dados ou as instruções. Diretivas do Montador <= reservar um (ou múltiplos) bytes AVR Assembler User Guide Development Tools User Guide 4-9 The Assembler is not case sensitive. The operands have the following forms: Rd: R0-R31 or R16-R31 (depending on instruction) Rr: R0-R31 b: Constant (0-7), can be a constant expression s: Constant (0-7), can be a constant expression P: Constant (0-31/63), can be a constant expression K: Constant (0-255), can be a constant expression k: Constant, value range depending on instruction. Can be a constant expression. q: Constant (0-63), can be a constant expression 4.5 Assembler directives The Assembler supports a number of directives. The directives are not translated directly into opcodes. Instead, they are used to adjust the location of the program in memory, define macros, initialize memory and so on. An overview of the directives is given in the following table. Summary of directives: Note: All directives must be preceded by a period. Directive Description BYTE Reserve byte to a variable CSEG Code Segment DB Define constant byte(s) DEF Define a symbolic name on a register DEVICE Define which device to assemble for DSEG Data Segment DW Define constant word(s) ENDMACRO End macro EQU Set a symbol equal to an expression ESEG EEPROM Segment EXIT Exit from file INCLUDE Read source from another file LIST Turn listfile generation on LISTMAC Turn macro expansion on MACRO Begin macro NOLIST Turn listfile generation off ORG Set program origin SET Set a symbol to an expression Diretivas do Montador <= mudar para memória de programa <= mudar para memória de dados <= mudar para memória EEPROM <= escrever um byte <= escrever uma palavra <= finalizar a macro <= iniciar uma macro <= iniciar/retomar a inclusão do programa no arquivo LST <= parar a inclusão do programa no arquivo LST <= ajustar o ponto de inserção de dados (código, bytes, ...) na mem. <= renomear registradores <= definir constantes <= incluir outros arquivos <= definir constantes Organização do AVR ATmega88 ATmega88 AVR CPU E/S PortB, ... 0 1 2 3 4 FLASH SRAM EEPROM 16 bits 8 bits 8 bits 0 1 2 3 4 0 1 2 3 4 ... ... ... Diretivas do Montador 0 1 2 3 4 FLASH SRAM EEPROM 16 bits 8 bits 8 bits 0 1 2 3 4 0 1 2 3 4 ... ... ... .CSEG .ORG 0x0000 rjmp MAIN ; Interrupção de Reset (Salta para a subrotina MAIN). .CSEG ; Vetor 1 (Na memória de programa) vetor1: .dw 0x0014, 0x1234, 0xff51, 0x2d3e, 0x0121, 0x0aef, 0xb8a9 .dw 0x1029, 0x0137, 0xb7ba, 0x52d3, 0xf712, 0x909c, 0xabcd .dw 0x1e7e, 0x1a92, 0xac9b, 0x99ef, 0x1028, 0x29aa, 0x23ac vetor1_fim: .ESEG .ORG 0x0001 .db 0x12, 0x14 .dw 0xabcd vetor_aux: .BYTE 200 vetor_aux_fim: Diretivas do Montador 0 1 2 3 4 FLASH SRAM EEPROM 16 bits 8 bits 8 bits 0 1 2 3 4 0 1 2 3 4 ... ... ... rjmp MAIN .CSEG .ORG 0x0000 rjmp MAIN ; Interrupção de Reset (Salta para a subrotina MAIN). .CSEG ; Vetor 1 (Na memória de programa) vetor1: .dw 0x0014, 0x1234, 0xff51, 0x2d3e, 0x0121, 0x0aef, 0xb8a9 .dw 0x1029, 0x0137, 0xb7ba, 0x52d3, 0xf712, 0x909c, 0xabcd .dw 0x1e7e, 0x1a92, 0xac9b, 0x99ef, 0x1028, 0x29aa, 0x23ac vetor1_fim: .ESEG .ORG 0x0001 .db 0x12, 0x14 .dw 0xabcd vetor_aux: .BYTE 200 vetor_aux_fim: Estamos dizendo ao montador para escrever na memória de programa (.CSEG), a partir do endereço 0x0000 (.ORG 0x0000) a instrução rjmp MAIN Diretivas do Montador 0 1 2 3 4 FLASH SRAM EEPROM 16 bits 8 bits 8 bits 0 1 2 3 4 0 1 2 3 4 ... ... ... rjmp MAIN 0x14 0x00 0x34 0x12 0x51 0xff 0x3e 0x2d .CSEG .ORG 0x0000 rjmp MAIN ; Interrupção de Reset (Salta para a subrotina MAIN). .CSEG ; Vetor 1 (Na memória de programa) vetor1: .dw 0x0014, 0x1234, 0xff51, 0x2d3e, 0x0121, 0x0aef, 0xb8a9 .dw 0x1029, 0x0137, 0xb7ba, 0x52d3, 0xf712, 0x909c, 0xabcd .dw 0x1e7e, 0x1a92, 0xac9b, 0x99ef, 0x1028, 0x29aa, 0x23ac vetor1_fim: .ESEG .ORG 0x0001 .db 0x12, 0x14 .dw 0xabcd vetor_aux: .BYTE 200 vetor_aux_fim: Estamos dizendo ao montador para escrever na memória de programa (.CSEG) os dados 0x0014, ... 0x23ac. Como já estávamos em .CSEG antes, este comando .CSEG é redundante. Diretivas do Montador 0 1 2 3 4 FLASH SRAM EEPROM 16 bits 8 bits 8 bits 0 1 2 3 4 0 1 2 3 4 ... ... ... rjmp MAIN 0x14 0x00 0x34 0x12 0x51 0xff 0x3e 0x2d 0x12 0x14 0xcd 0xab .CSEG .ORG 0x0000 rjmp MAIN ; Interrupção de Reset (Salta para a subrotina MAIN). .CSEG ; Vetor 1 (Na memória de programa) vetor1: .dw 0x0014, 0x1234, 0xff51, 0x2d3e, 0x0121, 0x0aef, 0xb8a9 .dw 0x1029, 0x0137, 0xb7ba, 0x52d3, 0xf712, 0x909c, 0xabcd .dw 0x1e7e, 0x1a92, 0xac9b, 0x99ef, 0x1028, 0x29aa, 0x23ac vetor1_fim: .ESEG .ORG 0x0001 .db 0x12, 0x14 .dw 0xabcd vetor_aux: .BYTE 200 vetor_aux_fim: Estamos dizendo ao montador para escrever na memória EEPROM (.ESEG), a partir do endereço 0x0001 (.ORG), os bytes 0x12, 0x14 e a palavra 0xabcd. Diretivas do Montador 0 1 2 3 4 FLASH SRAM EEPROM 16 bits 8 bits 8 bits 0 1 2 3 4 0 1 2 3 4 ... ... ... rjmp MAIN 0x14 0x00 0x34 0x12 0x51 0xff 0x3e 0x2d 0x12 0x14 0xcd 0xab .CSEG .ORG 0x0000 rjmp MAIN ; Interrupção de Reset (Salta para a subrotina MAIN). .CSEG ; Vetor 1 (Na memória de programa) vetor1: .dw 0x0014, 0x1234, 0xff51, 0x2d3e, 0x0121, 0x0aef, 0xb8a9 .dw 0x1029, 0x0137, 0xb7ba, 0x52d3, 0xf712, 0x909c, 0xabcd .dw 0x1e7e, 0x1a92, 0xac9b, 0x99ef, 0x1028, 0x29aa, 0x23ac vetor1_fim: .ESEG .ORG 0x0001 .db 0x12, 0x14 .dw 0xabcd vetor_aux: .BYTE 200 vetor_aux_fim: Qual é o valor dos labels vetor1, vetor1_fim vetor_aux e vetor_aux_fim? • Exercícios: –Implemente o programa anterior no AVR Studio e gere o arquivo “.lst”. –Verifique o endereço dos labels e os dados nas memórias de programa e EEPROM após a montagem. –Utilize as diretivas do montador para escrever outros dados nas memórias. Diretivas do Montador
Compartilhar