Está en la página 1de 34

Ensamblador

Archivo
Fuente

Ensamblador

Código
Máquina

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ensamblador de la Microchip MPLAB

Programa.asm Archivos Fuente

MPASM Ensamblador

Programa.HEX Archivo final .HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Realizar un Proyecto con MPLAB
Programa1.asm Programa2.asm Archivos Fuente

MPASM MPASM Ensamblador

Archivos Objeto
Programa1.o Programa2.o
Relocalizables

Archivos
16F877.lkr localizador de
Dir.

MPLINK Enlazador

Archivo final
Programa.HEX
.HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Instrucciones en el Ensamblador
ETIQUETA NEMÓNICO U OPERANDO COMENTARIO
OPERACIÓN
PRUEBA MOVLW 0xA0 ;Se carga al registro W el
;dato A0hh

COMENTARIOS : describe el significado de


la instrucción para dar una idea
de lo que hace el programa. Es
opcional

OPERANDO(S): proporciona la información requerida por la


operación.

NEMÓNICO u OPERACIÓN : específica la operación a


realizar, ya sea una instrucción del
microcontrolador o una directiva del
ensamblador.

ETIQUETA : Debe empezar en la columna 1, puede estar


seguida de dos puntos (:), un espacio,
una tabulación o fin de línea.

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Instrucciones en el Ensamblador
Representación Numérica

Tipo Sintaxis Ejemplo


Decimal D’<dígitos>’ D’250’
.<dígitos> .250
Hexadecimal H’<díg_Hex>’ H’8B’
0x<díg_Hex> 0x8B
Octal O’<díg_Oct>’ O’777’
Binario B’<díg_Bin>’ B’10011111’
ASCII ’<Carácter>’ ’M’
A’<Carácter>’ A’M’
UNEXPO – Pto. Ordaz. MICROPROCESADORES
Directivas del Ensamblador

CODE Inicia la sesión de un programa. Se utiliza para programas


relocalizables

Sintáxis
[<Etiq>] CODE [<Dirección ROM>]

Ejemplo
RESET CODE H’0000’ ;La instrucción GOTO se
GOTO START ;almacenara en la Dir. 0000h

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

END Le indica al ensamblador que es el fin del programa.

Sintáxis
END

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

EQU Define una constante en el ensamblador

Sintáxis
[<Etiq>] EQU <expr>

Ejemplo
STATUS EQU 0x03 ;le asigna el valor 03h a la etiqueta
;STATUS

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

BANKSEL Se coloca en el banco de la memoria RAM interna

Sintáxis
BANKSEL <Etiq>

Descripción: Se utiliza para generar las instrucciones que


permiten colocarse en el banco de la RAM interna de la
dirección <Etiq>

Ejemplo
NUMERO1 EQU 0x0A ;le asigna el valor 0Ah a la etiqueta
;NUMERO1

BANKSEL NUMERO1 ;Genera las instrucciones para


;colocarse en el Banco 1
; BSF STATUS,RP0
; BCF STATUS,RP1

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

EXTERN Declara una etiqueta definida como externa.

Sintaxis
EXTERN <Etiq> [, <Etiq>, ...]

Descripción: Se utiliza para generar archivos relocalizables, las


etiquetas definidas como externas pueden ser llamadas desde
el programa en curso así se encuentre en otro archivo

Ejemplo

EXTERN SubRutina
....
CALL SubRutina

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

GLOBAL Exporta a otros archivos etiquetas

Sintáxis
GLOBAL <Etiq> [, <Etiq>, ...]

Descripción: Si se desea que una etiqueta sea compartida por


otros archivos debe definirse como global, seguido de la
etiqueta. En el otro archivo debe definirse como EXTRN

Ejemplo

SubRutina
GLOBAL SubRutina
addwl 0xFF
return

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

ORG Define el origen donde debe comenzar el Programa

Sintáxis
[<Etiq>] ORG <expr>

Ejemplo
RESET ORG 0x0000
movlw 01 ;Esta instrucción comienza en la dir
addlw 01 ;0000h de la memora de Prog, y las
;demás se incrementa la dir

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

UDATA Inicia un conjunto de datos sin condiciones iniciales

Sintaxis
<Etiq> UDATA [<DIR. RAM>]

Descripción: Esta directiva es utilizada para programas


relocalizables, generalmente es utilizada para reservar una
serie de datos que estará en el archivo de registros y podrán
ser utilizados por otros archivos.

Ejemplo

UDATA
Dato1 RES 1
Dato2 RES 2

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

RES Reserva espacio de memoria

Sintaxis
[<Etiq>] RES <res_mem>

Descripción:
Esta directiva reserva la cantidad de memoria especificadas por
<res_mem>, los datos en la memoria se pueden acceder
apuntado por <Etiq>.

Ejemplo

UDATA
Dato1 RES 1 ;Reserva un byte en la MEM RAM (sin cond. Ini.)
Dato2 RES 2 ;Reserva dos byte en la MEM RAM (sin cond. Ini.)

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

RADIX Le indica al ensamblador el sistema de numeración con la que


se colocan los números

Sintaxis
RADIX <Base>

Descripción: Con esta directiva se le indica al ensamblador la


base con la cual se encuentran los números colocados en el
programa. Los valores validos son: hex, dec, oct

Ejemplo

RADIX dec

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

#INCLUDE Se inserta un archivo en el programa fuente actual

Sintaxis
#INCLUDE <<Archivo_Incluir>>
#INCLUDE <“Archivo_Incluir”>

Descripción: Tiene el mismo efecto que incluir el archivo de


texto <<Archivo_Incluir>> en el programa fuente actual

Ejemplo
#INCLUDE “P16F877.inc”

#INCLUDE “c:\Programas\ASM\reg.h”

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas del Ensamblador

LIST Mediante esta directiva se puede configurar la apariencia y


control del ensamblador

Sintaxis
LIST [<Opción_List>, …, <Opción_List>]

<Opción_List>
p=<type> Tipo de C.
r=<base> Base del Número a utilizar

Ejemplo
LIST p=16F877, r=HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ejemplo 1
LIST P=16F877
;Suma de dos números cada uno de 16 Bits
;Suma: N1(16) + N2(16) -> N2(16)
; N1 <- N1_H:N1_L
; N2 <- N2_H:N2_L
;
STATUS EQU 0x03
C EQU 0x00
W EQU 0x00
F EQU 0x01
N1_L EQU 0x20
N1_H EQU 0x21
N2_L EQU 0x22
N2_H EQU 0x23
;
ORG 0x0
goto INICIO

ORG 0x5
INICIO movf N1_L,W
addwf N2_L,F
btfsc STATUS,C
incf N2_H,F
movf N1_H,W
addwf N2_H,F
goto INICIO
END

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ejemplo 2
LIST P=16F877
RADIX HEX
#INCLUDE "P16F877.inc"
;
;Suma de dos números cada uno de 16 Bits
;Suma: N1(16) + N2(16) -> N2(16)
; N1 <- N1_H:N1_L
; N2 <- N2_H:N2_L
;
N1_L EQU 20
N1_H EQU 21
N2_L EQU 22
N2_H EQU 23
;
ORG 0x0
goto INICIO

ORG 0x5
INICIO movf N1_L,W
addwf N2_L,F
btfsc STATUS,C
incf N2_H,F
movf N1_H,W
addwf N2_H,F
goto INICIO
END

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Enlazador
Prog1.asm Prog2.asm Archivos Fuente

MPASM MPASM Ensamblador

Archivos Objeto
Prog1.o Prog2.o
Relocalizables

Archivos
16F877.lkr localizador de
Dir.

MPLINK Enlazador

Programa.OUT Programa.COD Programa.HEX Programa.LST Archivo final


.HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Archivos de Entrada del Enlazador
Archivo Objeto (.o)

Son archivos cuyo código son relocalizables, o sea que las


direcciones de los datos a usarse y la localización del programa
no están definidos en este archivo, y se genera a partir del
ensamblador

Archivo para Localización de Código y Datos (.lkr)

En este archivo se debe indicar las direcciones en donde se


debe localizar el programa y los datos que no se especificaron
en los archivos (.o)

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Archivos de Salida del Enlazador
Archivo COFF (.out, .cof)

Este es un archivo generado por MPLINK para generar los


archivos .HEX y el LST

Archivo COD (.cod):

archivo usado durante la depuración por MPLAB, puede ser


usado durante la simulación

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Archivos de Salida del Enlazador
Archivo HEX (.hex):

Archivo guardado en formato Intel HEX, este archivo es


utilizado para grabar el programa en el microcontrolador o para
la depuración en el simulador

Archivo de Referencias Cruzadas LST (.LST):

Este archivo muestra el programa en mnemónico y en código


maquina

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr

Para definir Regiones de memoria ROM

CODEPAG Esta directiva es utilizada para definir la memoria de programa


a usarse

Sintaxis:
CODEPAGE NAME=memName START=addr END=addr [PROTECTED] [FILL=fillvalue]

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr
CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTED
CODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTED
CODEPAGE NAME=page0 START=0x5 END=0x7FF
CODEPAGE NAME=page1 START=0x800 END=0xFFF
CODEPAGE NAME=page2 START=0x1000 END=0x17FF
CODEPAGE NAME=page3 START=0x1800 END=0x1FFF
0000H RESET

0004H Vector Interrupción


0005H

Página 0
2 K

07FFH
0800H

Página 1
2 K

0FFFH
1000H

Página 2
2 K

17FFH
1800H

Página 3
2 K

1FFFH

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr

Para definir Regiones de memoria RAM

Registros mapeados en Bancos

DATABANK NAME=memName START=addr END=addr [PROTECTED]

Registro que se encuentran en los cuatro bancos

SHAREBANK NAME=memName START=addr END=addr [PROTECTED]

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr
Dir. Dir. Dir. Dir.
INDF 00h INDF 80h INDF 100h INDF 180h
TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA 05h TRISA 85h 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h 107h 187h
PORTD 08h TRISD 88h 108h 188h
PORTE 09h TRISE 89h 109h 189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch
PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado 18Eh
TMR1H 0Fh 8Fh EEADRH 10Fh Reservado 18Fh
T1CON 10h 90h 110h 190h
TMR2 11h SSPCON2 91h 111h 191h
T2CON 12h PR2 92h 112h 192h
SSPBUF 13h SSPADD 93h 113h 193h
SSPCON 14h SSPSTAT 94h 114h 194h
CCPR1L 15h 95h Registros 115h Registros 195h
CCPR1H 16h 96h Propocito 116h Propocito 196h
CCP1CON 17h 97h General 117h General 197h
RCSTA 18h TXSTA 98h (GPR) 118h (GPR) 198h
TXREG 19h SPBRG 99h 16 Bytes 119h 16 Bytes 199h
RCREG 1Ah 9Ah 11Ah 19Ah
CCPR2L 1Bh 9Bh 11Bh 19Bh
CCPR2H 1Ch 9Ch 11Ch 19Ch
CCP2CON 1Dh 9Dh 11Dh 19Dh
ADRESH 1Eh ADRESL 9Eh 11Eh 19Eh
ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh
20h A0h 120h 1A0h
Registros Registros Registros
Registros
Propocito Propocito Propocito
Propocito
General General General
General
(GPR) (GPR) (GPR)
(GPR)
80 Bytes 80 Bytes 80 Bytes
EFh 16Fh 1EFh
96 Bytes F0h 170h 1F0h
Acceso Acceso Acceso
70h-7Fh 70h-7Fh 70h-7Fh
7Fh FFh 17Fh 1FFh
Banco 0 Banco 1 Banco 2 Banco 3

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED


DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
DATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTED
DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED

DATABANK NAME=gpr0 START=0x20 END=0x6F


DATABANK NAME=gpr1 START=0xA0 END=0xEF
DATABANK NAME=gpr2 START=0x110 END=0x16F
DATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7F


SHAREBANK NAME=NoBank START=0xF0 END=0xFF
SHAREBANK NAME=NoBank START=0x170 END=0x17F
SHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr

Para definir la localización de memoria ROM y RAM

SECTION La directiva SECTION define la sección de bloque de programa


(ROM), o de datos (RAM) que contendrá la sección

Sintaxis:
SECTION NAME=’NomSecc’{ ROM=’NomMEM’ | RAM=’NomMEM’ }

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Directivas para el archivo lkr
LIST P=16F877
#INCLUDE "P16F877.inc"
;
;Suma de dos números cada uno de 16 Bits
; Suma: N1(16) + N2(16) -> N2(16)
; N1 <- N1_H:N1_L
16F877.lkr
; N2 <- N2_H:N2_L CODEPAGE NAME=STARTUP START=0x0 END=0x3 PROTECTED
; CODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTED
D_Main UDATA CODEPAGE NAME=page0 START=0x5 END=0x7FF
N1_L RES 1
N1_H RES 1 DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED
N2_L RES 1 DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
N2_H RES 1 DATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTED
; DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED
RESET CODE
goto INICIO DATABANK NAME=gpr0 START=0x20 END=0x6F
ProgMain CODE DATABANK NAME=gpr1 START=0xA0 END=0xEF
INICIO movf N1_L,W DATABANK NAME=gpr2 START=0x110 END=0x16F
addwf N2_L,F DATABANK NAME=gpr3 START=0x190 END=0x1EF
btfsc STATUS,C
incf N2_H,F SHAREBANK NAME=NoBank START=0x70 END=0x7F
movf N1_H,W SHAREBANK NAME=NoBank START=0xF0 END=0xFF
addwf N2_H,F SHAREBANK NAME=NoBank START=0x170 END=0x17F
goto INICIO SHAREBANK NAME=NoBank START=0x1F0 END=0x1FF
END
SECTION NAME=RESET ROM=STARTUP // Vector de Reset
SECTION NAME=ProgMain ROM=page0 // page0

SECTION NAME=D_Main RAM=gpr2 // Se colocan los datos


// Main.asm
// gpr2 **110h-16Fh**

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ejemplos

Ejemplo

Se debe convertir un numero binario de 16 bits en su respectivo


código BCD:

BIN  (21:20)h

BCD  (1A2:1A1:1A0)h

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ejemplo

Top_BB.asm Bin2BCD.asm Archivos Fuente

MPASM MPASM Ensamblador

Archivos Objeto
Top_BB.o Bin2BCD.o
Relocalizables

Archivos
16F877.lkr localizador de
Dir.

MPLINK Enlazador

Archivo final
Bin16BCD.HEX
.HEX

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ejemplo
Top_BB.asm
LIST p='16f877'
include "p16f877.inc" Etiquetas definidas
EXTERN H_byte, L_byte, R0, R1, R2, B2_BCD En otro archivo
;
Datos_Bi UDATA
(Bin2BCD.asm)
BIN_L RES 1
BIN_H RES 1
;
Datos_BCD UDATA 16F877.lkr
BCD_L RES 1
BCD_M RES 1 CODEPAGE NAME=vec_res START=0x0 END=0x3 PROTECTED
BCD_H RES 1 CODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTED
; CODEPAGE NAME=page0 START=0x5 END=0x7FF
STARTUP CODE
goto INICIO DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED
; DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
Prog1 CODE DATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTED
; DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED
INICIO
movf BIN_L,W DATABANK NAME=gpr0 START=0x20 END=0x6F
movwf L_byte DATABANK NAME=gpr1 START=0xA0 END=0xEF
movf BIN_H,W DATABANK NAME=gpr2 START=0x110 END=0x16F
movwf H_byte DATABANK NAME=gpr3 START=0x190 END=0x1EF
;
call B2_BCD SHAREBANK NAME=NoBank START=0x70 END=0x7F
; SHAREBANK NAME=NoBank START=0xF0 END=0xFF
BANKSEL BCD_L SHAREBANK NAME=NoBank START=0x170 END=0x17F
movf R2,W SHAREBANK NAME=NoBank START=0x1F0 END=0x1FF
movwf BCD_L
movf R1,W SECTION NAME=STARTUP ROM=vec_res // Vector de Reset
movwf BCD_M SECTION NAME=PROG1 ROM=page0 // page0
movf R0,W
movwf BCD_H SECTION NAME=Datos_Bi RAM=gpr0 // N1 y N2 -> GPR0
; SECTION NAME=Datos_BCD RAM=gpr3 // Num_1 y Num_2 -> NoBank
goto INICIO
END

UNEXPO – Pto. Ordaz. MICROPROCESADORES


Ejemplo
ADD_BCD8.asm Etiquetas definidas
;Se Definen los Datos
Para ser utilizadas
DATOS_BB UDATA Por otro archivo
L_byte RES 1
H_byte RES 1
;
;Se definen las etiquetas Globales
GLOBAL L_byte, H_byte 16F877.lkr
;
PROG1 CODE ;Codigo Pagina 0 CODEPAGE NAME=vec_res START=0x0 END=0x3 PROTECTED
B2BCD CODEPAGE NAME=Vector_INT START=0x4 END=0x4 PROTECTED
GLOBAL B2BCD CODEPAGE NAME=page0 START=0x5 END=0x7FF
.
. ;Código de la DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED
. ;Sub-Rutina DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
. DATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTED
. DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED
RETURN
; DATABANK NAME=gpr0 START=0x20 END=0x6F
END DATABANK NAME=gpr1 START=0xA0 END=0xEF
DATABANK NAME=gpr2 START=0x110 END=0x16F
DATABANK NAME=gpr3 START=0x190 END=0x1EF

SHAREBANK NAME=NoBank START=0x70 END=0x7F


SHAREBANK NAME=NoBank START=0xF0 END=0xFF
SHAREBANK NAME=NoBank START=0x170 END=0x17F
SHAREBANK NAME=NoBank START=0x1F0 END=0x1FF

SECTION NAME=STARTUP ROM=vec_res // Vector de Reset


SECTION NAME=PROG1 ROM=page0 // page0

SECTION NAME=DATOS RAM=gpr0 // N1 y N2 -> GPR0


SECTION NAME=DATOS_BCD RAM=NoBank // Num_1 y Num_2 -> NoBank

UNEXPO – Pto. Ordaz. MICROPROCESADORES

También podría gustarte