Está en la página 1de 10

ENSAMBLADOR

REGISTROS DE USO
GENERAL
Existen 4 registros denominados AX, BX, CX y DX que en realidad tienen asignados
usos caractersticos, aunque pueden ser utilizados a discrecin para cualquier
cosa que necesitemos.

AX (acumulador), suele contener uno de los operandos que intervienen en
las operaciones aritmticas y lgicas, y despus de esta, el resultado de la
operacin. En general las instrucciones que trabajan con este registro (o su
mitad inferior) tienen un microcdigo ms simple que la misma instruccin
ejecutada con otro registro.

BX es el registro base, suele contener la direccin de inicio de una tabla de
valores.

CX es denominado contador. Las instrucciones de bucle (LOOP) utilizan
este registro como contador.

DX es un registro de datos, multiuso. Se utiliza en operaciones de
multiplicacin y divisin junto con AX. En operaciones de entrada/salida de
puertos IN/OUT, su mitad inferior DL, contiene el nmero de puerto ( 2.5).

REGISTROS DE SEGMENTO
Se dispone de cuatro registros que sirven para contener las direcciones de
otros tantos segmentos (zonas de 64 KB de memoria). Utilizndolos en
conjuncin con otros registros que sealan las direcciones concretas
dentro de estos segmentos (los desplazamientos ), permiten manejar la
totalidad de la memoria direccionable (el bus de direcciones es de 20
bits). Ver al respecto el epgrafe "Direccionamiento segmentado".

Segmento de cdigo CS ("Code segment"). Seala la direccin del
segmento de cdigo del programa que se est ejecutando.

Segmento de datos DS ("Data segment"). Seala la direccin del
segmento de datos del programa en ejecucin.

Segmento de pila SS ("Stack segment"). Seala la direccin del segmento
donde est la pila del programa.

Segmento extra ES ("Extra segment"). Es un segmento auxiliar a los
anteriores, se utiliza para sealar espacio extra en alguno de los
segmentos o para almacenar momentneamente direcciones
intermedias.

REGISTROS DE PUNTERO
Son 5 registros destinados a contener direcciones; estas direcciones son desplazamientos
dentro de los segmentos indicados por los registros de segmento.

El primero, denominado indistintamente puntero de instruccin IP ("Instruccin
pointer") y contador de programa PC ("Program counter"), indica el desplazamiento
(dentro del segmento de cdigo CS) de la prxima instruccin a ejecutar.

El puntero de pila SP ("Stack Pointer"), seala el desplazamiento del final de la pila
dentro del segmento de pila SS. En caso necesario la pila puede crecer a partir de este
punto, de forma que por ejemplo, una nueva invocacin de funcin crear un nuevo
registro de activacin que comenzar en este punto.

El puntero base BP ("Base pointer") seala el desplazamiento (dentro del segmento de
pila SS) donde se encuentra el origen de la zona ocupada por las variables dinmicas.

Existen dos registros denominados "de ndice", en razn de su utilizacin muy particular;
el ndice fuente SI ("Source index") y el ndice destino DI ("Destination
index"). Generalmente estos dos registros se utilizan con alguno de los registros de uso
general y con ciertas instrucciones especficamente pensadas para transferir datos
(dentro de un rango de posiciones de memoria), desde un punto inicial de un segmento
de datos, a otro.

REGISTRO DE ESTADO
Existe un registro especial, el registro de estado (FLAGS),
en el que 9 de los 18 bits actan como semforos
(indicadores del estado del procesador y del resultado
de determinadas operaciones). Por ejemplo, si
despus de una suma aritmtica hay o no
desbordamiento del bit ms significativo.
Los nombres y situacin de cada uno, dentro de la
palabra de 16 bits, se muestran en la figura 2.

EJERCICIO 1

stack segment
dw 64 dup(?)
stack ends

data segment
Texto db "hola.",13,10,"$ VARIABLE TEXTO Y DIRECCION DEL SEGMENTO
data ends


code segment
assume cs:code,ds:data,ss:stack

Programa:
MOV AX, DATA ALAMCENAMIENTO DE DATA EN (AX)
MOV DS, AX ALMACENAMIENTO DE AX EN (DS)
mov dx, offset Texto MOSTRAR LO QUE HAY EN LA VARIABLE TEXTO
MOV AH, 09h ALMACENAMIENTO EN AH
INT 21H DETERMINAR EL SISTEMA
MOV AX, 4CH ALMACENAMIENTO EN AX Y LLAMADO DE 4CH
INT 21H
code ends
end programa
Seala la direccin del segmento donde est la pila del
programa
Seala la direccin del segmento de datos del
programa en ejecucin
Seala la direccin del segmento de cdigo del programa que
se est ejecutando
Segmento de pila
que define el
espacio para ser
usado por el stack
Indica que registros de segmento se asociarn con
las etiquetas
Declaradas en las definiciones del segmento
Servicio: Funciones alto nivel DOS
Regresa el control al sistema operativo
Visualiza cadena
Obtiene direccin del mensaje
Data segment
label1 DB "Selecciona una operacion $"
label2 DB "1.- Suma $"
label6 DB "5.- Salir $"
label7 DB "Ingrese una opcion $"
label8 DB "Ingrese numero $"
label9 DB "El resultado es $"
resultado DB 0
Data ends


pila segment stack

DW 256 DUP (?)

pila ends

code segment

menu proc far

assume cs:code,ds:data,ss:pila
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
xor dx,dx

mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
;imprime seleccion de menu

mov ah,09h
mov dx,offset label7
int 21h

;lee teclado
mov ah,01h
int 21h

;ajunstando el teclado
xor ah,ah
sub al,30h
mov cx,2
;verificando opcion

cmp al,1
jz suma ;se dirige al metodo suma
Guarda valor en pila
Despliega un carcter a la pantalla.
Interrupcin reservada para BIOS
Lee estado del teclado
Resta el operando fuente del destino.
Resta la cadena fuente de la cadena
destino.
suma:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,09h
mov dx,offset label8
int 21h

;lee teclado
mov ah,01h
int 21h

;verificando si es negativo
cmp al,2dh
;je signo

;ajusta teclado
sub al,30h
add resultado,al
jmp return1


signo:
mov ah,01h
int 21h
sub al,30h
neg al
add resultado,al
je return1

return1: loop suma


imp1:
cmp resultado,00
jl imp2
;interlineado
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov AH,09H
mov DX,OFFSET label9
int 21H
jmp imprime


salto no condicional
compara dos operandos, modificando los flags en consecuencia

También podría gustarte