Sunteți pe pagina 1din 15

Nombre de la materia

Lenguaje Ensamblador

Nombre de la Licenciatura
Ingenieríía en Sistemas
Computacionales

Nombre del alumno


Luis Manuel Mora Loí pez

Matrícula
010577912

Nombre de la Tarea
Macros y Procedimientos

Unidad #
Macros y Procedimientos

Nombre del Profesor


Prof. Jaime Humberto Pech Carmona

Fecha
10/06/2019
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 eses también
también unun conjunto
conjunto dede 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 y su operación depende de la pila.
instrucciones y su operación depende de la pila.

Objetivos:

 Reconocer la importancia y las características de operación de las macros y


procedimientos en el diseño de programas en lenguaje ensamblador.

 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.

 Ejercicio 1. Reflexiona acerca de las macros y procedimientos y contesta la


siguiente pregunta. ¿Qué criterios utilizarías para definir si alguna parte de un
código en ensamblador se debe desarrollar como macro, así como cuándo y cómo
un procedimiento?

Video

 Procedimientos y macros (Becerra y Zarate, n.d)

Lectura
 Macros y procedimientos (Jiménez, 2014)

2
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

Instrucciones adicionales para los ejercicios 2, 3, 4 y 5:

Para entregar esta tarea subirás a la plataforma el documento en word contestado


y un rar con los archivos *.asm y *lib. En el documento en word coloca el diagrama de
flujo, lo más detallado posible, sobre cada programa (puedes pegar una foto, pero aseguráte
que la letra y figuras sean legibles). En los archivos asm y .lib escribe los siguientes
programas en ensamblador de 16 bits con comentarios y estructura estándar. Para ello
puedes utilizar todos los programas que se han realizado con anterioridad. Puedes reutilizar
código de las clases y libros, pero no copiarlos en su totalidad. Todos los procedimientos y
macros deben localizarse en la librería aparte con extensión *.lib

 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:

.model small ;Modelo de memoria


.stack

numero macro var


mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Convertimos a decimal
mov var,al ;Almacenamos en varible
endm

caracter macro chr


mov ah,02h ;Function(character to send to standard output)
mov dl,chr ;Caracter a imprimir en pantalla

3
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

int 21h ;Interruption DOS functions


endm

multiplicar macro var1, var2


mov al,var1
mov bl,var2
mul bl
endm

separar macro alta, baja


mov ah,00h ;Se limpia la parte alta de ax
AAM ;Separa el registro ax en su parte alta y baja
mov alta,ah
mov baja,al
endm

resultado macro var


mov ah,02h
mov dl,var
add dl,30h
int 21h
endm

.data ;Definicion de datos(variables), donde se almacenara informacion


;Variables del primer numero ingresado
unidades_n1 db ?
decenas_n1 db ?

;Variables del segundo numero ingresado


unidades_n2 db ?
decenas_n2 db ?

;Variables temporales para los resultados de la primera multiplicacion

4
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

res_temp_dec_n1 db ?
res_temp_cen_n1 db ?

;Variables temporales para los resultados de la segunda multiplicacion


res_temp_dec_n2 db ?
res_temp_cen_n2 db ?

;Variables para los resultados


res_unidades db ?
res_decenas db ?
res_centenas db ?
res_uni_millar db ?

;Variable de acarreo en multiplicacion


acarreo_mul db 0

;Variable de acarreo en suma


acarreo_suma db 0

.code

.startup

mov ah,00h ;Function(Set video mode)


mov al,03 ;Mode 80x25 8x8 16
int 10h ;Interruption Video

numero decenas_n1
numero unidades_n1
caracter '*'
numero decenas_n2
numero unidades_n2
caracter '='

5
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

;Realizamos las operaciones

;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

6
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

mov bl, res_temp_cen_n1


add res_temp_cen_n2, bl
mov bl, acarreo_suma
add res_temp_cen_n2,bl
mov al,res_temp_cen_n2
separar acarreo_suma, res_centenas

;Acarreo para unidades de millar


mov bl, acarreo_suma
add res_uni_millar, bl

;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

7
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

%define a qword [ebp+8]


%define b qword [ebp+16]
%define c qword [ebp+24]
%define root1 dword [ebp+32]
%define root2 dword [ebp+36]
%define disc qword [ebp-8]
%define one_over_2a qword [ebp-16]

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

fild word [MinusFour]; pila -4


fld a ; pila: a, -4
fld c ; pila: c, a, -4
fmulp st1 ; pila: a*c, -4
fmulp st1 ; pila: -4*a*c
fld b
fld b ; pila: b, b, -4*a*c
fmulp st1 ; pila: b*b, -4*a*c
faddp st1 ; pila: b*b - 4*a*c
ftst ; prueba con 0
fstsw ax
sahf
jb no_real_solutions ; if disc < 0, no hay soluciones reales
fsqrt ; pila: sqrt(b*b - 4*a*c)

8
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

fstp disc ; almacena y saca de la pila


fld1 ; pila: 1.0
fld a ; pila: a, 1.0
fscale ; pila: a * 2^(1.0) = 2*a, 1
fdivp st1 ; pila: 1/(2*a)
fst one_over_2a ; pila: 1/(2*a)
fld b ; pila: b, 1/(2*a)
fld disc ; pila: disc, b, 1/(2*a)
fsubrp st1 ; pila: disc - b, 1/(2*a)
fmulp st1 ; pila: (-b + disc)/(2*a)
mov ebx, root1
fstp qword [ebx] ; almacena en *root1
fld b ; pila: b
fld disc ; pila: disc, b
fchs ; pila: -disc, b
fsubrp st1 ; pila: -disc - b
fmul one_over_2a ; pila: (-b - disc)/(2*a)
mov ebx, root2
fstp qword [ebx] ; almacena en *root2
mov eax, 1 ; valor de retorno es 1
jmp short quit

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

9
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

Mov BH,18h
Mov CX,0000h

Mov DX,184Fh
Int 10h
End

 Ejercicio 4. Escribe dos de los siguientes procedimientos en la librería *.lib.


 Azul: Procedimiento para dejar en azul la pantalla.
 Limpia: Procedimiento para borrar la pantalla.
 Recibe: Procedimiento para recibir datos por teclado y almacenarlos con
ayuda de la pila.
 RecNum: Procedimiento que permie recibir solamente números del teclado,
cualquier otro tipo de dato del teclado es descartado. Los números los
almacena con ayuda de la pila.

///Azul:

 mov dx,3c8h ; Empezamos a modificar la paleta de colores


 mov al,0 ; desde la entrada 0
 out dx,al
 inc dx ; DX = 3C9h.
 mov cx,10

 ciclo_2: ; Modificar 10 entradas de la paleta
 mov al,0 ; Rojo.
 out dx,al
 mov al,0 ; Verde
 out dx,al
 mov al,6 ; Azul
 mul cl
 out dx,al
 loop ciclo_2

10
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

mov ah,01h ;pedimos un caracter


int 21h ;para esperar el resultado
.exit
end

 Ejercicio 5. Escribe uno de los siguientes procedimientos en la librería *.lib.


 Maximo: Procedimiento para encontrar el valor máximo dentro de una variable
declarada en la sección .DATA con datos de tipo DB
 Promedio: Procedimiento para calcular el promedio de dos valores, uno
almacenado iniicalmente en AX y otro en BX
 Busqueda: Procedimiento que cuenta cuantas veces aparace un número X
dentro de los primeros n valores de la pila.

.Model Small
.Stack 64

11
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

Pedir: ;Pide 3 calificaciones, contador asignado en CX


mov ah,01h
int 21h
sub al,30h
add bl,al ;Hacemos la suma de las calificaciones y las asignamos en bl
aaa
loop pedir ;repite ciclo
jmp promedio

promedio: ;siemplemente divide el resultado de la suma entre 3


mov ax,bx ;pasamos el total de la suma a AX
mov bl,03h
div bl ;dividimos AX entre bl
aad ;ajuste

12
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

mov bl,al ;movemos el resultado a bl para imprimirlo


mov ah,02h
mov dl,bh
add dl,30h
int 21h
mov dl,bl
add dl,30h
int 21h
cmp bl,07h ;comparamos si el resultado (bl) es 7
ja apro ;si es mayo salta a la etiqueta apro
je apro ;si es igual salta a la etiqueta apro
jb repro ; si es menor salta a la etiqueta repro

apro: ;Solo imprime el mensaje de aprobado


mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj2
int 21h
jmp otro
repro: ;Solo imprime el mensaje de reprobado
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj3
int 21h
jmp otro

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

13
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

mov dx,offset msj4


int 21h
mov ah,01h
int 21h
cmp al,31h
je inicio
ja salir
jb salir
salir:
mov ah,04ch
int 21h

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:

-Macros y procedimientos (Jiménez, 2014).


-melo delos (10 nov 2013) Procedimientos y macros. Obtenido de Youtube:
https://www.youtube.com/watch?v=IWXVjfp419k

14
Unidad #6: Macros y Procedimientos
Lenguaje ensamblador

Forma de evaluación:

Criterio Valor Calificación de alumno

Presentación (Uso de formato


utel, redacción y ortografía, 10%
bibliografía soliciadada)

Ejercicio 1 10%

Ejercicio 2 20%

Ejercicio 3 20%

Ejercicio 4 20%

Ejercicio 5 20%

Total 100%

15

S-ar putea să vă placă și