Microcontroladores II - PIC16F877A - Assembler PDF
Microcontroladores II - PIC16F877A - Assembler PDF
Microcontroladores II - PIC16F877A - Assembler PDF
PIC16F877A
Microchip Technology Inc.
Los productos que fabricaba eran los microcontroladores PIC y de las memorias EEPROM y EPROM. Hoy es uno de los
líderes del mercado de microcontroladores. Algunos de sus productos son:
➢ Productos analógicos.
➢ Memorias.
➢ Productos de radio-frecuencia.
El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido
ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo
nivel.
El lenguaje ensamblador es difícilmente portable, es decir, al cambiar a una máquina
con arquitectura diferente, generalmente es necesario reescribirlo completamente.
Los programas hechos por un programador experto en lenguaje ensamblador son
generalmente mucho más rápidos y consumen menos recursos del sistema (memoria
RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al
programar cuidadosamente en lenguaje ensamblador se pueden crear programas que
se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas
por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o
muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en
el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no
están disponibles en los lenguajes de alto nivel.
Código Máquina
El código máquina, o lenguaje de máquina, está formado por instrucciones sencillas, que -dependiendo de la estructura del procesador-
pueden especificar:
Registros específicos para operaciones aritméticas, direccionamiento o control de funciones.
Posiciones de memoria específicas (offset).
Modos de direccionamiento usados para interpretar operandos.
Las operaciones más complejas se realizan combinando estas instrucciones sencillas, que pueden ser ejecutadas secuencialmente o
mediante instrucciones de control de flujo. Casi todas las instrucciones utilizan 2 operandos específicos para realizar su función. Las
operaciones disponibles en la mayoría de los conjuntos de instrucciones incluyen:
Mover: Llenar un registro con un valor constante (Ej.: mov al, `20`). o mover datos de una posición de memoria a un registro o
viceversa (Ej.: mov al, [si]) o escribir y leer datos de dispositivos (Ej.: lea dx, offset cadena)
Computar: Sumar, restar, multiplicar o dividir los valores de dos registros, colocando el resultado en uno de ellos o en otro registro (Ej.:
sum, mul, div, entres otras instrucciones). o realizar operaciones binarias, incluyendo operaciones lógicas (AND/OR/XOR/NOT) o
comparar valores entre registros (mayor, menor, igual) (Ej.: cmp)
Afectar el flujo del programa: Saltar a otra posición en el programa y ejecutar instrucciones allí(Ej.: jmp) o saltar si se cumplen ciertas
condiciones (IF) (Ej.: jnb, jnz, jb, jz, jne, je, entre otros) o saltar a otra posición, pero guardar el punto de salida para retornar (Ej.: CALL,
llamada a subrutinas) Algunas computadoras incluyen instrucciones complejas dentro de sus capacidades. Una sola instrucción
compleja hace lo mismo que en otras computadoras puede requerir una larga serie de instrucciones, por ejemplo: salvar varios
registros en la Pila de una sola vez, mover grandes bloques de memoria
Lenguaje
Un programa escrito en lenguaje ensamblador consiste en una serie de Instrucciones que corresponden al flujo de órdenes ejecutables que
pueden ser cargadas en la Memoria de un sistema basado en Microprocesador:
Binario: 10110000 01100001 (Hexadecimal: 0xb061)
La representación equivalente en lenguaje ensamblador es más fácil de recordar:
MOV al, 061h
Esta instrucción significa:
Asigna el valor Hexadecimal 61 (97 Decimal) al registro "al".
El mnemónico "mov" es un código de operación u "opcode", elegido por los diseñadores de la colección de instrucciones para abreviar
"move" (mover, pero en el sentido de copiar valores de un sitio a otro). El opcode es seguido por una lista de argumentos o parámetros,
completando una instrucción de ensamblador típica. A diferencia de los lenguajes de alto nivel, aquí hay usualmente una correspondencia
1 a 1 entre las instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede
proveer "pseudo instrucciones" que se expanden en un código de máquina más extenso a fin de proveer la funcionalidad necesaria. Por
ejemplo, para un código máquina condicional como "si X mayor o igual que", un ensamblador puede utilizar una pseudo instrucción al
grupo "haga si menor que", y "si = 0" sobre el resultado de la condición anterior
Los microprocesadores difieren en el tipo y número de operaciones que soportan; también pueden tener diferente cantidad de registros, y
distinta representación de los tipos de datos en memoria. Aunque la mayoría de los microprocesadores son capaces de cumplir
esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes ensamblador reflejan tal diferencia.
Pueden existir múltiples conjuntos de mnemónicos o Sintaxis de lenguaje ensamblador para un mismo conjunto de instrucciones,
instanciados típicamente en diferentes programas en ensamblador. En estos casos, la alternativa más popular es la provista por los fabricantes, y
usada en los manuales del programa.
IDE