Sie sind auf Seite 1von 3

Escuela Profesional de Ingeniera de Sistemas

Taller de Programacin en Ensamblador 2006

Capitulo I: Programacin Bsica en Ensamblador. Primeros programas


Nuestro primer programa
1. Programa Bsico: Editar el siguiente programa y guardarlo en la carpeta principal del Turbo Assembler como basico.asm codigo segment inicio: assume cs:codigo mov ah, 4ch mov al, 00h int 21h codigo ends end inicio a. b. c. d. e. f. g. ;este es el segmento de codigo ;directiva de inicializacion del programa

Ingresar al intrprete de comandos del windows (Smbolo del Sistema) Ubicarse en la carpeta pricipal del TurboAssembler Ingresar el comando TASM basico.asm Si aparecen errores volver a editar el programa Ingresar el comando TLINK basico Si no aparecen errores nuestro programa estar listo para ser ejecutado Ejecutarlo con basico

2.

Editar el siguiente programa y guardarlo en la carpeta principal del Turbo Assembler como hola.asm pila segment para 'stack' stack ;este es el segmento de pila dw 64 dup('?') pila ends datos segment para 'data' ;este es el segmento de datos mensage db 'hola mundo',13,10,'$' datos ends codigo segment para 'code' ;este es el segmento de codigo inicio: assume ss:pila,cs:codigo,ds:datos ;directiva de inicializacion del programa mov ax,datos ;inicializacion del segmento de datos mov ds,ax ;asignacion de la direccion lea dx,mensage ;instruccion que obtiene la direccion de mensage mov ah,09h ;asignacion de un numero int 21h ;ejecucion de la interrupcion de impresion en pantalla mov ah,4ch ;asignacion de un numero mov al,0 ;asignacion de otro numero int 21h ;ejecucion de la interrupcion de salida codigo ends end inicio

Ensamblar, linkear el programa y ejecutarlo

Explorando el programa
Identificadores y comentarios en assembler Un identificador es un nombre que se refiere a la direccin de un dato almacenado en memoria o a la direccin de una instruccin del programa. El nombre de un identificador puede ser escrito con cualquier letra del alfabeto, uno de los caracteres especiales (? _ $ @ .) o un nmero (que no debe ser la primera letra). As son identificadores vlidos: ?uno @cuatro fin .cinco nombre Solo se permiten comentarios de una lnea y comienzan con ; (punto y coma) y terminan con el fin de lnea. ; este es un comentario en assembler En el programa utilizamos los siguientes identificadores: pila, datos, codigo e inicio. Cabe aclarar que un identificador de una instruccin de un programa siempre es seguido de : (dos puntos) Cmo se organiza un programa en assembler?

Escuela Profesional de Ingeniera de Sistemas

Taller de Programacin en Ensamblador 2006

Un programa se organiza en segmentos (segment). Un segmento es un espacio de memoria que puede contener un conjunto de instrucciones ejecutables y/o datos, todos ellos contiguos, que ocupan como mximo 64kb y se identifican mediante un registro de segmento. Un segmento se declara de la siguiente manera: [nombre_segmento] segment [tipo_alineacion][clase] ; contenido del segmento [nombre_segmento] ends donde: [nombre_segmento] es un identificador vlido [tipo_alineacion] es el tipo de alineacin aplicado al segmento. Puede ser: byte, word, para, page [clase] indica el segmento definido. Usualmente es: code,data o, stack En el programa ejemplo se usan tres segmentos: el de pila, datos y cdigo. Generalmente todos los programas utilizan estos segmentos. Un registro? 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 bsicamente los siguientes registros: Registros de propsito Registros punteros e Registros de segmento Registro puntero de general: ndice - CS instrucciones y de - AX - SP - DS banderas - BX - BP - SS - IP - CX - SI - ES - FLAGS o FL - DX - DI Podemos adelantar que cada registro de propsito general se divide en dos registros. As AX se divide en AH y AL (cada uno de 8 bits), BX en BH y BL, CX en CH y CL y DX en DH y DL. Posteriormente se detallar ms acerca de la funcionalidad de los registros Qu significa dw 64 dup('?'), mensage db 'hola mundo',13,10,'$' ? Son directivas que definen datos globales (son mas o menos definiciones de variables del programa). Adems de estas directivas existen otras. A continuacin una breve resea: Directiva Descripcin DB Define un byte. Se usa tambin para definir cadenas de caracteres DW Define una palabra (2 bytes) DD Define una palabra doble (4 bytes) DF Define una palabra larga (6 bytes) DQ Define una palabra cudruple (8 bytes) DT Define 10 bytes Podemos usar esta directiva de la siguiente manera: [nombre] <directiva> [repeticiones] dup (expresion) donde: [nombre] asigna un identificador al espacio definido. Es opcional <directiva> es una directiva vlida [repeticiones] es un nmero opcional, que reproduce el nmero de espacios especificados. [expresin] es el valor con el que se inicializa al espacio definido Ejemplos: dw 64 dup (?); define un espacio de 64 palabras (64*3 bytes) no inicializados mensage db hola mundo,13,10,$;define un espacio con el identificador mensage y lo inicializa con la cadena mostrada. Dato2 dw 6 dup (14) seis palabras inicializadas con el nmero 14 Qu quiere decir assume? Se utiliza para determinar el propsito de cada registro de segmento. En el ejemplo esta directiva hace saber al ensamblador que el registro ss trabajar con el segmento de pila, el registro ds con el segmento de datos y el cs con el segmento de cdigo. Es una directiva esencial en el programa. Algunas instrucciones ensamblador mov <operando1>,<operando2> Es una de las instrucciones ms utilizadas. Se utiliza para realizar asignaciones. Equivale a operador1 = operador. El primer operando tiene que ser necesariamente un registro (ax, bx, cx, etc.) o un espacio de memoria conocido, y el segundo operando puede ser un registro, un espacio de memoria o un nmero definido. No estn permitidas las

Escuela Profesional de Ingeniera de Sistemas

Taller de Programacin en Ensamblador 2006

asignaciones de memoria a memoria, inmediato a registro de segmento y de registro de segmento a registro de segmento. lea <operando1>, <operando2> Se utiliza para obtener la direccin de un identificador de memoria. El operador1 siempre tiene que ser un registro y el operador2 es un identificador de memoria. int <numero> Ejecuta la interrupcin indicada por nmero. En el programa ejecuta la interrupcin 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 especfica. Para poder ejecutar una determinada interrupcin es necesario especificar una serie de parmetros, generalmente en los registros, con los cuales trabajar la interrupcin. Por ejemplo para poder imprimir una cadena de caracteres en la pantalla es necesario poner el valor 09h en el registro ah, y la direccin de la cadena a imprimir (terminada en el carcter especial $) en el registro dx. Para terminar el programa se utiliz tambin la interrupcin 21h, colocando el valor 04Ch en el registro ah y un cdigo de retorno (0) en el registro al. Posteriormente se profundizar en el uso de las interrupciones. Qu indica end inicio? End marca el final del programa. Se debe utilizar siempre end para indicar al ensamblador la finalizacin del programa y adems se debe indicar el identificador con el cual comienza el programa (en este caso inicio).

Ejercicios
Escribir un programa que imprima hola sistemas en forma vertical Escribir un programa que imprima hola 3 veces. Escribir un programa que dibuje la sgte figura. * ** *** **** ***** Escribir el sgte mensaje: 73,110,103,46,32,83,105,115,116,101,109,97,115

Das könnte Ihnen auch gefallen