Nombre de la materia ensamblador
Lenguaje
Nombre de la Licenciatura Ingeniería en Sistemas c
Computacionales
Nombre del alumno María Fer Fernanda nanda Bárcenas Enciso
Matrícula 000015! Nombre de la
Tarea "ar area ea #
Unidad # Macros $ procedimientos
Nombre del Tutor
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area #
Miriam &rmenta 'on(ále(
Fecha
!1)10)15
MACROS Y PROCEDIMIENTOS Introducción: 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.
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area #
Desarrollo: Ejercicios de prograació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 !" Escri#a SO$O %NA de las siguientes acros &El resultado se deja en D'": ( Macro para ele)ar a la potencia n*+sia un n,ero entero-
( Macro para calcular el .actorial del )alor 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
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area # 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 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
( Macro para calcular la sua de los enteros /ue 0a1 entre n! 1 n2 &inclu1+ndolos"-
2" Escri#a una acro /ue reci#a los coe.icientes &enteros" de una ecuación cuadr3tica 1 deterine el )alor de las ra4ces5 si +stas son enteras-
0 4 a("1 ; b(" ; c > @ D 4 rototipo de *7 F 4 int quadratic+ double a, double b, double c, % 4 double ( root$, double (root1 G 4 arHametros7 < 4 a, b, c 9 *oeficientes de la ecuaciHon cuadrHatica +ver arribaI 4 root$ 9 #puntador al double que almacena la primera raHJz
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area # $@ 4 root1 9 #puntador al double que almacena la segunda raHJz $$ 4 Kalor de retorno7 $1 4 devuelve $ si las raHJces son reales si no @ $0 $D define a qMord :ebp;<= $F define b qMord :ebp;$%= $% define c qMord :ebp;1D= $G define root$ dMord :ebp;01= $< define root1 dMord :ebp;0%= $I define disc qMord :ebp9<= 1@ define oneNoverN1a qMord :ebp9$%= 1$ 11 segment .data 10 6inusour dM 9D 1D 1F segment .te"t 1% global Nquadratic 1G Nquadratic7 1< push ebp 1I mov ebp, esp 0@ sub esp, $% 4 asigna 1 doubles +disc O oneNoverN1a0$ push eb" 4 debe guardar el valor original de eb" 01 00 fild Mord :6inusour=4 pila 9D 0D fld a 4 pila7 a, 9D 0F fld c 4 pila7 c, a, 9D 0% fmulp st$ 4 pila7 a(c, 9D 0G fmulp st$ 4 pila7 9D(a(c 0< fld b 0I fld b 4 pila7 b, b, 9D(a(c D@ fmulp st$ 4 pila7 b(b, 9D(a(c D$ faddp st$ 4 pila7 b(b 9 D(a(c D1 ftst 4 prueba con @ D0 fstsM a"
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area # DD sahf DF jb noNrealNsolutions 4 if disc P @, no hay soluciones reales D% fsqrt 4 pila7 sqrt+b(b 9 D(a(cDG fstp disc 4 almacena y saca de la pila D< fld$ 4 pila7 $.@ DI fld a 4 pila7 a, $.@ F@ fscale 4 pila7 a ( 1+$.@- > 1(a, $ F$ fdivp st$ 4 pila7 $Q+1(aF1 fst oneNoverN1a 4 pila7 $Q+1(aF0 fld b 4 pila7 b, $Q+1(aFD fld disc 4 pila7 disc, b, $Q+1(aFF fsubrp st$ 4 pila7 disc 9 b, $Q+1(aF% fmulp st$ 4 pila7 +9b ; disc-Q+1(aFG mov eb", root$ F< fstp qMord :eb"= 4 almacena en (root$ FI fld b 4 pila7 b %@ fld disc 4 pila7 disc, b %$ fchs 4 pila7 9disc, b %1 fsubrp st$ 4 pila7 9disc 9 b %0 fmul oneNoverN1a 4 pila7 +9b 9 disc-Q+1(a%D mov eb", root1 %F fstp qMord :eb"= 4 almacena en (root1 %% mov ea", $ 4 valor de retorno es $ %G jmp short quit %< %I noNrealNsolutions7 G@ mov ea", @ 4 valor de retorno es @ G$ G1 quit7 G0 pop eb" GD mov esp, ebp GF pop ebp G% ret quad.asm
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area # Asse#ler6 As Mo) A'578770 Mo) 95!;0 Mo) C'577770
Mo) D'5!;<=0 Int !70 End
>" Escri#a los siguientes procediientos:
I" clear: procediiento /ue #orra la pantalla
.model tiny .data .code clear macro
You're Reading a Preview mov a0,@@h ;limpia la pantalla mov al,@0h
Unlock full access with a free trial.
int $@h endm
Download With Free Trial
.startup clear ;macro clear mov a0,@$h ;pedimos un caracter int 1$h ;para esperar el resultado .e"it end
II" #lue: procediiento /ue deja en a?ul la pantalla
http7QQtipsparaisc.blogspot.m"Q1@$1Q@DQensamblador9<@<%9modo9$0h9paleta9de.html copiar el ejemplo de esa p!g, posteriormente eliminar estas lineas
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area #
III" reci#e: procediiento /ue reci#e un entero de )arias ci.ras por teclado 1 lo coloca en la pila
<" Escri#a %NO SO$O de los siguientes procediientos &el resultado se deja en D'": ( Deterine el a1or5 enor de n )alores enteros guardados en la pila( Calcule el proedio con dos deciales de n )alores enteros en la pila-:
.6odel Rmall .RtacS %D ./ata msj /b @ah,@dh, T /igita las 0 calificaciones7 T,TT msj1 /b T #probadoT,TT msj0 /b T 2eprobadoT,TT msjD /b @ah,@dh, T /esea capturar otro alumnoB $.9Ri, 1.9oT,TT num db @ sum db @ prom db @ .*ode inicio7 mov c",@0h 4numero de calificaciones a pedir mov bl,@@@@h mov al,@@@@h mov a",Vdata mov ds,a" mov ah,@I mov d",offset msj int 1$h edir7 4ide 0 calificaciones, contador asignado en *5 mov ah,@$h int 1$h
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area # sub al,0@h add bl,al 4Wacemos 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,@Gh 4comparamos si el resultado +bl- es G 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 4Rolo imprime el mensaje de aprobado mov a",Vdata mov ds,a" mov ah,@I mov d",offset msj1 int 1$h jmp otro repro7 4Rolo imprime el mensaje de reprobado mov a",Vdata mov ds,a"
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area # mov ah,@I 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",Vdata mov ds,a" mov ah,@I 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 ( Cuente las )eces /ue un n,ero @ aparece dentro de los prieros n )alores de la pila-
Entregue sólo los arc0i)os -as
1 una li#rer4a -li# una )e? /ue 0a1a pro#ado el
correcto .uncionaiento de cada prograa5 procediiento o acro-
Unidad 6. Macros y procedimientos Lenguaje Ensamblador% "area #
Conclusión:
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.
9i#liogra.4a: Rcribd +1@$@- Ensamblador. En Rcribd. *onsultado el 1@ de octubre del 1@$F. /isponible en7 https7QQes.scribd.comQdocQ10$@F$D
6onograf'as +1@$0- rogramación en ensamblador. En monograf'as. *onsultado el 1$ de octubre del 1@$F. /isponible en7 http7QQMMM.monografias.comQtrabajos9pdfQprogramacion9 ensamblador9procesadoresQprogramacion9ensamblador9procesadores.pdf
Lenguaje ensamblador +1@$1- Lenguaje ensamblador. En 8iSipedia. *onsultado el 1$ de octubre del 1@$F. /isponible en7 https7QQes.MiSipedia.orgQMiSiQLenguajeNensamblador