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,"$" data ends
code segment assume cs:code,ds:data,ss:stack
Programa: MOV AX, DATA MOV DS, AX mov dx, offset Texto MOV AH, 09h INT 21H MOV AX, 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
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 i nt 21h mov ah, 02h mov dl , 13 i nt 21h mov ah, 09h mov dx, of f set l abel 8 i nt 21h
; l ee t ecl ado mov ah, 01h i nt 21h
; veri f i cando si es negat i vo cmp al , 2dh ; j e si gno
; aj ust a t ecl ado sub al , 30h add resul t ado, al j mp ret urn1
si gno: mov ah, 01h i nt 21h sub al , 30h neg al add resul t ado, al j e ret urn1
ret urn1: l oop suma
i mp1: cmp resul t ado, 00 j l i mp2 ; i nt erl i neado mov ah, 02h mov dl , 10 i nt 21h mov ah, 02h mov dl , 13 i nt 21h mov AH, 09H mov DX, OFFSET l abel 9 i nt 21H j mp i mpri me
salto no condicional compara dos operandos, modificando los flags en consecuencia