Está en la página 1de 44

LENGUAJE ENSAMBLADOR

CONTINUACION

DWORD y SDWORD
Valor1 DWORD 12345678h; sin signo Valor2 SDWORD -2147483648; con signo Valor3 DWORD 20 DUP(?) Versiones viejas del ensamblador usan la directiva DD para definir palabras dobles con y sin signo. Valor1 DD 12345678h; sin signo valor2 DD -2147483648; con signo

Lista

DWORD 1, 2, 3, 4, 5; arreglo de

palabras dobles

QWORD y TBYTE
QWORD designa localidades para valores de 8 bytes (4 palabras). Valor1 QWORD 1234567812345678h Usted puede usar DQ por compatibilidad con ensambladores viejos. TBYTE designa localidades para valores de 10 bytes (enteros de 80 bits). Se puede usar DT por compatibilidad con ensambladores viejos. Valor1 TBYTE 1000000000123456789Ah

REAL4, REAL8 y REAL10


REAL4 define una variable real de 4 bytes. REAL8 define una variable real de 8 bytes. REAL10 define una variable real de 10 bytes. Ejemplos rvalor1 REAL4 -2.1 rvalor2 REAL8 3.2E-260 rvalor3 REAL10 4.6E+4096 arreglo REAL4 20 DUP(0.0)

Ejemplo: Suma y Resta


Esta secuencia de instrucciones suma y resta enteros de 32 bits. MOV EAX, 10000H; EAX=10000H ADD EAX, 40000H; EAX=50000H SUB EAX, 20000H; EAX=30000H

Ejemplo de Suma y Resta usando variables


Esta secuencia de instrucciones suma y resta enteros sin signo de 32 bits y almacena el resultado en una variable. Valor1 valor2 valor3 resultado MOV ADD SUB MOV DWORD DWORD DWORD DWORD 10000h 40000h 20000h ?

EAX, valor1 EAX, valor2 EAX, valor3 resultado, EAX

Constantes Simblicas
Una constante simblica se define asociando un identificador (un smbolo) con una expresin entera o con texto. A diferencia de una variable, la cual reserva memoria, una constante simblica no usa memoria. Las constantes simblicas se usan solamente durante el ensamblado del programa, ellas no cambian durante la ejecucin del programa (runtime).

Directiva =
La directiva = asocia el nombre de un smbolo con una expresin entera. La sintaxis es: nombre = expresin contador = 500 mov ax, contador lo que se genera y ensambla es mov ax, 500

Directiva =
esc_key = 27 mov al, esc_key Contador = 100 arreglo DWORD contador DUP(0) El smbolo definido con = puede ser redefinido cualquier nmero de veces: CNT = 5 mov al, CNT ; AL = 5 CNT = 10 mov al, CNT ; AL = 10 CNT = 100 mov al, CNT ; AL = 100

Clculo del tamao de arreglos y cadena de caracteres


lista BYTE 10, 20, 30, 40, 50 tamao_lista = ($ - lista) MASM usa el operador $(contador de localidades) para devolver el desplazamiento asociado con la localidad actual. mi_cadena BYTE Esta es una cadena BYTE larga que contiene BYTE cualquier nmero de BYTE caracteres tamao_cadena = ($ - mi_cadena)

Directiva EQU
La directiva EQU asocia el nombre de un smbolo con una expresin entera o con texto. Hay tres formatos: nombre EQU expresin nombre EQU smbolo nombre EQU <texto> En el primer formato, expresin debe ser una expresin entera vlida. En el segundo formato, smbolo es el nombre de un smbolo previamente definido con = o EQU. En el tercer formato cualquier texto puede aparecer dentro de <>. Cada vez que el ensamblador encuentra nombre sustituye el valor entero o el texto por el smbolo.

Ejemplos de EQU
EQU es muy til para definir cualquier valor que no evala a entero. Por ejemplo: PI EQU <3.1415926> matriz1 EQU 10*10 matriz2 EQU <10*10> M1 WORD matriz1 M2 WORD matriz2 El ensamblador genera: M1 WORD 100 M2 WORD 10*10 BBB EQU AA + 5 BBB EQU AA + 10: ilegal

MAS DIRECTIVAS
Directiva TITLE [lnea de texto]: marca la lnea entera como comentario, permite poner ttulo al programa.

Ejemplo:

TITLE Ordenar Nmeros

Directiva INCLUDE [nombre archivo]: permite usar y copiar definiciones necesarias e informacin de configuracin desde un archivo de texto.

SEGMENT - ENDS
El formato general para un segmento es:
nombre SEGMENT [align] [combine] [class]

..
nombre ENDS Todos los operandos o atributos son opcionales. Estas dos directivas definen segmentos completos.

Atributos de la directiva SEGMENT


El operando de la directiva SEGMENT puede tener tres tipos de atributos (opcionales): - Atributos de alineacin: PARA, WORD, BYTE - Atributos de combinacin: STACK, COMMON, PUBLIC, AT - Atributos de clase: CODE, DATA, STACK - estos atributos, entre apstrofes, son usados para agrupar segmentos relacionados cuando ejecutamos el LIGADOR. Atributos de alineacin PARA: el segmento inicia en una direccin divisible para 16 (10H) WORD: el segmento inicia en una direccin divisible para 2 BYTE: el segmento inicia en cualquier direccin Nota: en caso de omisin el ensamblador asume PARA Atributos de combinacin STACK: el ensamblador y ligador automticamente cargan SS y SP y el segmento forma parte la pila durante la corrida. COMMON: sobrelapa segmentos que tienen el mismo nombre. PUBLIC: concatena segmentos que tienen el mismo nombre. AT expresin: ubica el segmento en una direccin dada por expresin.

ORG y ASSUME
La directiva ORG [address] le dice al ensamblador que inicie la generacin de cdigo a partir del desplazamiento de direccin indicado por [address]. Se ubica inmediatamente despus de la directiva que define un segmento. ORG 100H La directiva ASSUME le dice al ensamblador los nombres que han sido escogidos para los segmentos de datos, cdigo, extra de datos y pila. Se ubica despus de la directiva segment code. Assume cs:code_sg, ds:data_sg, ss:stack_sg

PROC ENDP y END


Directivas PROC y ENDP: define procedimientos (subrutinas)
nombre
. . .

PROC
.. .. ret

FAR (o NEAR);

procedimiento ; dentro del ; segmento ; de cdigo

nombre

ENDP

Directiva END: especifica el FIN del programa fuente.

Detalles del Ensamblador


Los segmentos lgicos contienen los tres componentes de un programa: CODE, DATA y STACK. El ensamblador organiza las tres partes de tal forma que ocupe segmentos fsicos de memoria. CS, DS y SS contienen las direcciones de memoria donde residen los segmentos lgicos. Se puede definir segmentos de dos maneras: - Utilizando Modelos (segmentos simplificados) - Usando definiciones de segmento Completo.

Detalles del Ensamblador


Las directivas de segmento simplificado esconde muchos detalles de la definicin de segmento y asume las mismas normas de Microsoft usadas con los lenguajes de nivel alto. Las definiciones de segmento completo requieren de una sintaxis ms compleja, pero en cambio provee un control completo sobre cmo el ensamblador genera los segmentos. Esto implica escribir directivas ms complejas para manejar todas las tareas, que las directivas de segmento simplificado ejecutan automticamente.

Directivas de Segmento Simplificado


Las directivas de segmento simplificado son: - .MODEL - .CODE - .CONST - .DATA - .DATA? - .FARDATA -. FARDATA? - .STACK

Modelos de Memoria del Ensamblador Cada modelo define la manera como un programa
se almacena en la memoria del sistema. Por ejemplo, el modelo Tiny se usa para crear archivos .COM en lugar de archivos .EXE Los archivos .COM son diferentes porque todos los datos y cdigo calzan en un solo segmento y usan como origen la direccin 100H. Los archivos .COM se ejecutan ms rpido que los archivos .EXE. Para la mayora de las aplicaciones se usa los archivos .EXE y el modelo de memoria SMALL.

Modelos de Memoria del Ensamblador


Tiny - se combina datos y cdigo en el mismo segmento, debe ser menor que 64K. Este modelo permite crear archivos .COM el cual se origina en la localidad 100H. Small - contiene dos segmentos separados -Code <= 64K y Data <= 64K Medium - contiene un segmento de datos y cualquier nmero de segmentos de cdigo. Compact - contiene un segmento de cdigo y cualquier nmero de segmentos de datos. Large - Permite cualquier nmero de segmentos de datos y cdigo. Huge Igual que Large, pero los segmentos de datos pueden tener ms de 64K.

Ensamblado, Ligado y Ejecucin de un Programa

Miarchivo.asm Programa Editor Programa Ensamblador

Miarchivo.obj Programa Ligador Miarchivo.exe

Ejecutar Programa Depurar

Ejemplo de un Programa Fuente


title datasg datoA datoB datoC datasg codesg principal Ejemplo de un Programa Fuente word word word segment para data 250 125 ? ends

principal codesg

segment para code proc far assume cs: codesg, ds: datasg push ds mov ax,0 push ax mov ax, datasg mov ds,ax ;************************************************* mov ax, dataA add ax, dataB mov datoC, ax mov ax, 4c00h int 21h ret endp ends end principal

Ejemplo
title Programa para mover datos en memoria datasg segment para data ;Definicin de constantes usadas en el programa n=16 tabla1=100h tabla2=120h datasg ends codesg segment para code principal proc far assume cs:codesg, ds: datasg ;aqu instrucciones de inicializacin ;Inicializar puntero fuente y puntero destino mov si, tabla1 mov di, tabla2 mov cx, n ; Inicializar contador proxnum: mov ah, [si] mov [di], ah inc si inc di dec cx jnz proxnum aqu: jmp aqu ret principal endp codesg ends end principal

Proceso de Arranque (boot process)


En el arranque se carga CS: IP con FFFFH: 0000H, punto de entrada a ROMBIOS. Luego BIOS establece dos reas de datos: tabla de vectores de interrupcin y datos de BIOS (hardware del sistema). BIOS verifica si esta presente el sistema de archivos del DOS para accesar el Cargador del DOS. El cargador del DOS lleva a memoria los archivos IO.SYS y MSDOS.SYS. IO.SYS contiene drivers y cdigos especficos del harware; transfiere el control a MSDOS. MSDOS a su vez inicializa tablas internas y la tabla de interrupciones del DOS. Lee el archivo CONFIG.SYS y ejecuta sus comandos. Finalmente MSDOS pasa el control a COMMAND.COM el cual procesa el archivo AUTOEXEC.BAT y muestra el indicador C:\> que indica que esta listo para recibir comandos.

Responsabilidades del DOS


Administrar el Sistema de Archivos Entrada/ Salida de datos Administrar memoria Manejo de Interrupciones Cargar programas para su ejecucin

Carga de Programas para su Ejecucin


El cargador del DOS accesa MIARCHIVO.EXE en disco. Construye en memoria un Segmento Prefijo del Programa (PSP) de 256 bytes. Almacena en memoria MIARCHIVO.EXE inmediatamente despus de PSP. Carga la direccin del Segmento Prefijo del Programa en DS y ES. Carga CS: IP con la direccin de la primera instruccin de MIARCHIVO.EXE. Carga el puntero SS: SP definiendo as el tamao de la Pila. Transfiere el control a MIARCHIVO.EXE para su ejecucin comenzando con la primera instruccin en el Segmento de Cdigo. Nota: Contenido de PSP pgina 440 en: IBM PC Assembly Language and Programming por Peter Abel,

Interface DOS-BIOS
PROGRAMAS DE APLICACION

COMMAND.COM MSDOS KERNEL

BIOS ROM + IO.SYS

HARWARE

EL ROM-BIOS
El ROM-BIOS (Basic Input Output System) es parte del sistema de control en ROM de una IBM PC o compatible, provee los servicios de entrada y salida bsicos para la operacin de un computador. BIOS es una coleccin de procedimientos o subrutinas que implementan funciones especficas tales como: leer caracteres desde el teclado, escribir caracteres en pantalla, leer informacin desde un disco, etc.. Los servicios de BIOS ms importantes son: Servicios para perifricos. Interrupcin Uso 10H Despliegue de datos en pantalla 13H Control de diskettes 14H Control puertos seriales 15H Sevicios para Caseteras 16H Servicios Estndares de Teclado 17H Servicios para Control de impresora

EL ROM-BIOS
Servicios del estado de dispositivos Interrupcin Uso 11H Determinacin de Equipos 12H Determinacin de Memoria Servicio Hora / Fecha Interrupcin Uso 1AH Servicio de Hora y Fecha Servicio de Impresin de pantalla Interrupcin Uso 05H Imprimir Pantalla Servicios Especiales Interrupcin Uso 18H Activa ROM Basic 19H Activa Subrutina bootstrap start-up

Funcin 00H: Selecciona Modo de Video AH = 00H AL = # de modo Ejemplo: AL = 03H pantalla color tipo texto 25 filas X 80 columnas Funcin 01H: Fija tamao de Cursor. AH = 01H CH = (bits 4-0) = lnea inicial (0) CL = (bits 4-0) = lnea final (13 monocromtico, 7 para color) Funcin 02H: Posicin del Cursor AH = 02H BH = # pgina (normalmente 0) DH = # de fila DL = # de columna Funcin 06H: Buscar con avance de pgina AH = 06H AL = # filas para buscar(0 borra ventana) Salida: desplaza la pantalla de abajo BH = atributo de caracteres hacia arriba. Las lneas en blanco llenan CH = fila superior para buscar la parte inferior utilizando el atributo carcter cargado en BH. El atributo CL = Columna izquierda para buscar de 71H significa fondo blanco frente azul. DH = ltima fila para buscar DL = columna derecha para buscar

Funciones del INT 10H

Pantalla Modo Texto


El modo texto se usa para el despliegue normal de los caracteres ASCII en la pantalla. Provee el acceso al conjunto completo de 256 caracteres ASCII. El Byte Atributo en modo texto determina las caractersticas de cada caracter en pantalla. Cuando un programa fija un atributo, permanece fijo; es decir, todos los dems caracteres enviados a pantalla poseen el mismo atributo hasta que otra operacin lo cambie.

Byte Atributo
El byte atributo tiene el siguiente formato:

7 BL

6 R

5 G

4 B

3 I
FIJA ALTA INTENSIDAD

2 R

1 G

0 B

BACKGROUND

FOREGROUND

Despliegue de Colores

Ejemplos de Atributos Tpicos

Funciones del INT 10H (cont.)


Funcin 09H: despliegue de atributo o carcter en la posicin del cursor. AH = 09H AL = cdigo ASCII BH = # de pgina BL = atributo del Carcter CX = # de veces que la funcin exhibe el carcter en pantalla Funcin 0A: despliegue de un carcter en la posicin actual del cursor. AH = 0AH AL = cdigo ASCII BH = # de pgina CX = # de caracteres repetidos Nota: esta funcin no avanza el cursor

BIOS: Funcin 07H de INT 10H


AH=07H AL= con 0 borra ventana BH= atributo de caracteres CH= primera fila superior de ventana CL= columna izquierda superior DH= ltima fila de ventana DL= columna derecha inferior

Subrutinas del DOS


Cuando usted arranca una PC se ejecuta automticamente varias tareas. Una es cargar el sistema operativo del disco duro a la memoria RAM. MS-DOS carga tres archivos en RAM: IBMBIO.COM, IBMDOS.COM y COMMAND.COM. El archivo IBMDOS contiene las subrutinas de servicio del DOS. Hay diez interrupciones del DOS que son: Interrupcin Uso 20H 21H 22H 23H 24H 25H 26H 27H 2FH entre 33H Termina un Programa Funciones del DOS Direccin Terminal.ojo no usar en sus progrmas Direccin de ruptura (brake address) Manejador de error crtico Lee direcciones absolutas de Disco Escribe en direcciones absolutas de disco Termina y permanece Residente (TSR) Interrupcin Multiplex. Involucra comunicacin Programas Manejador de Ratn

Funciones del INT 21H


A travs de la interrupcin INT 21H se pueden llamar 115 funciones. Las funciones ms importantes son: Funcin 01H: Leer teclado con eco Espera por una entrada desde teclado. La funcin retorna uno de los dos cdigos: AL = ASCII de la tecla pulsada AL = 00 significa que el usuario puls una de las teclas de funciones extendidas- home, page up la funcin responde a CTRL + BREAK. Funcin 02H: Exhibir un carcter en pantalla. El carcter ASCII ha exhibirse se carga en DL. Funcin 06H: Lectura directa de teclado y despliegue de datos en pantalla - Entrada de datos, cargar 0FFH en DL. Si no hay caracteres en el buffer del teclado se enciende ZF y no espera por una entrada. Si hay caracteres esperado en el buffer entonces DL se carga con el cdigo ASCII del carcter y despeja ZF. La funcin no rebota el carcter en pantalla ni responde a CTRL + BREAK.

Funciones del INT 21H


Funcin 07H: Lectura directa de teclado sin eco. Opera de manera similar que la funcin 06H con DL = 0FFH, pero no retorna de la funcin hasta que se presione una tecla. Retorna en AL el cdigo ASCII. Funcin 08H: Lee entrada estandar sin eco. Similar a la funcin 07H, excepto que lee el dispositivo de entrada estandar. Puede asignarse como dispositivo estandar el teclado o el puerto COM. Responde a CTRL + BREAK mientras que 06H y 07H no. Retorna con cdigo ASCII en AL. Funcin 09H: Exhibe una cadena de caracteres. La cadena de caracteres debe terminar con un ASCII $ (24H). La cadena puede ser de cualquier longitud y puede contener caracteres de control tales como LF (0AH) y CR (0DH). mensaje db Buenos Das,$ ;..

Funciones del INT 21H


Funcin 0AH: Lee teclado con Buffer. Esta funcin requiere de una lista de parmetros. Necesita saber la longitud mxima del dato que entra, para alertar al usuario con un beep en el parlante cuando ingresen demasiados caracteres. Llena tambin uno de los campos con el nmero de caracteres ingresados. Veamos un ejemplo. LISTA_PARA LABEL BYTE LONG_MAX DB 20 LONG_ACT DB ? BUFFER_TECL DB 20 DUP(?) La direccin del buffer de datos se carga en DS:DX: lea dx, lista_para. Si tipiamos el nombre MANUEL la lista de parmetro es:

20 14 06

M 4D

A 41

N 4E

U 55

E 45

L 4C

CR 0D 20 20

..

También podría gustarte