Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Taller Ensamblador Capitulo I
Taller Ensamblador Capitulo I
Explorando el programa
¿Un registro…?
Escuela Profesional de Ingeniería de Sistemas Taller de Programación en Ensamblador
Un registro es un espacio del procesador (se puede asumir que es una variable propia del procesador) que ocupa 16 bits,
que se utiliza para realizar operaciones y/o almacenar datos o estados del procesador. Los procesadores de la familia del
8086 tienen básicamente los siguientes registros:
int <numero>
Ejecuta la interrupción indicada por número. En el programa ejecuta la interrupción 21h, que corresponde a las
interrupciones del DOS. Las interrupciones son servicios prestados por el sistema operativo y la BIOS, las cuales
realizan una tarea específica. Para poder ejecutar una determinada interrupción es necesario especificar una serie de
parámetros, generalmente en los registros, con los cuales trabajará la interrupción. Por ejemplo para poder imprimir una
cadena de caracteres en la pantalla es necesario poner el valor 09h en el registro ah, y la dirección de la cadena a
imprimir (terminada en el carácter especial ‘$’) en el registro dx.
Escuela Profesional de Ingeniería de Sistemas Taller de Programación en Ensamblador
Para terminar el programa se utilizó también la interrupción 21h, colocando el valor 04Ch en el registro ah y un código
de retorno (0) en el registro al. Posteriormente se profundizará en el uso de las interrupciones.
El registro de banderas
Para poder entender el funcionamiento de algunas instrucciones como cmp, sub, o add es necesario saber que son las
banderas. El registro de banderas es un registro de 16 bits, de los cuales solo se utilizan 9. Cada bit es una bandera. Este
registro se actualiza con cada instrucción y especifica el estado del procesador después de una operación. Así si una
resta produce cero, la bandera correspondiente se activará.
El registro de banderas esta organizado de la siguiente manera:
- - - - O D I T S Z - A - P - C
El significado de cada bandera se describe a continuación:
Escuela Profesional de Ingeniería de Sistemas Taller de Programación en Ensamblador
OF: Bit de overflow o desbordamiento, que se activa cuando se produce una operación que se sale del rango de sus
operadores.
DF: Bit de dirección. Indica la dirección creciente (0) o decreciente (1), en las operaciones con cadenas.
IF: Bit de interrupción. Indica si una interrupción externa puede o no ser ejecutada.
TF: Bit de trap o desvio. Procesa o ignora la interrupción interna trace (procesamiento paso a paso).
SF: Bit de signo, que indica el valor mas significativo de un registro después de una operación.
ZF: Bit cero, que se pone a cero si una operación da como resultado cero.
AF: Bit de carry. Se pone a 1 si una operación aritmética produce un acarreo del bit 3 al 4. Se usa para aritmética
especializada (ajuste BSD).
PF: Bit de paridad. Se activa si el resultado de una operación tiene paridad par.
CF: Bit de acarreo. Contiene el acarreo de una operación aritmética o de desplazamiento de bits.
Elementos desconocidos:
La mayoría de las instrucciones del programa anterior ya fueron vistas. Ahora detallaremos las instrucciones nuevas:
cmp y j<tipo> (jmp, je, ja).
CMP <operando1>,<operando2>
Es una instrucción que realiza una comparación entre el primer operando y el segundo operando y modifica el registro
de las banderas. Al menos uno de los operandos tiene que ser un registro (de 8 o 16 bits). Esta instrucción modifica el
valor de las siguientes banderas: AF, CF, OF, PF, SF, ZF.
Saltos
En cualquier parte de un programa se puede realizar un salto a cualquier otra parte del programa, de acuerdo a
determinadas situaciones o no. Si se quiere ejecutar una porción de código cuando se produce una determinada
situación (por ejemplo si una operación da como resultado cero), se puede utilizar la siguiente instrucciones:
<salto> <etiqueta>
Donde: <salto> es una de las siguientes instrucciones
SALTO DESCRIPCIÓN
JA/JNBE Salto si mayor (above), si no menor o igual (not below or equal), si CF=0 y ZF=0.
JAE/JNB Salto si mayor o igual (above or equal), si no menor (not below), si CF=0.
JB/JNAE/JC Salto si menor (below), si no superior ni igual (not above or equal), si acarreo, si CF=1.
JBE/JNA Salto si menor o igual (not below or equal), si no mayor (not above), si CF=1 ó ZF=1.
JCXZ Salto si CX=0.
JE/JZ Salto si igual (equal), si cero (zero), si ZF=1.
JG/JNLE Salto si mayor (greater), si no menor ni igual (not less or equal), si ZF=0 y SF=0.
JGE/JNL Salto si mayor o igual (greater or equal), si no menor (not less), si SF=0.
JL/JNGE Salto si menor (less), si no mayor ni igual (not greater or equal), si SF<>OF.
JLE/JNG Salto si menor o igual (less or equal), si no mayor (not greater), si ZF=0 y SF<>OF.
JNC Salto si no acarreo, si CF=0.
JNE/JNZ Salto si no igual, si no cero, si ZF=0.
JNO Salto si no desbordamiento, si OF=0.
JNP/JPO Salto si no paridad, si paridad impar, si PF=0.
JNS Salto si no signo, si positivo, si SF=0.
JO Salto si desbordamiento, si OF=1.
JP/JPE Salto si paridad, si paridad par, si PF=1.
JS Salto si signo, si SF=1.
<Etiqueta> es un identificador de una instrucción del programa.
Como se podrá apreciar, estas instrucciones hacen uso del registro de banderas para realizar su trabajo.
Si se quiere realizar un salto de todas formas, se debe utilizar la instrucción jmp <etiqueta>.
Ejercicios
- Escribir un programa que imprima “hola sistemas” en forma vertical
- Escribir un programa que guarde una edad (un número) e imprima en la pantalla “La edad es de una persona mayor
de edad” si la edad es mayor de 18 o imprima “La edad es de una persona menor de edad” si la edad es menor o
igual a 18
- Escribir un programa que guarde tres números e imprima cadenas que indiquen cual es el mayor, el medio y el
menor