Académique Documents
Professionnel Documents
Culture Documents
Palabras Reservadas
Las palabras reservadas son para uso estricto del ensamblador. stas incluyen a los operadores, directivas y smbolos predefinidos. Estas palabras no pueden usarse como identificadores. La tabla 3.1 muestra la lista de palabras reservadas de Turbo Assembler: Tabla 3.1 Palabras reservadas de Turbo Assembler. ; = ? [] + * . .286c .286p .287 .386 .8086 .8087 align .alpha assume %bin. byte catstr @codesize comm comment %conds @cpu %cref .cref %crefall
ITSON
20
%crefuref dataptr %depth dt Emul Eq .errb erridni even @fardata fword ideal ifdif ifndef irpc length locals masm name %noctls %nomacs %notrunc p186 p386p %pcnt purge .radix .seq sizestr subttl %text %trunc unknown @wordsize
Tabla 3.1 Palabras reservadas de Turbo Assembler (Cont.) %ctls @curseg @data .data dataseg @datasize ??date db df display dosseg dp dup dw dword else End Endif Endm Endp Equ Err .err .err1 .errdef Errdif errdifi erre errifnb Errifndef errnb errndef evendata Exitm extrn far .fardata @fardata? .fardata? @filename ge Global group gt if If1 if2 ifb ifdifi Ife ifidn ifidni %incl Include includelib instr jumps Label .lall large .lfcond %linum %list .list low lt macro %macs masm51 mod model .model ne near %newpage %noconds noemul %noincl nojumps %nolist nomasm51 nomulterrs %nosyms not nowarn offset or org p286 p286n p287 p386 p387 p8086 p8087 page pno87 %poplctl proc ptr %pushlctl pwor quirqs qword record rept .sall seg .sfcond shl short shr small stack .stack struc %subttl %syms symtype %tabsize .tfcond this ??time title type .type udataseg ufardata uses ??version warn width .xall .xcref .xlist xor
.data? dd dq elseif Ends .err2 erridn errnz fardata ??filename high ifdef ifnb irp le local mask multerrs %nocref nolocals nothing %out p386n %pagesize public radix segment size substr tbyte %title union word
ITSON
Captulo 3
21
aaa cmc daa idiv iret jcxz jmp jne jnp jpo les loope loopwne movsw out rcr ret sal segcs stc stosw xor
aad cmp das imul ja je jna jng jns js lock loopne loopwnz mul pop rep retn sar segds std test
Tabla 3.2 Conjunto de Instrucciones del 8086 aam aas adc cmps cmpsb cmpsw dec div esc in inc int jae jb jbe jg jge jl jnae jnb jnbe jnge jnl jnle jnz jo jp jz lahf lds lods lodsb lodsw loopnz loopw loopwe loopz mov movs neg nop not popf push pushf repe repne repnz retf rol ror sbb scas scasb segss seges shl sti stos stosb wait xchg xlat
add cwd hlt into jc jle jnc jno jpe lea loop loopwz movsb or rcl repz sahf scasw shr stosw xlatb
ITSON
22
Las etiquetas pueden contener los siguientes caracteres: A-Z a-z _ @ $ ? 0-9. Los dgitos 0-9 no pueden usarse como el primer carcter de una etiqueta. Un slo carcter $ o ? no puede usarse como etiqueta ya que tienen un significado especial. Las etiquetas deben ser nicas. Con excepcin de las definidas con la directiva =, y las etiquetas locales de macros y subrutinas. Las etiquetas pueden usarse como operandos tantas veces como se desee. Una etiqueta puede aparecer por s sola en una lnea. En este caso el valor asociado a la etiqueta es la direccin de la operacin en la siguiente lnea en el programa. Las palabras reservadas no pueden usarse como etiquetas. Las etiquetas que aparecen solas en una lnea y las que van seguidas de una instruccin deben terminar en dos puntos (:). Las dems etiquetas por lo general no terminan en dos puntos.
instruccin es un mnemnico de una instruccin del procesador. Cada instruccin se traduce directamente a una instruccin del lenguaje mquina del microprocesador. directiva es una instruccin para el ensamblador. No produce cdigo ejecutable, sino que controla varios de los aspectos de cmo opera el ensamblador: el tipo de cdigo generado (8086, 80286, 80386, etc.), los segmentos a usar, etc. operandos consiste de cero, uno o ms operandos. Un operando le especifica al ensamblador qu valor, registro, localidad de memoria, etc., asociar con cada instruccin. Hay varias clases de operandos: registros, constantes, etiquetas, variables y cadenas. El tipo y nmero de operandos depende de la instruccin o directiva. Si hay dos o ms, van separados por comas (,)
comentario es cualquier secuencia de caracteres precedidos por un punto y coma (;) y que termina con el fin de la lnea. Los comentarios son ignorados por el ensamblador Las lneas en blanco se tratan como comentarios.
Por ejemplo considere el programa de la siguiente pgina. Los nmeros a la izquierda del recuadro no forman parte del programa y slo sirven para numerar las lneas: Las lneas 1 a 7, 9, 16, 20, 28 y 45 son lneas con slo comentarios. Las lneas 8, 10, 15, 17, 19, 21, 27, 29, 34, 39, 44 y 46 son lneas en blanco y son tratadas como comentarios. Se usan para separar las partes de un programa y darle mayor claridad. Las lneas 31 y 40 son lneas con slo una etiqueta
ITSON Manuel Domitsu Kono
Captulo 3
23
Las lneas 32, 33, 35 a 38 y 41 a 43 contienen instrucciones. Las lneas 11 a 14, 18, 22 a 26, 30 y 47 contienen directivas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
;********************************************************** ; PRIMER.ASM. ; ; Este programa ilustra la estructura de un programa en ; ensamblador. Tambin muestra las principales directivas ; para El ensamblador. ;********************************************************** ;****** CDIGO DE INICIO ********************************** ideal dosseg model small stack 256 ;****** DECLARACIN DE CONSTANTES SIMBLICAS ************** cte equ 10
;****** VARIABLES DEL PROGRAMA **************************** codsal dato1 dato2 resul dataseg db db db db 0 ? ? ?
;****** CDIGO DEL PROGRAMA ******************************* codeseg inicio: mov mov mov add add mov salir: mov mov int ah, 04Ch al, [codsal] 21h ax, @data ds, ax al, [dato1] al, [dato2] al, cte [resul], al ; Inicializa el segmento de ; datos ; resul = dato1 + dato2 + cte
ITSON
24
Normalmente podemos considerar que un programa en ensamblador est formado de las siguientes secciones: Cdigo de inicio Declaracin de constantes simblicas Variables del programa Cdigo del programa Cdigo de terminacin
Cdigo De Inicio
El cdigo de inicio de un programa en ensamblador para el 8086 tiene como propsito declarar los nombres de los segmentos en los que se almacenar el cdigo del programa, los datos y la pila. Tambin establece el modelo de memoria bajo el que se ensamblar el programa y el tamao de la pila. El cdigo de inicio consta de un conjunto de directivas. En el programa de ejemplo tenemos:
ideal
El modo ideal es una notacin que emplea el ensamblador Turbo Assembler de Borland International para simplificar la sintaxis del cdigo inicial de un programa. La directiva ideal le dice a Turbo Assembler que utilice el modo ideal. Si se omite se utiliza la notacin empleada por la mayora de los ensambladores, por ejemplo el de Microsoft.
dosseg
Esta directiva que forma parte del modo ideal, le instruye al ensamblador que nombre y ordene los segmentos del programa de la misma forma en que lo hacen los compiladores de alto nivel. Esto es adecuado para la mayora de los programas en ensamblador y sobre todo en las rutinas de ensamblador que se van a ligar a un programa en alto nivel.
model
Esta directiva que debe ir despus de la directiva dosseg, selecciona uno de los 6 modos diferentes que tiene Turbo Assenbler de generar el cdigo de un programa dependiendo del tamao que tiene el cdigo y los datos. Estos modos llamados modelos de memoria, difieren en el tipo de apuntadores que el compilador genera por omisin y por lo tanto en la rapidez de ejecucin del cdigo. Los seis modelos de memoria son: Pequeito (tiny), pequeo (small), medio (medium), compacto (compact), grande (large) y extenso (huge). Modelo pequeito (tiny) En el modelo pequeito, el cdigo, los datos y la pila deben de estar en un solo segmento, esto es, el
ITSON Manuel Domitsu Kono
Captulo 3
25
programa completo no debe exceder a 64 KB. Todos los registros de segmento son inicializados al mismo valor y permanecen constantes durante la ejecucin del programa. Bajo este modelo el compilador genera apuntadores cercanos. El cdigo ejecutable producido es el ms pequeo y rpido. Modelo pequeo (small) En el modelo pequeo, el cdigo tiene su propio segmento y los datos y la pila estn en otro segmento, esto es, el cdigo no debe exceder a 64 KB ni tampoco los datos y pila. Los registros de segmento permanecen constantes durante la ejecucin del programa. El cdigo producido bajo este modelo utiliza tambin apuntadores cercanos y es igual de rpido que en el modelo pequeito pero el tamao del programa puede ser del doble. Normalmente debemos usar este modelo de memoria a menos que nuestro cdigo o datos exceda los 64 KB. Modelo medio (medium) En el modelo medio, el cdigo del programa puede ocupar varios segmentos pero los datos y la pila ocupan un solo segmento, esto es, el cdigo puede exceder a 64 KB pero los datos y pila no. Por lo tanto, bajo este modelo el cdigo utiliza apuntadores lejanos y los datos apuntadores cercanos. Debido a los apuntadores lejanos la velocidad de ejecucin del programa se ve degradada. Los registros de los segmentos de datos y la pila se inicializan al mismo valor y permanecen constantes durante la ejecucin del programa. Este modelo se debe usar cuando tengamos un programa de cdigo extenso y pocos datos. Modelo compacto (compact) En el modelo compacto, el cdigo del programa est limitado a un segmento, los datos pueden ocupar varios segmentos aunque el total de las variables estticas no pueden exceder los 64 KB. Por lo tanto, bajo este modelo el cdigo utiliza apuntadores cercanos y los datos apuntadores lejanos. Debido a los apuntadores lejanos tambin hay degradacin en la velocidad de ejecucin del programa. El registro del segmento de cdigo permanece constante durante la ejecucin del programa. Este modelo se debe usar cuando tengamos un programa de cdigo pequeo y muchos datos. Modelo grande (large) En el modelo grande, tanto el cdigo del programa como los datos puede ocupar varios segmentos, aunque el total de las variables estticas no pueden exceder los 64 KB. Los apuntadores en este modelo son lejanos tanto para el cdigo como para los datos. Esto hace que la velocidad de ejecucin de un programa compilado bajo este modelo sea ms lenta que cualquiera de las versiones anteriores. Este modelo se debe usar cuando tengamos un programa de cdigo extenso y muchos datos.
ITSON
26
Modelo extenso (huge). En el modelo extenso, es igual que el modelo grande, slo que el total de las variables estticas si pueden exceder los 64 KB. Sin embargo cada variable esttica en forma individual no puede exceder a 64 KB. Los apuntadores en este modelo son lejanos tanto para el cdigo como para los datos. La velocidad de ejecucin de un programa compilado bajo este modelo es ms lenta que cualquiera de los otros modelos.
stack
Esta directiva reserva espacio de memoria para la pila del programa, un rea de memoria que almacena valores temporales empleados por las subrutinas y las direcciones de regreso de las subrutinas.
Las directivas equ y = tienen las siguientes reglas: Las constantes simblicas no son variables. Ni el nombre ni su valor asociado se almacena en el segmento de datos del programa. La directiva equ permite darle nombre a constantes numricas, expresiones y cadenas. La directiva = slo permite darle nombre a constantes numricas y expresiones. No se le puede cambiar el valor asociado a un smbolo declarado con la directiva equ. En cambio a un smbolo declarado con la directiva = se le puede cambiar su valor tantas veces como se desee. Las directivas equ y = pueden aparecer en cualquier parte del programa. Pero es preferible colocarlas al principio ya que son ms visibles. Las expresiones declaradas con = se evalan inmediatamente, mientras que las expresiones declaradas con equ se evalan hasta que el smbolo se usa.
ITSON
Captulo 3
27
donde nomVar es el nombre de la variable y exp es una expresin constante cuyo valor se utiliza para inicializar la variable. Si la variable no se inicializa exp se substituye por un signo de interrogacin, ?. Por ejemplo bdato cresp bdatx wdato db db db dw 10h 'A' ? 0123h ; Variable de un byte ; inicializada a 10h. ; Variable de un byte ; inicializada a 65d. ; Variable de un byte ; no inicializada. ; Variable de tipo ; palabra inicializada ; a 0123h. ; Variable de tipo ; palabra no ; inicializada. ; ; ; ; Variable de tipo palabra doble inicializada a 01234567h.
wdatx
dw
ddato
dd
01234567h
ddatx
dd
qdato
dq
ITSON
28
La primera lnea contiene la directiva codeseg mencionada anteriormente. La segunda lnea establece que inicio es una etiqueta asociada a la direccin de la primera instruccin del programa, que en este ejemplo aparece en la siguiente lnea. Esta etiqueta es usada en la directiva end explicada en la siguiente seccin. En la tercera y cuarta lnea se carga en el registro DS la direccin de inicio del segmento de datos del programa. El smbolo predefinido @data tiene el valor de esa direccin. La instruccin mov mueve datos entre registros o entre registros y localidades de memoria. En este ejemplo la primera instruccin mov almacena la direccin del inicio del segmento de datos en el registro AX y la segunda instruccin mov mueve esa direccin del registro AX al registro de segmento DS. No se puede cargar una direccin directamente a uno de los registros de segmento, por lo que la instruccin mov ds, @data ; No vlido
no es vlida. La direccin debe cargarse primero a un registro de propsito general y luego de ah moverse al registro de segmento. Tambin la mayora de los programas que se van a ejecutar bajo el sistema operativo MSDOS deben terminar con las siguientes lneas de cdigo: salir: mov mov int ah, 04Ch al, [codsal] 21h
El propsito de este cdigo es llamar a una de las rutinas del sistema operativo que termina la ejecucin
ITSON Manuel Domitsu Kono
Captulo 3
29
del programa y nos regresa al sistema operativo. Esta rutina que se conoce como una rutina de servicio a interrupcin se ver en el Captulo 8: INTERRUPCIONES. La llamada a esa rutina se hace mediante la instruccin: int 21 Previamente se carg en el registro AH el valor 04Ch que especifica que se desea terminar el programa y regresar al sistema operativo y en el registro AL el valor de la variable codsal, que es el cdigo de salida del programa. El programa le regresa al sistema operativo el valor del cdigo de salida en la variable de ambiente errorlevel. Por convencin, un cdigo de salida de cero denota que el programa termin con xito y un cdigo diferente de cero indica que hubo un error durante la ejecucin del programa. El valor del cdigo identifica al error ocurrido. En los programas en C tambin se acostumbra regresarle un cdigo de salida al sistema operativo. esto se hace mediante la proposicin return en la funcin main(): int main(void) { ... return 0; }
Cdigo de terminacin
Todo programa en ensamblador debe contener una directiva end, la cual marca el final del cdigo fuente. Turbo Assembler ignora cualquier lnea despus de la directiva end. La sintaxis de la directiva end es la siguiente: end [etiqueta]
etiqueta es el nombre simblico de la direccin de la instruccin por la que empezar a ejecutarse el programa. Si se omite, el programa empezar su ejecucin en la primera instruccin del cdigo fuente. En un programa de un slo mdulo, es decir con un archivo con cdigo fuente, la directiva end debe siempre especificar el inicio del programa. En un programa que consiste de ms de un mdulo, slo la directiva end en el mdulo que contiene la primera instruccin a ejecutar debe llevar una etiqueta. En los otros mdulos la directiva end debe aparecer por s sola.
Bibliografa
1. Abel, Peter. Lenguaje Ensamblador y Programacin para PC IBM y Compatibles. Tercera Edicin. Prentice-Hall Hispanoamericana, S. A. Mxico. 1996.
ITSON
30
2. Borland Int. Turbo Assembler Reference Guide. Version 1. Borland International. Scotts Valley, CA. 1988. 3. Brey, Barry B. Los microprocesadores Intel: 8086/8088, 80186, 80286, 80386 y 80486. Arquitectura, programacin e interfaces. Tercera Edicin. Prentice-Hall Hispanoamericana, S. A. Mxico. 1995. 4. Godfrey, J. Terry. Lenguaje Ensamblador para Microcomputadoras IBM para Principiantes y Avanzados. Prentice-Hall Hispanoamericana, S. A. Mxico. 1991. 5. Hyde, Randall. The Art of Assembly Language Programming. Este libro se encuentra como una serie de documentod PDF en el siguiente servidor FTP: ftp.cs.ucr.edu/pub/pc/ibmpcdir 6. Swan, Tom. Mastering Turbo Assembler. Hayden Books. Indiana, U.S.A. 1989.
ITSON