Está en la página 1de 14

Programacin en Ensamblador

ATE-Universidad de Oviedo

Programacin en Ensamblador

LENGUAJE ENSAMBLADOR
El nico lenguaje que entienden los microcontroladores es el cdigo
mquina formado por ceros y unos del sistema binario.
El lenguaje ensamblador expresa las instrucciones de una forma ms
natural al hombre a la vez que muy cercana al microcontrolador, ya que cada
una de esas instrucciones se corresponde con otra en cdigo mquina.
El lenguaje ensamblador trabaja con nemnicos, que son grupos de
caracteres alfanumricos que simbolizan las rdenes o tareas a realizar.
La traduccin de los nemnicos a cdigo mquina entendible por el
microcontrolador la lleva a cabo un programa ensamblador.
El programa escrito en lenguaje ensamblador se denomina cdigo fuente
(*.asm). El programa ensamblador proporciona a partir de este fichero el
correspondiente cdigo mquina, que suele tener la extensin *.hex.

ATE-Universidad de Oviedo

Programacin en Ensamblador

Lenguaje ensamblador
y
Programa ensamblador

Cdigo Fuente
.asm

110100001.1100

Cdigo Mquina
.hex

Lenguaje
Ensamblador

Programa
Ensamblador
(MPASM)
ATE-Universidad de Oviedo

Programacin en Ensamblador

El cdigo fuente
Est compuesto por una sucesin de lneas de texto.
Cada lnea puede estructurarse en hasta cuatro campos o columnas
separados por uno o ms espacios o tabulaciones entre s.
Campo de etiquetas. Expresiones alfanumricas escogidas por el
usuario para identificar una determinada lnea. Todas las etiquetas
tienen asignado el valor de la posicin de memoria en la que se encuentra
el cdigo al que acompaan.
Campo de cdigo. Corresponde al nemnico de una instruccin, de una
directiva o de una llamada a macro.
Campo de operandos y datos. Contiene los operandos que precisa el
nemnico utilizado. Segn el cdigo, puede haber dos, uno o ningn
operando.
Campo de comentarios. Dentro de una lnea, todo lo que se encuentre
a continuacin de un punto y coma (;) ser ignorado por el programa
ensamblador y considerado como comentario.
ATE-Universidad de Oviedo

Programacin en Ensamblador

Campo de cdigo
Puede corresponder ese cdigo a:
Instrucciones: son aquellos nemnicos que son convertidos por el
ensamblador en cdigo mquina que puede ejecutar el ncleo del
microcontrolador. En la gama media (PIC16xxx) cada nemnico se
convierte en una palabra en la memoria de programa
Directivas. Pseudoinstrucciones que controlan el proceso de ensamblado
del programa, pero no son parte del cdigo. Son indicaciones al programa
ensamblador de cmo tiene que generar el cdigo mquina
Macros: Secuencia de nemnicos que pueden insertarse en el cdigo
fuente del ensamblador de una manera abreviada mediante una simple
llamada.

ATE-Universidad de Oviedo

Programacin en Ensamblador

Ejemplo de cdigo fuente

;Fichero CUENTA.ASM
;
;Programa de Prueba para la placa PICDEM-2 plus
;Por el Puerto B se saca en binario, el numero de veces
;que se puls la tecla que est conectada a la entrada RA4
;si pulsada a cero y si libre a 1
;
LIST
P=16F877
;Directiva para definir listado y microcontrolador
INCLUDE P16F877.INC
;Inclusin de fichero de etiquetas
ORG
0
BSF
STATUS,RP0
;Paso al banco 1 de la memoria de datos
CLRF
TRISB
;para definir el PORTB como salida
BCF
STATUS,RP0
;Volvemos al banco 0
CLRF
PORTB
;Ponemos a cero el PORTB para que aparezca ese
;valor cuando se defina como salida
ESPERA
BTFSS
PORTA,4
;Esperamos a que se pulse la tecla
CALL
INCREMENTO
;en cuyo caso RA4 pasa a 0 y vamos a
GOTO
ESPERA
;subprograma de INCREMENTO
;Subprograma de INCREMENTO
INCREMENTO
INCF
PORTB,F
;Si se puls incrementamos PORTB
SOLTAR
BTFSS
PORTA,4
;no salimos hasta que se haya soltado
GOTO
SOLTAR
;la tecla, en ese caso RA4 pasara a 1
RETURN
;y volvemos al programa principal
END

ATE-Universidad de Oviedo

Programacin
en Ensamblador
Campo
de Operandos
y Datos

El ensamblador MPASM (distribuido por Microchip) soporta los sistemas


de numeracin decimal, hexadecimal, octal, binario y ASCII.
Los nemnicos que tengan una constante como operando debern incluirla
respetando la sintaxis que se indica a continuacin.
TIPO

SINTAXIS

D<valor>

Decimal
Hexadecimal

d<valor>

H<valor>

.<valor>

h<valor>
<valor>H

0x<valor>
<valor>h

Octal

O<valor>

o<valor>

Binario

B<valor>

b<valor>

ASCII

A<carcter>

a<carcter>

<carcter>

<cadena>

Cadena

Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un
cero para no confundirlas con una etiqueta. Ejemplo: movlw 0F7h
ATE-Universidad de Oviedo

Programacin en Ensamblador

Aprendiendo a Programar
Pasos a dar para poder generar cdigo fuente:
1.- Juego de Instrucciones
2.- Directivas y Macros
3.- Organizacin de la Memoria interna:
Programa
Datos

ATE-Universidad de Oviedo

Programacin en Ensamblador

El juego de instrucciones

Es un juego reducido de 35 instrucciones muy simples. Procesador RISC

La mayora de las instrucciones se ejecuta en 4 ciclos de reloj; los saltos y


llamadas a subprogramas se ejecutan en 8 (no se aprovecha pipeline)

Todas las instrucciones tienen la misma longitud en la gama media: 14 bits.

Por lo tanto el clculo del tiempo de ejecucin y de lo que ocupa un


programa resulta simple

Las instrucciones se pueden clasificar atendiendo a dos criterios:

1. Formato
2. Funcionalidad

ATE-Universidad de Oviedo

Programacin en Ensamblador

El juego de instrucciones: SEGN SU FORMATO


1.- Orientadas
al byte
2.- Orientadas
al bit

3.- Literales y
de control

ATE-Universidad de Oviedo

10

Programacin en Ensamblador

1.- Instrucciones orientadas al byte

7 bits o algo que pueda sustituir


a 7 bits, si es mayor se trunca

Cmo se escriben en ensamblador?


Operacin fuente, destino

1 bit o algo que pueda


sustituir a 1 bit, si es mayor se trunca

Nemnico reservado

Qu hacen?

d=0

W Opera con Dir. operando fuente


d=1

Cmo se codifican?
8

13

c5 c4 c3 c2 c1 c0

Dir. fuente

f6 f5 f4 f3 f2 f1 f0

Cdigo Operacin

Direccin operando fuente


Destino
resultado 1 bit

6 bits

Dnde va a
parar el resultado?

7 bits
11

ATE-Universidad de Oviedo

Programacin en Ensamblador

2.- Instrucciones orientadas al bit

7 bits o algo que pueda sustituir


a 7 bits, si es mayor se trunca

Cmo se escriben en ensamblador?


Operacin fuente, bit
Nemnico reservado

3 bits o algo que pueda


sustituir a 3 bits, si es mayor se trunca

Qu hacen?
Opera o explora el bit de la posicin #bit del operando fuente
Cmo se codifican?
10

13

c3 c2 c1 c0 b2 b1 b0 f6 f5 f4 f3 f2 f1 f0
Cdigo Operacin

Bit a tratar

Direccin operando fuente

4 bits

3 bits

7 bits

ATE-Universidad de Oviedo

12

Programacin en Ensamblador

3.- Instrucciones literales o de control


8 bits o algo que pueda sustituir
a 8 bits, si es mayor se trunca
en GOTO y CALL el valor es de 11 bits

Cmo se escriben en ensamblador?


Operacin valor literal
Nemnico reservado

Qu hacen?
Operan con el valor literal directamente
Cmo se codifican?
c5 c4 c3 c2 c1 c0 k7 k6 k5 k4 k3 k2 k1 k0
13

En el caso
GOTO
y CALL

Cdigo Operacin 6b

Valor con el que se opera 8 bits

c2 c1 c0 k10 k9 k8 k7 k6 k5 k4 k3 k2 k1 k0

ATE-Universidad de Oviedo

Programacin en Ensamblador

13

Cmo leer la tabla?

TABLA-RESUMEN
DE INSTRUCCIONES

Orientadas
al byte: son 18

Orientadas
al bit: son 4

Literales
y de
control: son 13

ATE-Universidad de Oviedo

14

Programacin en Ensamblador

CICLO DE INSTRUCCION
Un ciclo de instruccin es el tiempo que se tarda en ejecutar una
instruccin (salvo las instrucciones de salto) en el microcontrolador. En
los PIC16, un ciclo de instruccin dura 4 ciclos de reloj.
En una primera etapa, la instruccin es trada a la CPU. Esto lleva un
ciclo de instruccin TCY.
En la segunda etapa se ejecuta la instruccin. Esto lleva otro TCY..
No obstante, debido al solapamiento (pipelining entubado) de traer la
instruccin actual y ejecucin de la instruccin previa, una instruccin se
trae y otra se ejecuta cada TCY.

Oscilador

ATE-Universidad de Oviedo

15

Programacin en Ensamblador

CICLO DE INSTRUCCION

Pudiera haber un ciclo de instruccin de retardo si el


resultado de ejecutar la instruccin anterior modifica el
contenido del Contador de Programa (Ej: GOTO CALL).
Esto implica suspender el entubado (pipelining) de las
instrucciones durante un ciclo para que la instruccin a
donde se salta se traiga a la CPU.

Oscilador

ATE-Universidad de Oviedo

16

Programacin en Ensamblador

El juego de instrucciones: SEGN SU FUNCIONALIDAD


Instrucciones de CARGA
NEMNICO

clrf

DESCRIPCIN

FLAGS AFECTADOS

00 (f)

00 (W)

f,d

(f) (destino)

movlw

k (W)

Ninguno

movwf

(W) (f)

Ninguno

clrw
movf

17

ATE-Universidad de Oviedo

Programacin en Ensamblador

Instrucciones de BIT
NEMNICO

DESCRIPCIN

FLAGS AFECTADOS

bcf

f,b

Pone a 0 el bit b del registro f

Ninguno

bsf

f,b

Pone a 1 el bit b del registro f

Ninguno

Instrucciones ARITMTICAS
NEMNICO

addlw

DESCRIPCIN

FLAGS AFECTADOS

(W) + k (W)

C DC - Z

addwf

f,d

(W) + (f) (destino)

C DC - Z

decf

f,d

(f) - 1 (destino)

incf

f,d

(f) + 1 (destino)

sublw

K - (W) (W)

C DC - Z

subwf

f,d

(f) - (W) (destino)

C DC - Z

ATE-Universidad de Oviedo

18

Programacin en Ensamblador

Instrucciones LGICAS
NEMNICO

DESCRIPCIN

FLAGS AFECTADOS

andlw

(W) AND k (W)

andwf

f,d

(W) AND (f) (destino)

comf

f,d

(/f) (destino)

iorlw

(W) OR k (W)

iorwf

f,d

(W) OR (f) (destino)

rlf

f,d

Rota (f) a izquierda (destino)

rrf

f,d

Rota (f) a derecha (destino)

swap

f,d

Intercambia nibbles (f) (destino)

xorlw

(W) XOR k (W)

xorwf

f,d

(W) XOR (f) (destino)

Ninguno

19

ATE-Universidad de Oviedo

Programacin en Ensamblador

Instrucciones de SALTO
NEMNICO

DESCRIPCIN

FLAGS AFECTADOS

btfsc

f,b

Salta si el bit b de f es 0

Ninguno

btfss

f,b

Salta si el bit b de f es 1

Ninguno

decfsz f,d

(f) - 1 (destino) y salta si es 0

Ninguno

incfsz

f,d

(f) + 1 (destino) y salta si es 0

Ninguno

goto

Salta a la direccin k

Ninguno

Instrucciones de manejo de SUBRUTINAS


NEMNICO

call

retfie
retlw
return

DESCRIPCIN

FLAGS AFECTADOS

Llamada a subrutina

Ninguno

Retorno de una interrupcin

Ninguno

Retorno con un literal en (W)

Ninguno

Retorno de una subrutina

Ninguno

ATE-Universidad de Oviedo

20

10

Programacin en Ensamblador

Instrucciones ESPECIALES
NEMNICO

DESCRIPCIN

clrwdt

Borra Timer del Watchdog

nop

No operacin

sleep

Entra en modo de bajo consumo

FLAGS AFECTADOS

/TO - /PD
Ninguno
/TO - /PD

21

ATE-Universidad de Oviedo

Programacin en Ensamblador

Fichero con el
juego de
instrucciones completo.

Campo

Descripcin

Posicin de memoria de datos (Register file address)


(0x00 to 0x7F)

Registro de trabajo(acumulador)

n Bit dentro de una posicin de memoria (0-7)

Valor literal, constante o etiqueta (puede de 8 o 11 bits)

No importa el valor (0 1)

Seleccin de destino:

El ensamblador genera cdigo con x=0.

d = 0: almacena el resultado en W,

Juego_instr.pdf

d = 1: almacena el resultado en una posicin de la


memoria de datos f.
dest

Destino es el registro W o la posicicin de memoria de


datos especificada

label

nombre de etiqueta

TOS

Cima de la pila

PC

Contador de programa

PCLATH

Latch de la parte alta del contador de programa

GIE

Bit de abilitacin de interrupcin global

WDT

Temporizador Watchdog

TO

Time-out bit

PD

Power-down bit

[]

Optional

()

Contenido

Asignado a

Las claves del juego


de instrucciones

<>

Register bit field

En el conjunto de

italics

termino definido por el usuario ( courier)

ATE-Universidad de Oviedo

22

11

Programacin en Ensamblador

Aprendiendo a Programar
Pasos a dar para poder generar cdigo fuente:
1.- Juego de Instrucciones
2.- Directivas y Macros
3.- Organizacin de la Memoria interna:
Programa
Datos

ATE-Universidad de Oviedo

23

Programacin en Ensamblador

Directivas de MPASM
Controlan el proceso de ensamblado del programa, pero no son parte del
mismo (tambin se conocen como pseudoinstrucciones).
Hay ms de 50 directivas reconocidas por MPASM.
Las ms usadas :
END
Es la nica directiva obligatoria. Indica al ensamblador dnde debe
detener el proceso. Debe colocarse en la ltima lnea del programa.
<etiqueta> EQU <expresin>
El valor <expresin> es asignado a <etiqueta>. Estas directivas se
suelen colocar al principio del programa y habitualmente se usan
para definir constantes y direcciones de memoria.
[<etiqueta>] ORG <expresin>
Las instrucciones del cdigo fuente que siguen a esta directiva se
ensamblan a partir de la posicin indicada por <expresin>.
ATE-Universidad de Oviedo

24

12

Programacin en Ensamblador

__CONFIG <expresin> [& <expresin> & ... & <expresin>]


Permite indicar la configuracin elegida para la grabacin del PIC.
Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC
LIST P=16F877
Indica el tipo de microcontrolador utilizado.
INCLUDE <p16F877.inc> o INCLUDE p16F877.inc
Incluye en el programa un fichero donde se definen las etiquetas
con las que se nombra a los diferentes registros y sus bits. Este
fichero se encuentra en el directorio principal del programa
ensamblador. Puede usarse esta directiva para incluir cualquier
otro fichero (Ojo! El fichero de inclusin no puede terminar con
una directiva END).
DT <expr1> [, <expr2>, ... , <exprN>]
Genera una instruccin retlw por cada expresin que incluya la
directiva. Si la expresin es del tipo cadena, se generar una
instruccin retlw por cada carcter de la misma.
ATE-Universidad de Oviedo

25

Programacin en Ensamblador

TODAS LAS DIRECTIVAS

Fichero adicionales:
Directivas MPASM.pdf

Gua de uso del MPASM, MPLINK y MPLIB

ATE-Universidad de Oviedo

26

13

Programacin en Ensamblador

Aprendiendo a Programar
Pasos a dar para poder generar cdigo fuente:
1.- Juego de Instrucciones
2.- Directivas y Macros
3.- Organizacin de la Memoria interna:
Programa
Datos

ATE-Universidad de Oviedo

27

14

También podría gustarte