Está en la página 1de 10

TEMAS 1.1.

6 A -
1.1.8 A
FORMATO GENERAL DE UN PROGRAMA EN
LENGUAJE ENSAMBLADOR/ ARREGLO DE
REGISTROS INTERNOS
FORMATO INTERNO DE UN
PROGRAMA
El formato de una línea de código en lenguaje ensamblador consta de cuatro partes:
 Etiqueta, variable o constante: No siempre es definida, si se define es necesario utilizar separadores
para diferenciarla de las otras partes, usualmente espacios o algún símbolo especial.
 Directiva o instrucción: es el nombre con el que se conoce a la instrucción que queremos que se
ejecute.
 Operando(s): la mayoría de las instrucciones en ensamblador trabajan con dos operandos, aunque hay
instrucciones que funcionan solo con uno.
 El primero normalmente es el operando destino, que es el depósito del resultado de alguna operación;
y el segundo es el operando fuente, que lleva el dato que será procesado. Los operandos se separan
uno del otro por medio de una coma.
 Comentario: como su nombre lo indica es tan solo un escrito informativo, usado para explicar que
está haciendo el programa en determinada línea; se separa de las otras partes por medio de un punto y
coma.
FORMATO EXTERNO DE UN
PROGRAMA
Ademas de definir ciertas reglas para que el ensamblador pueda entender una instrucción es necesario darle cierta información
de los recursos que se van a utilizar, como por ejemplo los segmentos de memoria que se van a utilizar, datos iniciales del
programa y también donde inicia y donde termina nuestro código.

Un programa sencillo puede ser el siguiente:

.MODEL SMALL
.CODE
Programa:
MOV AX,4C00H
INT 21H
.STACK
END Programa

El programa realmente no hace nada, únicamente coloca el valor 4C00H en el registro AX, para que la interrupción 21H
termine el programa, pero nos da una idea del formato externo en un programa de ensamblador.

La directiva .MODEL define el tipo de memoria que se utilizará; la directiva .CODE nos indica que lo que esta a continuación
es nuestro programa; la etiqueta Programa indica al ensamblador el inicio del programa; la directiva .STACK le pide al
ensamblador que reserve un espacio de memoria para las operaciones de la pila; la instrucción END Programa marca el final del
EJEMPLO PRÁCTICO DE UN
PROGRAMA
Aquí se ejemplificará un programa que escriba una cadena en pantalla:
.MODEL SMALL
.CODE
Programa:
MOV AX, @DATA
MOV DS, AX
MOV DX, Offset Texto
MOV AH, 9
INT 21H
MOV AX,4C00H
INT 21H
.DATA
Texto DB 'Mensaje en pantalla.$'
.STACK
END Programa

Los primeros pasos son iguales a los del programa anterior: se define el modelo de memoria, se indica donde inicia
el código del programa y en donde comienzan las instrucciones.
SEGMENTOS
La arquitectura de los procesadores x86 obliga al uso de segmentos de memoria para
manejar la información, el tamaño de estos segmentos es de 64kb.
Para que el ensamblador pueda manejar los datos es necesario que cada dato o instrucción se
encuentren localizados en el área que corresponde a sus respectivos segmentos. El
ensamblador accesa a esta información tomando en cuenta la localización del segmento,
dada por los registros DS, ES, SS y CS, y dentro de dicho registro la dirección del dato
específico.

Ejemplo: 1CB0:0102 MOV AX,BX


El primer número, 1CB0, corresponde al segmento de memoria que se está utilizando, el
segundo se refiere a la dirección dentro de dicho segmento, y a continuación aparecen las
instrucciones que se almacenaran a partir de esa dirección. El ensamblador se encarga de
ajustar el tamaño de los segmentos tomando como base el número de bytes que necesita cada
instrucción que va ensamblando, ya que sería un desperdicio de memoria utilizar los
segmentos completos.
REGISTROS INTERNOS DEL
80X86
Registros de propósito general
El microprocesador 8086 cuenta con cuatro registros de propósito general, los
cuales pueden ser usados libremente por los programadores. Estos registros
reciben los nombres siguientes:
• AX (Acumulador) Este registro es el encargado de almacenar el resultado de
algunas operaciones aritméticas y lógicas.
• BX (Base) Este registro es utilizado para calcular direcciones relativas de datos
en la memoria.
• CX (Contador) Su función principal es la de almacenar el número de veces que
un ciclo de instrucciones debe repetirse.
• DX (Datos) Por lo general se utiliza para acceder a las variables almacenadas
en la memoria.
Registros apuntadores
El 8086 también cuenta con dos registros apuntadores SP y BP. Estos registros reciben su
nombre por que su función principal es la de apuntar a alguna dirección de memoria
especifica.
• SP (Apuntador de pila) Se encarga de controlar el acceso de los datos a la pila de los
programas. Todos los programas en lenguaje ensamblador utilizan una pila para
almacenar datos en forma temporal.
• BP (Apuntador Base) Su función es la de proporcionar direcciones para la transferencia
e intercambio de datos.

Registros índices
Existen dos registros llamados SI y DI que están estrechamente ligados con operaciones de
cadenas de datos.
• SI (Índice Fuente) Proporciona la dirección inicial para que una cadena sea
manipulada.
• DI (Índice Destino) Proporciona la dirección de destino donde por lo general una
cadena será almacenada después de alguna operación de transferencia.
Registros de segmento
El 8086 cuenta con cuatro registros especiales llamados registros de segmento.
• CS (Segmento de código) Contiene la dirección base del lugar donde inicia el programa
almacenado en memoria.
• DS (Segmento de datos) Contiene la dirección base del lugar del área de memoria donde
fueron almacenadas las variables del programa.
• ES (Segmento extra) Este registro por lo general contiene la misma dirección que el
registro DS.
• SS (Segmento de Pila) Contiene la dirección base del lugar donde inicia el área de
memoria reservada para la pila.

Registro apuntador de instrucciones


• IP (Apuntador de instrucciones) Este registro contiene la dirección de desplazamiento
del lugar de memoria donde está la siguiente instrucción que será ejecutada por el
microprocesador.
Registro de estado
Conocido también como registro de banderas (Flags), tiene como función principal
almacenar el estado individual de las diferentes condiciones que son manejadas por el
microprocesador. Estas condiciones por lo general cambian de estado después de
cualquier operación aritmética o lógica:
• CF (Acarreo) Esta bandera indica el acarreo o préstamo después de una suma o resta.
• OF (Sobreflujo) Esta bandera indica cuando el resultado de una suma o resta de
números con signo sobrepasa la capacidad de almacenamiento de los registros.
• SF (Signo) Esta bandera indica si el resultado de una operación es positivo o
negativo. SF=0 es positivo, SF=1 es negativo.
• DF (Dirección) Indica el sentido en el que los datos serán transferidos en operaciones
de manipulación de cadenas. DF=1 es de derecha a izquierda y DF=0 es de izquierda
a derecha.
• ZF (Cero) Indica si el resultado de una operación aritmética o lógica fue cero o
diferente de cero. ZF=0 es diferente y ZF=1 es cero.
• IF (interrupción) Activa y desactiva la terminal INTR del microprocesador.
• PF (paridad) Indica la paridad de un número. Si PF=0 la paridad es impar y si PF=1
la paridad es par.
• AF (Acarreo auxiliar) Indica si después de una operación de suma o resta ha ocurrido
un acarreo de los bits 3 al 4.
• TF (Trampa) Esta bandera controla la ejecución paso por paso de un programa con
fines de depuración.
REFERENCIAS
http://moisesrbb.tripod.com/unidad2.htm
http://www.monografias.com/trabajos-pdf/programacion-ensamblador-procesadores/programacion-ens
amblador-procesadores2.shtml

También podría gustarte