Nombre de la materia
Lenguaje Ensamblador Nombre de la Licenciatura
Ingeniería en Sistemas Computacionales Nombre del alumno
Pamela Gil Matrícula
26292 Nombre de la Tarea
Macros y Procedimientos Unidad #
nidad 6! Macros y Procedimientos Nombre del Tutor
"o# $mir %odrígue& 'li(ares Fecha
29!))!2*)6
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
INTRODUCCION
En lenguaje ensamblador se denomina macro al conjunto de instrucciones que se agrupan bajo un nombre descriptivo, después de que la macro ha sido declarada, sólo es necesario indicar su nombre en el cuerpo del programa y el ensamblador se encargara de reemplazarla por las instrucciones de dicha. Las instrucciones de macros se pueden guardar en el mismo programa o en un archivo separado que el programa pueda identificar y se ejecutan pulsando una combinación especial de teclas o un botón creado para esa acción. Una de las ventajas que brinda el uso de las macros es la creación de bibliotecas, las cuales son grupos de macros que pueden ser incluidas en un programa desde un archivo diferente. ara la creación de estas bibliotecas, solo tenemos que escribir un archivo con todas las macros que se necesitar!n y guardarlo como archivo de te"to y posteriormente se pueden integrar para su ejecución. Un procedimiento es un conjunto de instrucciones en el cual podemos dirigir el flujo de nuestro programa, al finalizar la ejecución de dichas instrucciones se restablece el control a la siguiente linea a procesar del código que mando llamar al procedimiento. Los procedimientos nos ayudan a crear programas legibles y f!ciles de modificar. #l momento de invocar a un procedimiento se guarda en la pila la dirección de la siguiente instrucción del programa para que, una vez transferido el flujo del programa y terminado el procedimiento, se pueda regresar a la linea siguiente del programa original.
2
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
Ejercicios de programación:
Escriba los siguientes programas en ensamblador de $% bits con comentarios y estructura est!ndar. ara ello puede utilizar todos los programas que se han realizado con anterioridad. uede reutilizar código de las clases y libros, pero no copiarlos en su totalidad. &odos los procedimientos y macros deben localizarse en una librer'a aparte con e"tensión (.lib 1) Escriba SOLO UNA de as sig!ien"es macros #E res!"ado se deja en D$): % &acro para ee'ar a a po"encia n(sima !n n*mero en"ero+
% &acro para cac!ar e ,ac"oria de 'aor n+
&)&LE *!lculo de un factorial +act.asm)*LU/E )rvine01.inc .code main 23* push $1 4 calcula el factorial de $1 call actorial 4 calcula factorial +E#52etorno6ain7 call 8rite/ec 4 lo muestra call *rlf e"it main E/ 499999999999999999999999999999999999999999999999999999999 actorial 23* 4 *alcula un factorial. 4 2ecibe7 :ebp;<= > n, el n?mero a calcular 4 /evuelve7 ea" > el factorial de n 4999999999999999999999999999999999999999999999999999999999 push ebp mov ebp,esp mov ea",:ebp;<= 4 obtiene n cmp ea",@ 4 n A @B ja L$ 4 s'7 contin?a
3
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
mov ea",$ 4 no7 regresa a $ jmp L1 L$7 dec ea" push ea" 4 actorial+n9$call actorial 4 Las instrucciones de aqu' en adelante se ejecutan cuando 4 regresa cada una de las llamadas recursivas. 2etornoact7 mov eb",:ebp;<= 4 obtiene n mul eb" 4 E/57 E#5 > E#5 ( EC5 L17 pop ebp 4 devuelve E#5 ret D 4 limpia la pila actorial E/ E/ main % &acro para cac!ar a s!ma de os en"eros -!e .a/ en"re n1 / n0 #inc!/ndoos)+
0) Escriba !na macro -!e reciba os coe,icien"es #en"eros) de !na ec!ación c!adr"ica / de"ermine e 'aor de as ra2ces3 si s"as son en"eras+
a("1 ; b(" ; c > @ rototipo de *7 int quadratic+ double a, double b, double c, double ( root$, double (root1 arFametros7 a, b, c 9 *oeficientes de la ecuaciFon cuadrFatica +ver arriba root$ 9 #puntador al double que almacena la primera raFGz root1 9 #puntador al double que almacena la segunda raFGz Halor de retorno7 devuelve $ si las raFGces son reales si no @ Idefine a qJord :ebp;<= Idefine b qJord :ebp;$%= Idefine c qJord :ebp;1D= Idefine root$ dJord :ebp;01=
4
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
Idefine root1 dJord :ebp;0%= Idefine disc qJord :ebp9<= Idefine oneKoverK1a qJord :ebp9$%= segment .data 6inusour dJ 9D segment .te"t global Kquadratic Kquadratic7 push ebp mov ebp, esp sub esp, $% 4 asigna 1 doubles +disc oneKoverK1a push eb" 4 debe guardar el valor original de eb" fild Jord :6inusour=4 pila 9D fld a 4 pila7 a, 9D fld c 4 pila7 c, a, 9D fmulp st$ 4 pila7 a(c, 9D fmulp st$ 4 pila7 9D(a(c fld b fld b 4 pila7 b, b, 9D(a(c fmulp st$ 4 pila7 b(b, 9D(a(c faddp st$ 4 pila7 b(b 9 D(a(c ftst 4 prueba con @ fstsJ a" sahf jb noKrealKsolutions 4 if disc M @, no hay soluciones reales fsqrt 4 pila7 sqrt+b(b 9 D(a(c fstp disc 4 almacena y saca de la pila fld$ 4 pila7 $.@ fld a 4 pila7 a, $.@ fscale 4 pila7 a ( 1+$.@- > 1(a, $
5
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
fdivp st$ 4 pila7 $N+1(a fst oneKoverK1a 4 pila7 $N+1(a fld b 4 pila7 b, $N+1(a fld disc 4 pila7 disc, b, $N+1(a fsubrp st$ 4 pila7 disc 9 b, $N+1(a fmulp st$ 4 pila7 +9b ; disc-N+1(a mov eb", root$ fstp qJord :eb"= 4 almacena en (root$ fld b 4 pila7 b fld disc 4 pila7 disc, b fchs 4 pila7 9disc, b fsubrp st$ 4 pila7 9disc 9 b fmul oneKoverK1a 4 pila7 +9b 9 disc-N+1(a mov eb", root1 fstp qJord :eb"= 4 almacena en (root1 mov ea", $ 4 valor de retorno es $ jmp short quit noKrealKsolutions7 mov ea", @ 4 valor de retorno es @ quit7 pop eb" mov esp, ebp pop ebp ret quad.asm Assember4 Asm &o' A$35655. &o' 78319. &o' C$35555.
&o' D$319;.
6
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
In" 15. End
<) Escriba os sig!ien"es procedimien"os:
I) cear: procedimien"o -!e borra a pan"aa
.model tiny .data .code clear macro mov a.,@@h ;limpia la pantalla mov a,@0h int $@h endm .startup clear ;macro clear mov a.,@$h ;pedimos un caracter int 1$h ;para esperar el resultado .e"it end
II) b!e: procedimien"o -!e deja en a=! a pan"aa
mov d",0c 0*Oh. mov c",$@ cicloK17 4 6odificar $@ entradas de la paleta mov al,@ 4 2ojo. out d",al mov al,@ 4 Herde
7
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
out d",al mov al,% 4 #zul mul cl out d",al loop cicloK1 4 esperar por tecla mov ah,$@h int $%h III) recibe: procedimien"o -!e recibe !n en"ero de 'arias ci,ras por "ecado / o cooca en a pia
) Escriba UNO SOLO de os sig!ien"es procedimien"os #e res!"ado se deja en D$): % De"ermine e ma/or3 menor de n 'aores en"eros g!ardados en a pia+ % Cac!e e promedio con dos decimaes de n 'aores en"eros en a pia+:
.6odel Pmall .PtacQ %D ./ata msj /b @ah,@dh, R /igita las 0 calificaciones7 R,RSR msj1 /b R #probadoR,RSR msj0 /b R 2eprobadoR,RSR msjD /b @ah,@dh, R /esea capturar otro alumnoB $.9Pi, 1.9oR,RSR num db @ sum db @ prom db @ .*ode inicio7 mov c",@0h 4numero de calificaciones a pedir mov bl,@@@@h mov al,@@@@h mov a",Tdata mov ds,a" mov ah,@O
8
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
mov d",offset msj int 1$h edir7 4ide 0 calificaciones, contador asignado en *5 mov ah,@$h int 1$h sub al,0@h add bl,al 4acemos la suma de las calificaciones y las asignamos en bl aaa loop pedir 4repite ciclo jmp promedio promedio7 4siemplemente divide el resultado de la suma entre 0 mov a",b" 4pasamos el total de la suma a #5 mov bl,@0h div bl 4dividimos #5 entre bl aad 4ajuste mov bl,al 4movemos el resultado a bl para imprimirlo mov ah,@1h mov dl,bh add dl,0@h int 1$h mov dl,bl add dl,0@h int 1$h cmp bl,@Vh 4comparamos si el resultado +bl- es V ja apro 4si es mayo salta a la etiqueta apro je apro 4si es igual salta a la etiqueta apro jb repro 4 si es menor salta a la etiqueta repro apro7 4Polo imprime el mensaje de aprobado mov a",Tdata mov ds,a"
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
mov ah,@O mov d",offset msj1 int 1$h jmp otro repro7 4Polo imprime el mensaje de reprobado mov a",Tdata mov ds,a" mov ah,@O mov d",offset msj0 int 1$h jmp otro otro7 4)mprime el mensaje si quiere otro promedio y compara con $ para repetir todo el programa mov a",Tdata mov ds,a" mov ah,@O mov d",offset msjD int 1$h mov ah,@$h int 1$h cmp al,0$h je inicio ja salir jb salir salir7 mov ah,@Dch int 1$h end inicio % C!en"e as 'eces -!e !n n*mero > aparece den"ro de os primeros n 'aores de a pia+
!"
Unidad #: 6!
Macros y Procedimientos
Lenguaje Ensamblador
CONCLUSION Los macros son una herramienta muy importante, ya que nos facilitan la manera de simplificar el código de los programas, al llamar la macro en determinada sección del código para realizar una tarea espec'fica, de igual manera los procedimientos nos ayudan a crear programas legibles, precisos y f!ciles de modificar.
!!