Está en la página 1de 5

Introducción a la Programación 8086: 2016

Licenciatura en Análisis de Sistemas Informáticos -Unae


Introducción a la Programación 8086: 2016
Licenciatura en Análisis de Sistemas Informáticos -Unae

Introducción a la Programación 8086:


Aprender cualquier lenguaje de programación imperativo implica el dominio de un número de
conceptos comunes:

Variables: declaración/definición
Asignación: asignar valores a las variables
Entrada/Salida: mostrar mensajes
mostrar el valor de las variablres
Flujo de control: if-then
bucles
Subprogramas: Definición y Uso

La programación en lenguaje ensamblador implica el dominio de los mismos conceptos y de


algunas otras ediciones.

Por el momento omitiremos los detalles de declaración de variables y utilizaremos simplemente


los registros 8086 como las variables en nuestros programas. Los registros tienen nombres predefinidos y
no necesitan ser declarados.
Hemos visto que los 8086 tienen 14 registros. Inicialmente, usaremos cuatro de ellos- los registros
llamados de uso general:
ax, bx, cx, dx
Estos cuatro registros de 16 bits pueden además ser tratados como registros de 8 bits.
ah, al, bh, bl, ch, cl, dh, dl

Asignación

En java, las asignaciones toman esta forma:

x = 42 ;
y = 24;
z = x + y;

En el lenguaje ensamblador realizamos la misma operación pero usamos una instrucción para
denotar el operador de asignación (“=” en Java).

mov x, 42
mov y, 24
add z, x
add z, y

La instrucción mov realiza la asignación en el lenguaje ensamblador 8086.


Esto permite que pongamos un número en un registro o en una posición de memoria (una variable) es decir
asigna un valor a un registro o a una variable.

Ejemplo: Almacenar el código Ascii de la letra A en le registro bx

El codigo de Ascii de la A es 65D (01000001B, 41H)

La siguiente instrucción mov realiza la tarea:


mov bx, 65d

También podríamos escribir como:


mov bx, 41h
o mov bx, 01000001b
o mov bx, ‘A’

Todas las sentencias anteriores son equivalentes. Cada una realiza exactamente la misma tarea, el
numero binario que representa el codigo Ascii de A es copiado dentro del registro bx.
Introducción a la Programación 8086: 2016
Licenciatura en Análisis de Sistemas Informáticos -Unae

El valor se copia en el lado derecho (byte de orden inferior) del registro. El lado izquierdo
contendrá todos los 0.
Así habríamos podido también escribirlo como:

mov bl, 65d


mov bl, ‘A’

Puesto que el registro bl representa el byte de orden inferior del registro bx.

Nota: El ensamblador 8086 convierte una constante de caracter es decir un caracter dentro de apóstrofes
(ej. ' A ') a su código ASCII automáticamente. Esto es una característica muy útil y significa que puedes
especificar muchos caracteres sin tener que revisar sus códigos ASCII. Incluyes simplemente el caracter en
apóstrofes. Tendrás que utilizar el código ASCII para los caracteres de control tales como los de retorno de
carry y avance de línea.

Notación:

mov es una de las muchas instrucciones 8086 que utilizaremos. La mayoría de los libros de
lenguaje ensamblador utilizan letras mayúsculas para referir a una instrucción, ej. MOV.
Sin embargo, Ensamblador también reconocerá la instrucción si se escribe en minúsculas o en caso de
mezclar minúsculas y mayúsculas ej. Mov (de hecho, Ensamblador convierte todas las instrucciones a
mayúsculas).

Es mi preferencia personal usar minúsculas cuando escribo programas. Tú puedes escribir tus
programas usando cualquier notación que encuentres conveniente, pero debes ser consistente y mantener un
estilo particular.

Más sobre mov


La instrucción mov también te permite copiar el contenido de un registro dentro de otro.
Ejemplo:

mov bx, 2
mov cx, bx

La primera instrucción carga el valor 2 dentro de bx donde es almacenado como un número


binario. (un número como el 2 es llamado una constante entera)
La instrucción mov toma dos operandos, que representan el destino donde los datos son
almacenados y el origen del datos.

Forma General de la Instrucción Mov

mov destino, origen

Donde el destino debe ser un registro o la posición de memoria y la fuente puede ser una
constante, otro registro o una posición de memoria.
En el lenguaje ensamblador 8086, el origen y el destino no pueden ambos ser posiciones de
memoria en la misma instrucción.

Nota: la coma es escencial. Es usada para separar los dos operandos.


La omisión de la coma es un error común de sintaxis.

Miraremos la manipulación de datos en memoria en la última etapa.


Introducción a la Programación 8086: 2016
Licenciatura en Análisis de Sistemas Informáticos -Unae

Más ejemplos:
Las instrucciones siguientes dan lugar registros ax, bx, y cx todos ellos tienen valor 4:

mov bx, 4 ; copia el número 4 dentro del registro bx


mov ax, bx ; copia el contenido de bx dentro del registro ax
mov cx, ax ; copia el contenido de ax dentro del registro cx

Comentarios
Cualquier cosa que sigue al punto y coma (;) no es tomado en cuenta por Ensamblador. Es
llamado comentario. Los comentarios se utilizan para hacer legibles a tus programas. Los utilizas para
explicar lo que estás haciendo en español.
Se recomienda que utilices comentarios con frecuencia en tus programas, no solamente de modo que otros
puedan entenderlos, también para ti mismo, cuando miras los programas que has escrito previamente.
Cada lenguaje de programación tiene una facilidad para definir comentarios.

Más instrucciones 8086:


add, inc, dec y sub

Los 8086 proporcionan una variedad de instrucciones aritméticas. Por el momento, consideramos
solamente a algunas de ellas. Para realizar operaciones aritméticas tales como adición o substracción,
utilizas la instrucción apropiada.

En el lenguaje ensamblador puedes realizar solamente una sola operación aritmética a la vez. Esto
significa que si deseas evaluar una expresión por ejemplo:

z=x+y+w–v

Tendrás que utilizar 3 instrucciones del lenguaje ensamblador -una para cada operación aritmética.

Estas instrucciones combinan asignación con la operación aritmética:

Ejemplo:
mov ax, 5 ; carga 5 dentro de ax
add ax, 3 ; suma 3 al contenido de ax
; ax ahora contiene 8
inc ax ; suma 1 a ax
; ax ahora contiene 9
dec ax ; resta 1 de ax
; ax ahora contiene 8
sub ax, 6 ; resta 4 de ax
; ax ahora contiene 2

La instrucción de la adición agrega el operando del origen al operando del destino, dejando el
resultado en el operando del destino. El operando del destino es siempre el primer operando en el lenguaje
Ensamblador 8086 (en el lenguaje ensamblador M68000, el operando del origen es siempre el primer
operando ej. move # 10, x)

La instrucción inc toma un operando y le suma 1. Es proporcionado debido a la frecuencia de


agregar 1 a un operando dentro de la programación.
La instrucción dec como el inc toma un operando y le resta 1. Es también una operación frecuente
en la programación.
La instrucción sub resta el operando origen del operando destino y deja el resultado en el
operando destino.
Algunos microprocesadores no proporcionan las instrucciones para la multiplicación o la división
(ej. el M6800). Con tales microprocesadores, la multiplicación y la división tienen que ser programadas
usando adiciones repetidas y substracciones y las operaciones inversas (que serán discutidas después).

Los 8086 proporciona el mul y el div (y otros) para la multiplicación y la división.

Ambigüedad:
Suponga que deseas cargar el valor hexadecimal A (decimal 10) escrito como ah en el registro bl.
Puede ser que seas tentado a escribir:

mov bl, ah ; Supuestamente carácter 'a' en hexadecimal?


Introducción a la Programación 8086: 2016
Licenciatura en Análisis de Sistemas Informáticos -Unae

Pero hemos visto ya que hay un registro llamado ah (el byte de alto orden de ax) y así que la
sentencia anterior no hace lo que pensamos. En su lugar copia el contenido del registro ah en bl. Para
evitar ambigüedad al escribir los números hexadecimales que comienzan con una letra coloquemos como
prefijo el 0.

Así escribimos:

mov bl, 0ah ; copia el numero hexadecimal ah dentro de bx.

Es una práctica común escribir números decimales con la letra D añadida para distinguirlos de
hexadecimal.
Los ensambladores 8086 toman todos los números como decimales a menos que haya un B
(binario), H (hexadecimal) u O (octal) añadido a ellos.

Nota:
Cuando los datos se mueven a un registro, a los 16 bits(u 8 bits) se le dan un valor. Ensamblador
completará automáticamente con 0’s en el lado izquierdo.

mov bx, 41h ; copia 42 hex dentro de bx

41H es 100 0001 en binario. Esto rellena hacia fuera con nueve 0-bits en el lado izquierdo para llenar todo
los 16-bits del registro.

Ejercicios:

1- Escribe instrucciones para:

Cargar carácter '?' dentro del registro bx


Cargar el carácter espacio dentro del registro cx
Cargar 26 (decimal) dentro del registro cx
Copiar el contenido de ax a bx y dx

2- Qué errores se presentan en los siguientes:


mov ax 3d
mov 23, ax
mov cx, ch
move ax, 1h
add 2, cx
add 3, 6
inc ax, 2

3- Escribe instrucciones para evaluar la expresión aritmética 5 + (6-2) dejando el resultado en ax


usando (a) 1 registro, (b) 2 registros, (c) 3 registros
4- Escribe expresiones para evaluar las expresiones

a = b + c –d
z = x + y + w – v +u

5- Reescribe la expresión en 4) pero usando los registros ah, el al, bh, bl , etc para representar las
variables: a, b, c, z, x, y, w, u, v.

También podría gustarte