Tarea 6 Ensamblador
Tarea 6 Ensamblador
Tarea 6 Ensamblador
Lenguaje Ensamblador
Nombre de la Licenciatura
Ing. Sistemas Computacionales
Matrícula
010230164
Nombre de la Tarea
Macros y Procedimientos
Unidad #
Macros y Procedimientos
Fecha
14/12/2020
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
ACTIVIDAD 6
Una
Una macro
macro eses el
el nombre
nombre que
que define
define a
a un
un conjunto
conjunto de
de instrucciones
instrucciones que
que serán
serán
sustituidas
sustituidas por
por la
la macro
macro cuanto
cuanto el
el nombre
nombre de
de ésta
ésta aparezca
aparezca en
en un
un programa
programa en
en el
el
momento
momento dede ensamblar
ensamblar el
el programa.
programa.
Un
Un procedimiento
procedimiento es es también
también unun conjunto
conjunto de de instrucciones
instrucciones que
que hacen
hacen alguna
alguna
tarea
tarea repetitiva,
repetitiva, pero
pero se
se ejecuta
ejecuta por
por medio
medio dede un
un salto
salto en
en el
el listado
listado de
de
instrucciones
instrucciones yy su
su operación
operación depende
depende dede la
la pila.
pila.
Objetivos:
Codificar macros para realizar tareas repetidas y tareas secundarias, bajo parámetros
configurables en variables.
Instrucciones:
Una vez que hayas comprendido los recursos de la unidad, descarga la siguiente actividad
en word y responde conforme a lo solicitado en el documento, recuerda que debes de
aumentar las fuentes de información consultadas aparte de las recomendadas.
Video
Lectura
Macros y procedimientos (Jiménez, 2014)
2
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
Introducción:
3
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
Ejercicio 2. Escribe SOLO UNA de las siguientes macros en la librería *.lib (El
resultado se deja en DX):
Macro para multiplicar 2 números de 8 bits.
Macro para calcular el factorial de un valor n.
Macro para elevar a la potencia n-ésima un número entero.
Macro para calcular la suma de los enteros que hay entre n1 y n2
(incluyéndolos).
//Multiplicar:
4
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
5
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
res_temp_dec_n1 db ?
res_temp_cen_n1 db ?
.code
.startup
numero decenas_n1
numero unidades_n1
caracter '*'
numero decenas_n2
numero unidades_n2
caracter '='
6
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
;Primera multiplicacion
multiplicar unidades_n1, unidades_n2
separar acarreo_mul, res_unidades
;Segunda multiplicacion
multiplicar decenas_n1, unidades_n2
mov res_temp_dec_n1,al
mov bl,acarreo_mul
add res_temp_dec_n1,bl
mov al,res_temp_dec_n1
separar res_temp_cen_n1, res_temp_dec_n1
;Tercera multiplicacion
multiplicar unidades_n1, decenas_n2
separar acarreo_mul, res_temp_dec_n2
;Suma -> Decenas
mov bl, res_temp_dec_n1
add res_temp_dec_n2,bl
mov al, res_temp_dec_n2
separar acarreo_suma, res_decenas
;Cuarta multiplicacion
multiplicar decenas_n1, decenas_n2
mov res_temp_cen_n2,al
mov bl,acarreo_mul
add res_temp_cen_n2,bl
mov al,res_temp_cen_n2
separar res_uni_millar, res_temp_cen_n2
;Suma -> Centenas
7
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
;Mostramos resultados
resultado res_uni_millar
resultado res_centenas
resultado res_decenas
resultado res_unidades
.exit
end
Ejercicio 3. Escribe una macro que reciba los coeficientes (enteros) de una
ecuación cuadrática y determine el valor de las raíces, si éstas son enteras.
a*x^2 + b*x + c = 0
Prototipo de C:
int quadratic( double a, double b, double c,
double * root1, double *root2 )
Par´ametros:
a, b, c - Coeficientes de la ecuaci´on cuadr´atica (ver arriba)
root1 - Apuntador al double que almacena la primera ra´?z
root2 - Apuntador al double que almacena la segunda ra´?z
Valor de retorno:
devuelve 1 si las ra´?ces son reales si no 0
8
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
segment .data
MinusFour dw -4
segment .text
global _quadratic
_quadratic:
push ebp
mov ebp, esp
sub esp, 16 ; asigna 2 doubles (disc & one_over_2a)
push ebx ; debe guardar el valor original de ebx
9
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
no_real_solutions:
mov eax, 0 ; valor de retorno es 0
quit:
pop ebx
mov esp, ebp
pop ebp
ret quad.asm
Assembler;
Asm
Mov AX,0600h
1
0
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
Mov BH,18h
Mov CX,0000h
Mov DX,184Fh
Int 10h
End
///Azul:
1
1
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
; esperar por tecla
mov ah,10h
int 16h
///Limpia:
.model tiny
.data
.code
clear macro
mov ah,00h ;limpia la pantalla
mov al,03h
int 10h
endm
.startup
clear ;macro clear
.Model Small
.Stack 64
1
2
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
.Data
msj Db 0ah,0dh, ' Digita las 3 calificaciones: ','$'
msj2 Db ' Aprobado','$'
msj3 Db ' Reprobado','$'
msj4 Db 0ah,0dh, ' Desea capturar otro alumno? 1.-Si, 2.-No','$'
num db 0
sum db 0
prom db 0
.Code
inicio:
mov cx,03h ;numero de calificaciones a pedir
mov bl,0000h
mov al,0000h
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj
int 21h
1
3
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
otro: ;Imprime el mensaje si quiere otro promedio y compara con 1 para repetir todo el
programa
mov ax,@data
mov ds,ax
mov ah,09
1
4
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
end inicio
Conclusiones:
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.
Fuentes de Información:
1
5
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador
Forma de evaluación:
Ejercicio 1 10%
Ejercicio 2 20%
Ejercicio 3 20%
Ejercicio 4 20%
Ejercicio 5 20%
Total 100%
1
6