Clase 10:
1. Definición
2. Historia
3.
Componentes
4. Software Utilizado
5. Registros
6. Instrucciones
7. Ejemplos
1. definición
El término ensamblador (del
inglés assembler) se refiere a un
tipo de programa informático que se encarga de traducir un fichero fuente
escrito
en un lenguaje ensamblador, a un fichero objeto que contiene
código máquina, ejecutable
directamente por la máquina para la que se ha generado.
El propósito para el que se
crearon este tipo de aplicaciones es la de facilitar la escritura de programas,
ya que escribir directamente en
código binario, que es el
único código entendible por la computadora, es en la práctica imposible.
La evolución de los
lenguajes de programación a partir del lenguaje ensamblador originó también la
evolución de este programa ensamblador hacia lo que se conoce como programa
compilador.
2 .
historia
El primer compilador fue
escrito por Grace Hopper, en 1952 para el lenguaje de programación A-0.
En 1950 John Backus dirigió
una investigación en IBM sobre un lenguaje algebraico.
En 1954 se empezó a
desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera
traducible por un ordenador; le llamaron FORTRAN (FORmulae TRANslator).
Fue el primer lenguaje de
alto nivel y se introdujo en 1957 para el uso de la computadora IBM modelo 704.
El primer compilador
de FORTRAN tardó 18 añospersona en realizarse y era muy sencillo.
El primer compilador
autocontenido, es decir, capaz de compilar su propio código fuente fue el
creado para Lisp por Hart y Levin en el MIT
en 1962. Desde 1970 se ha
convertido en una práctica común escribir el compilador en el mismo lenguaje
que este compila, aunque Pascal y C han sido alternativas muy usadas.
Crear un compilador
autocontenido genera un problema llamado bootstrapping, es decir el primer
compilador creado para un lenguaje tiene que o bien ser compilado por un
compilador escrito en otro lenguaje o bien compilado al ejecutar el compilador
en un intérprete.
3 .
componentes
Los elementos básicos del
lenguaje ensamblador son:
q Etiquetas
q Instrucciones
q Operandos
q Directivas
q Comentarios
etiquetas
Una
etiqueta es una palabra utilizada para designar alguna línea o secci ón del
programa, se pueden utilizar para saltar de una parte hacia esa etiqueta.
Es
importante que las etiquetas empiecen con una letra o con un guión bajo
"_". La longitud de una etiqueta puede ser de hasta 32 caracteres y
como ya se dijo se deben escribir en la primer columna.
instrucciones
Las instrucciones son las
operaciones que realiza el microcontrolador, así que esta s ya están definidas
para cada familia de PIC.
Microcontrolador
PIC
Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip
Technology Inc. y derivados del PIC1650, originalmente desarrollado por la
división de microelectrónica de General Instrument.
El nombre actual no es un acrónimo. En realidad, el nombre
completo es PICmicro, aunque generalmente se utiliza como Peripheral Interface Controller (controlador de interfaz
periférico)*.
Microcontrolador
PIC
operandos
Son los elementos que
emplea la instru cción que se está ejecutando. Usualmen te los operandos son
los registros, las variables o las constantes.
directivas
Las directivas son
similares a las instrucciones, pero a diferencia de
estas las directivas
son
propias del lenguaje ensamblador e independientes del microcontr
olador que se utilice.
Las directivas
representan algunas características del lenguaje ensambl
ador, se utilizan
para
especificar el procesador empleado así como la configuración de e
ste, también para asignar
locaciones de memoria.
comentarios
Los comentarios son las
palabras, frases y oracione s que se pueden escribir en el código para hacer el
programa más claro y legible, o solo para recordar.
Los comentarios se pueden
escribir en cualquier parte del código pero siempre deben empezar con punto y
coma ";".
4 .
Software editores
Un programador
escribe el programa origen en lenguaje ensamblador utilizando cualquier editor
de textos o procesador de palabras que sea capaz de producir una salida de
texto en
ASCII. Una vez que el código origen ha sido escrito, el archivo origen
es ensamblado
mediante su procesamiento a través de algún ensamblador.
Para la programación se utiliza una cierta tabulación que se
debe respetar, además utilizar
una tabulación adecuada hace los programas más claros y le
gibles.
Las etiquetas
se escriben en la primer columna de cualquier línea, las inst
rucciones y directivas en la segunda y
por último, en la tercer columna, los operandos. Los comentarios se pueden
escribir en cualquier parte del programa.
ENS2001
MASM
TAST
Ejemplo: Hola alumno
4. Software MASM Y TLINK
El Turbo Assembler (TASM) un
paquete ensamblador principalmente destinado a la plataforma del IBM PC y sus
compatibles.
El enlazador o linkador
LINK permite convertir el código objeto generado por TASM en archivo ejecutable
de tipo EXE*.
*empleando el ML de MASM 6.X se obtiene directamente el
fichero EXE ya que invoca automáticamente al linkador.
5 . registros
Se trata de una serie de "variables", que contienen
información que puede ser cambiada.
REGISTROS IP Y CS
El registro CS es
una variable de un tamaño de dos bytes. Contiene el Segmento actual en que se
encuentra el programa.
El registro IP es
la variable, de dos bytes también, que contiene el Offset actual. Esto
significa, el ordenador va interpretando las secuencias de bytes, pero necesita
"algo" que le indique donde tiene que leer.
COMBINACION DE REGISTROS
IP Y CS
La combinación CS:IP contiene la dirección en la que el
ordenador está interpretando información en el
momento. Indica la dirección de la próxima instrucción que se va a ejecutar.
El registro DS y el registro ES también
sirven para guardar direcciones de Segmentos, y también son variables de dos
bytes, pueden ser utilizados para por ejemplo mover datos en memoria, imprimir
cadenas, etc. Son "punteros", que apuntan a cierta zona de memoria.
El registro SS apunta a la pila, y el SP es el que contiene el offset de la
pila.
REGISTROS AX,BX,CX,DX
Todos ocupan dos bytes, y se pueden
utilizar divididos en dos partes con un byte de longitud.
◦ AX se divide en AH y AL
◦ BX en BH y BL ◦ CX en CH y CL
◦ DX en DH y DL.
AX
|-----------------------------|
11010110 10111000
AH AL
La 'H' se refiere a High en inglés, alto (de mayor valor), y
la 'L' a Low (de menor valor).
REGISTROS
AX y BX
AX se suele
utilizar como propósito general, indica función a las interrupciones, etc., y
es el más flexible, ya que ser el único que permita multiplicaciones y
divisiones. Se denomina a veces acumulador. Realiza operaciones como
entrada/salida de datos, ultiplicación, división, operaciones con decimales
codificados en binario, etc.
BX nos servirá
mucho como "handler", para abrir/cerrar archivos, etc, y como
registro de propósito general al igual que AX, CX y DX. Funciona como registro
Base, en algunas ocasiones, para referenciar direcciones de memoria En estos
casos mantiene la dirección de base, comienzo de tabla o matrices, en la que la
dirección se determina usando valores de desplaza- miento.
REGISTROS cX y dX
CX se suele
usar como contador. Es decir, cuenta el número de bits o palabras en una
determinada cadena de datos durante los operaciones con cadenas.
◦ Ej: Si se va a mover de
un área de memoria a otra n palabras, CX mantiene inicialmente el número total
de palabras a desplazar llevando la cuenta de la palabra o byte que va siendo
trasladada.
DX suele ser el
puntero, señalando haciendo el papel de Offset lugares en memoria. Se usa en la
multiplicación para mantener parte del producto de 32 bits o en las divisiones
para antener el valor del resto. Y en operaciones de Entrada/Salida de datos
para especificar la dirección del puerto de E/S usado.
6 . instrucciones
Se pueden clasificar en
los siguientes grupos:
De
Transferencia.
Aritméticos.
q Lógicos.
q De
salto.
INSTRUCCIONES DE TRANSFERENCIA
Este grupo de instrucciones se utiliza para efectuar la
transferencia de datos, copian datos de un origen a un destino sin modificar
dicho origen. Pueden transferir palabras, fracciones de palabras, o bloques
completos.
TRANSFERENCIA push
PUSH: Guarda en la cima
de la pila 16 bits, decrementando el puntero de la pila en dos bytes, hay que
tener en cuenta que no se puede guardar en la pila el contenido del registro CS
o el contenido del registro IP ya que estos deben ser modificados por las
instrucciones de salto.
SINTAXIS:
PUSH: reg16
PUSH: mem16
Ejemplo: PUSH: CX
PUSH: TABLA ( SI )
TRANSFERENCIA pop
POP: Extrae de la cima
de la pila el valor de 16 bits almacenado, depositándolo en la dirección de
memoria indicada y a diferencia del PUSH incrementa el puntero de la pila en
dos bytes, igualmente se debe tener en cuenta que no se debe rescatar valores
para los registros CS e IP ya que estos deben ser modificados por las
instrucciones de salto.
SINTAXIS:
PUSH: reg16
PUSH: mem16
Ejemplo: POP: DX
POP:
[BX]
TRANSFERENCIA xchg
XCHG: (Intercambio):
Consta de dos operandos e intercambia sus valores por lo que modifica los
operandos a no ser que tengan idéntico valor, cabe recalcar que no se permite
que los operandos estén los dos en la misma memoria.
SINTAXIS: XCHG destino, origen Indicadores:
Ejemplo: XCHGN: bl, ch
XCHGN:
mem pal, bx
INSTRUCCIONES
aritméticas
Son efectuada por la
Unidad Aritmeto – logica
(ALU) y suelen cambian los flags o indicadores de
condición.
INSTRUCCIONES aritméticas inc
INC: Incrementa. Suma 1
al contenido de un registro o de una posición de memoria, dicho contenido puede
ser byte o palabra.
SINTAXIS: INC destino
Indicadores: OF DF IF
TF SF ZF
AF PF CF
Ejemplo: INC AX ;
AX = AX+1
INC DL ; DL = DL +1
INC WORD
PTR ES: [DI+4]; Increm. Palabra contenida
; es ES:
DI+4
INSTRUCCIONES
aritméticas dec
DEC: Decrementa. resta 1
al contenido de un registro o de una posición de memoria, dicho contenido puede
ser byte o palabra.
SINTAXIS: DEC destino
Indicadores: OF DF IF
TF SF ZF
AF PF CF
Ejemplo: DEC AX ; AX = AX+1
DEC DL ; DL =
DL-1
DEC WORD PTR ES: [DI+4] ; Decrem. Byte contenido ;en ES: DI+4
INSTRUCCIONES
aritméticas sub
SUB: Resta el operando
destino al operando origen, colocando dicho resultado en el operando destino,
los operandos pueden tener signo siempre y cuando sean del mismo tipo byte o
palabra.
SINTAXIS:
SUB op_destino,
op_fuente ; sintaxis básica.
Ejemplo: SUB al,
bl
SUB dx,dx
INSTRUCCIONES LOGICAS
En este grupo se
incluyen las instrucciones de conjunción, disyunción, exclusiva y negación, la
aplicación practica no es de siempre sin embargo suelen estar presentes en la
mayoría de los programas.
INSTRUCCIONES LOGICAS
and
AND: Realiza una
operación de “Y” lógico entre el operando origen y el operando destino quedando
el resultado en el operando destino.
SINTAXIS:
AND destino, origen
Ejemplo: AND AX,BX ;
AX = AX AND BX
AND SI,ES:[DI] ;
SI=SI AND ES:[ DI ] AND BX,0A34H ;
BX=BX AND 0A34H
AND
ES:[BX], CX ; ES: [BX] = ES: [BX] AND
CX
AND BYTE
PTR [SI+4],5 ; [SI+4] = [SI+4] AND 5
INSTRUCCIONES LOGICAS
or
OR: Realiza una operación de “O” lógico a nivel de bits entre
los dos operandos , almacenándose después dicho resultado en el operando destino.
SINTAXIS:
OR destino, origen
Ejemplo: OR AL,BL ; AL = AL OR BL OR DI:[BX] ; DI=DI OR [ BX ]
OR CL,34 ; CL=CL OR 34
OR [DI],
BX ; [DI] = [DI] OR BX
OR BYTE
PTR [DI],8 ; [DI] = [DI] OR 8
INSTRUCCIONES LOGICAS
xor
XOR: Realiza una operación de “O” exclusivo lógico a nivel de
bits entre los dos operandos , almacenándose después dicho resultado en el
operando destino.
SINTAXIS:
XOR destino, origen
Ejemplo:
|
XOR CX,BX
|
; CX = CX XOR BX
|
XOR DI,ES:[SI]
|
; DI= DI XOR ES:[ SI ]
|
|
XOR AX,4500H
|
; AX=AX XOR 4500H
|
|
XOR [BX], AX
|
; [BX] = [BX] XOR AX
|
XOR BYTE
PTR [SI+BX],50 ; [SI+BX] = [SI+BX] XOR 50
INSTRUCCIONES de salto
Sirven
para que el procesador, en lugar de ejecutar la siguiente instrucción , pase a
ejecutar otra en lugar que se denomina
“destino de salto”.
INSTRUCCIONES de salto
jmp
JMP: Realiza un salto de
ejecución incondicional hacia la dirección o etiqueta especifica.
SINTAXIS:
JMP dirección o JMP SHORT dirección
Ejemplos: JMP 100H ; Salta a CX:100h
JMP
55AAH:100H ; Salto lejano a otro
segmento
JMP WORD PTR [BX] ; Salto a la dirección contenida en
; la
dirección de memoria especificada
; por BX
(salto indirecto)
JMP REPITE ;
Salto a la etiqueta REPITE
INSTRUCCIONES de salto
call
CALL: El efecto de esta
instrucción es similiar a la de salto incondicional con la diferencia de que el
procesador guarda ciertos datos en lugares para facilitar el retorno una vez
terminada la ejecución de la subrutina.
SINTAXIS:
CALL destino
LAB1 50%>.: Tarea 1 - GUIA
DE EJERCICIOS 02-Junio
Investigar que
otras instrucciones hay disponibles para ensamblador y desarrolle 6 ejemplos
donde se utilicen estas.
Tarea:
1.
Traer los archivos de código
fuente escritos en su cuaderno
2.
Presentar los archivos en
digital listo para ser compilador en una memoria usb
3.
El docente seleccionara uno
para que lo explique a sus compañeros
4.
Individual
EJEMPLOS DE COMPILACION DE CODIGO ENSAMBLADOR USANDO TASM
Y TLINK
Con
los archivos de código fuente y los ejecutables al iniciar el proceso de
compilación, vamos al directorio y ejecutamos el comando que corresponda.
EJEMPLOS DE COMPILACION DE CODIGO ENSAMBLADOR USANDO TASM
Y TLINK
Antes
de iniciar la realización de cualquier programa en Lenguaje Ensamblador debemo
conocer algunos conceptos básicos. En este caso es primordial el software que
utilizaremos para todo el proceso de realización de dichos programas.
TASM
El Turbo Assembler (TASM), un
paquete ensamblador principalmente destinado a la
herramientas de programación en lenguaje ensamblador para la familia de los
Turbo
Assembler también se refiere a un ensamblador común, basado en el
microprocesador 6502 para
el Commodore 64, creado por
la compañía alemana Omikron
en 1985.
TLINK
El
enlazador o linkador permite combinar varios módulos objeto, realizando las
conexiones entre ellos y, finalmente, los convierte en módulo ejecutable de
tipo EXE
(empleando el ML de MASM 6.X se obtiene directamente el fichero EXE ya
que invoca
automáticamente al linkador). El linkador permite el uso de
librerías de funciones y
rutinas. TLINK,
a diferencia de LINK, permite generar un fichero de tipo COM
directamente
de un OBJ si se indica el parámetro /t,
lo que agiliza aún más el proceso.
Puede obtenerse ayuda ejecutándolo sin
parámetros. Los parámetros de TLINK son
sensibles a mayúsculas y minúsculas,
por lo que /T no es lo mismo que /t.
generado en los primeros pasos del proceso de compilación, la
información de todos los
recursos necesarios (biblioteca),
quita aquellos recursos que no necesita, y enlaza el código
objeto con
su(s)biblioteca con lo que finalmente produce un fichero ejecutable
o una
biblioteca..
En el caso de los programas enlazados dinámicamente, el enlace entre el
programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecución
del
programa.
EDITOR DE TEXTO PARA EL CODIGO FUENTE
Un
editor de texto es un programa que
permite crear y modificar archivos digitales
compuestos únicamente por texto
sin formato, conocidos comúnmente como archivos de
texto ó texto plano. Se utiliza
para escribir el código fuente de los programas considerando
que al guardarse
no conserve la extencion txt, ya que debe cambiarse por la extensión
asm. En el
caso de Windows se usa el Block de Notas de Microsoft, en linus podemos usar
gedit o nano.
PROCESO DE COMPILACION CON TASM Y TLINK
Para
iniciar la compilación de los programas de ejemplo, debemos copiar los dos
archivos
ejecutables TASM.EXE y TLINK.EXE, dentro del directorio donde
estarán los archivos
de código fuente, en este caso podemos crear un directorio
en la unidad C llamado
CLASS18.
CODIGOS DE EJEMPLO, COMPILADO Y LINKADO
Creamos el primer
ejemplo llamado saludo.asm
Entramos
al símbolo del sistema (MS-DOS) nos direccionamos en donde se encuentra nuestra
carpeta
Una vez
situados en la dirección correcta, nos dirigimos a compilar nuestro programa.
Para la
compilación se debe ejecutar la siguiente instrucción:
tasm /zi saludo.asm
Una vez
compilado nos aparecerá un reporte, el cual nos muestra si hay errores en
nuestras líneas de código.
Con
esto se ah realizado la compilación de nuestro programa y está listo para ser
ligado. Para linkar el programa.
Esto lo haremos con la siguiente instrucción.
tlink /v saludo
El último paso es la ejecución
del programa. Solo escribimos el nombre del programa, sin extensiones.
Saludo
Al
ejecutarlo podemos comprobar que no se realiza acción alguna y que genera
ciertos mensajes de advertencia, es porque el programa solo tiene la estructura
básica y no estamos indicando que realice una acción determinada.
Los caracteres especiales /v y
/z tiene la siguiente finalidad.
/v
Desplegar el número de líneas fuente y símbolos procesados.
/z
Si ocurre un error que nos diga en que línea ocurrió
Corregir
los errores en los siguientes programas para poder compilarlos:











