Assembly

No mundo da programação a linguagem Assembly é a mais elementar e é classificada como linguagem de baixo nível. Em função desta característica, não fornece algumas técnicas como estrutura de dados, delimitação de blocos e etc. Suas ações se dão por meio de diretivas enviadas ao compilador que executa as funções solicitadas. Abaixo relacionamos algumas diretivas básicas do compilador, perceba que há mudanças de versão para versão do compilador:
  • , vírgula inicia um comentário na mesma linha.
  • .EQU cria um rótulo. Ótimo recurso para criar rótulos inteligíveis.
  • .DB aloca os dados na memória de programa.
  • .ORG determina o local de início para a inserção do código ou dos dados.
  • .DEFINE específica uma variável para uso na compilação.
  • .CSEG especifica o segmento de código isto é, memória de programa do uC.
  • .DSEG especifica o segmento de dados isto é, memória de dados do uC.
  • .ESEG especifica o segmento de memória de dados persistente - EEPROM isto é, memória ñao volátil do uC.
  • .MESSAGE exibe o texto entre as áspas durante a compilação. 
  • .ERROR exibe o texto entre as áspas em caso de erro durante a compilação.
  • .WARNING exibe o texto entre as áspas em caso de erro não grave durante a compilação.
  • .MACRO e .ENDMACRO criam blocos de código reutilizáveis.
  • .INCLUDE insere um arquivo durante a compilação. 
  • .IFDEF / .ELSE / .ENDIF condicionais de compilação.
  • .BYTE define um byte na memória.
**************** TIPOS DE DADOS ****************
Decimal (default): 10, 255
Hexadecimal (two notations): 0x0a, $0a, 0xff, $ff
Binary: 0b00001010, 0b11111111
Octal (leading zero): 010, 077
ASCII: 0-9, a-z, A-Z, sinais, controles
BCD: 0-9

**************** EKZEMPLOJ ****************
Seleção das interrupções:
.IFDEF __INT_RST__
.MESSAGE "Ativando o interrupção de reinicio."
.ORG 0x000
 rjmp cefo
.ELSE
.ERROR "RST ne kompetento"
.ENDIF

Seleção dos módulos a serem ativos:
#define __MODULOs_SELECAO__ FIX_TRUE    ; por seleção dos módulos
#define __ipa__         FIX_TRUE
#define __pre__         FIX_TRUE
#define __geral__      FIX_TRUE
#define __retardo__   FIX_TRUE
#define __exibe__      FIX_TRUE

Ativação de módulos:
.IFDEF __pre__           ;       *
.MESSAGE "Ativando o módulo PRE."      ;       *
.INCLUDE "/inkluzivo/pre.inc"  ;       *
.ELSE
.WARNING "RUTINO PRE ne kompetentaj"
.ENDIF

VAR_TECLADO:     .BYTE 1

VAR_SITUACAO:   .BYTE 1      possibilita a maximização da memória
.EQU i_MODOX_tst      = 7
.EQU i_ALTER_tst        = 6
.EQU i_ACESSO_tst     = 5
.EQU i_ADC_tst            = 4

NOME: .DB "UBIRATAN UAATSIM ITZA I"

.ESEG         ; de 0x00 a 0x03ff (1024 bytes) EEPROMEND
.ORG 0x00

.DSEG         ; de 0x60 a 0xDF (128 bytes)
.ORG SRAM_START

.INCLUDE "m32def.inc" específico de cada microcontrolador ao importar este arquivo adquire-se os rótulos desenvolvidos pela ATMEL. Recomendo estudar integralmente este arquivo.

.CSEG
.ORG 0x000
 rjmp cefo   ; começo do código

.ORG AREA_PROGR código mínimo de inicialização desta programação.

cefo:   cli                                     ; pára as interrupções
           ldi r16,high(RAMEND)
           out SPH,r16                     ; posição inicial, final da SRAM
           ldi r16,low(RAMEND)
           out SPL,r16                      ; define o ponteiro do programa

MSG_INI:  .DB MSG_msgbv, fi_L1C1,16,  "BEM VINDO a IHM ",        SOH
                   .DB MSG_facii,     fi_L2C1,16,  " C.C. DA FAC-II ",              SOH
                   .DB MSG_hwvrs,  fi_L1C1,16,  "HW versao 1.01  ",               SOH
                   .DB MSG_fwvrs,   fi_L2C1,16,  "FW versao 1.01  ",               SOH
                   .DB MSG_prg,       fi_L1C1,16,  "PROJETADO por   ",          SOH
                   .DB MSG_tan,       fi_L2C1,16,  "UBIRATAN UAATSIM",   SOH
                   .DB MSG_lnh1,     fi_L1C1,16,  "PIC-2007 FAC2 CC",          SOH
                   .DB EOT, EOT


;******************************************************************************
.EQU true = 1

#define __TESTES__ true ; comentado = false
#define __T1__ true ; comentado = false
#define __T2__ true ; comentado = false
#define __T3__ true ; comentado = false
;#define __HORAeDATA__ true ; comentado = false
;#define __versao__ true ; comentado = false


.IFDEF __HORAeDATA__
.MESSAGE "*****************************************"
.MESSAGE "* Data: " __DATE__ "/ Hora: " __TIME__".....*"
.MESSAGE "*****************************************"
;
.ELIF __versao__
.MESSAGE "*****************************************"
.MESSAGE "* Versão: 1.1.1/ Ubiratã Uaatsim Itzá I *"
.MESSAGE "*****************************************"
;
.ELIF __T1__
.WARNING "T1"
;
.ELIF __T2__
.WARNING "T2"
;
.ELIF __T3__
.WARNING "T3"
;
.ELSE .ELIF __TESTES__
.WARNING "TESTES"
;
.ENDIF
;******************************************************************************




; tipos de mensagens: .MESSAGE "Mensagem."
; .ERROR "Erro!"
; .WARNING "Aviso!"

#message "Mensagem" --> sempre exibe a mensagem









;******************************************************************************
; ekzemplo per modo trioblo
;
;.IFDEF __LOGICA__
;.WARNING "Teste de Lógica!"
;.MESSAGE "*******************"
;.MESSAGE "* Teste de Lógica *"
;.MESSAGE "*******************"
;
;.ELIF __MOVIMENTO__
;.WARNING "Teste de Movivemnto!"
;.MESSAGE "**********************"
;.MESSAGE "* Teste de Movimento *"
;.MESSAGE "**********************"
;
;.ELIF __ARITMETICA__
;.WARNING "Teste de Aritmética!"
;.MESSAGE "***********************"
;.MESSAGE "* Teste de Aritmética *"
;.MESSAGE "***********************"
;
;.ENDIF

;******************************************************************************
; ekzemplo per modo individual
;
;.IFDEF __LOGICA__
;.MESSAGE "*******************"
;.MESSAGE "* Teste de Lógica *"
;.MESSAGE "*******************"
;.ELSE
;.WARNING "Não habilitado para teste de Lógica!"
;.ENDIF
;------------------------------------------------------------------------------
;.IFDEF __MOVIMENTO__
;.MESSAGE "**********************"
;.MESSAGE "* Teste de Movimento *"
;.MESSAGE "**********************"
;.ELSE
;.WARNING "Não habilitado para teste de Movivemnto!"
;.ENDIF
;------------------------------------------------------------------------------
;.IFDEF __ARITMETICA__
;.MESSAGE "***********************"
;.MESSAGE "* Teste de Aritmética *"
;.MESSAGE "***********************"
;.ELSE
;.WARNING "Não habilitado para teste de Aritmética!"
;.ENDIF
;******************************************************************************


**************** DOKUMENTAÇÃO ****************

Todos os códigos devem ter um cabeçalho contendo:
  • nome da função
  • descrição da função
  • variáveis usadas
  • variáveis que destrói
  • autor
  • data ínicio
  • data última revisão

Nenhum comentário: