TP 9. Programación en MASM. Macros

Anuncio
Facultad de Ingeniería. UNJu
TP
9
LABORATORIO DE COMPUTADORAS
Tema: Macros
Apellido y Nombre:
LU:
Carrera:
Fecha:
2013
CONCEPTOS
A. Investigue sobre las directivas condicionales. Ejemplifique.
B. ¿Bajo qué condiciones recomendaría el uso de procedimientos?
C. ¿Qué significa un procedimiento intrasegmento y un procedimiento intersegmento?
D. ¿Bajo qué condiciones recomendaría el uso de macros?
E. Describa los principales operadores y directivas útiles para macros.
F. ¿Qué significa Programación Híbrida?
G. Describa y ejemplifique las partes de un procedimiento.
H. Codifique la primera y la última línea de una macro sencilla llamada SETUP.
EJERCICIOS
1. El siguiente programa utiliza la macro ESCRIBE para visualizar una cadena de caracteres. Observe que la
macro utiliza como parámetro la cadena de caracteres a visualizar.
title 'escribe_cadena'
cr equ 13
lf equ 10
escribe macro palabra
lea dx,palabra
call escribir
endm
datos segment
texto1 db cr,lf,'Ingrese cadena:','$'
texto2 db cr,lf,'Cadena ingresada:','$'
cadena db 10 dup(' '),'$'
datos ends
pila segment stack
db 64 dup('pila')
pila ends
codigo segment
inicio proc far
assume ds:datos,ss:pila,cs:codigo
push ds
sub ax,ax
push ax
mov ax,datos
mov ds,ax
escribe texto1
sub si,si
mov ah,01
UNJU. FACULTAD DE INGENIERÍA
ingreso:int 21h
cmp al,13
je fingreso
mov cadena[si],al
inc si
cmp si,09
jle ingreso
fingreso:mov cadena[si],'$'
escribe texto2
escribe cadena
call esperar
ret
escribir proc
push ax
mov ah,09
int 21h
pop ax
ret
escribir endp
esperar proc
push ax
mov ah,00
int 16h
pop ax
ret
esperar endp
inicio endp
codigo ends
end inicio
Página 1
LABORATORIO DE COMPUTADORAS
Codifique y compile el programa anterior (por ejemplo, macro.asm), indicando que se genere el
archivo ESCRIBE.LST
C:\MASM>masm macro.asm
Microsoft MACRO Assembler Version 3.00
(C)Copyright Microsoft Corp 1981, 1983, 1984
Object filename [macro.OBJ]:
Source listing [NUL.LST]: ESCRIBE
Cross reference [NUL.CRF]:
49602 Bytes free
Warning Severe
Errors Errors
0
0
Revise el contenido del archivo ESCRIBE.lst e identifique las expansiones de la macro ESCRIBE en el
código del programa.
C:\MASM>edit ESCRIBE.asm
0004 B8 ---- R
0007 8E D8
0009
000D
0010
0012
0024
8D
E8
2B
B4
16 0000 R
003B R
F6
01
C6 84 0026 R 24
0029
002D
8D 16 0012 R
E8 003B R
0030
0034
0037
003A
8D 16 0026 R
E8 003B R
E8 0042 R
CB
. . .
mov ax,datos
mov ds,ax
escribe texto1
+
+
sub si,si
mov ah,01
. . .
lea dx,texto1
call escribir
fingreso:mov cadena[si],'$'
escribe texto2
+
lea dx,texto2
+
call escribir
escribe cadena
+
lea dx,cadena
+
call escribir
call esperar
ret
. . .
Observe que el código de la macro sustituye al llamado o invocación de ésta, insertando sus
instrucciones.
2. Escriba una macro llamada LEE que permita almacenar una cadena de caracteres ingresada por el
usuario. Considere que la macro utiliza como parámetros la cadena y la longitud de ésta.
3. Escriba una macro llamada INTERCAMBIO que intercambie el contenido de 2 datos de tipo byte.
Considere que la macro utiliza como parámetros los datos a intercambiar.
4. Escriba una macro llamada REPITE que visualice una cadena de caracteres un número determinado de
veces. Considere que la macro utiliza como parámetros la cadena y el número de veces que se debe
visualizar.
5. Escriba una macro llamada LETRAS que visualice los caracteres de un rango especificado. Considere que
la macro utiliza como parámetros carácter_mínimo y carácter_máximo.
UNJU. FACULTAD DE INGENIERÍA
Página 2
LABORATORIO DE COMPUTADORAS
6. Escriba una macro llamada CONFIGURA que permita asociar los registros de segmento CS, DS y SS con
los segmentos del programa (primeras instrucciones que aparecen en el programa ensamblador).
7. Escriba una macro llamada GPILA que permita almacenar el valor de los registros acumuladores en la
pila. También escriba la macro SPILA que permita recuperar el contenido de los registros acumuladores
desde la pila.
8. Escriba una macro llamada MAXMIN que determine los valores máximo y mínimo de vector de
memoria. Considere que la macro utiliza como parámetro el vector a analizar.
9. Escriba una macro llamada PRODUCTO que calcule el producto, por medio de sumas sucesivas, de 2
valores introducidos por el usuario. Considere que la macro utiliza como parámetros los valores a
multiplicar.
10. Escriba una macro llamada POTENCIA que calcule la potencia de un número A elevado al exponente B,
por medio productos sucesivos. Considere que la macro utiliza como parámetros la base y el
exponente.
11. Escriba una macro llamada DIVIDE que calcule la división (entera), por medio de restas sucesivas, de 2
valores introducidos por el usuario. Considere que la macro utiliza como parámetros el dividendo, el
divisor, el cociente y el resto.
12. Escriba una macro llamada MINUSCULAS que convierta una cadena ingresada por el usuario a
mayúsculas. Tenga en cuenta que la cadena introducida puede contener letras (en mayúsculas y/o
minúsculas), símbolos y/o dígitos. Considere que la macro utiliza como parámetro la cadena ingresada.
13. Escriba una macro llamada INVIERTE que genere la cadena inversa de una cadena de caracteres dada.
Considere que la macro utiliza como parámetros la cadena original y la inversa.
14. Escriba una macro llamada CONCATENA que concatene 2 cadenas. Considere que la macro utiliza como
parámetros las cadenas a concatenar y la cadena resultado.
15. Escriba una macro llamada COMPARA que determine si dos cadenas son iguales (igual longitud y
contenido), si la primera es mayor o si la segunda es mayor. Considere que la macro utiliza como
parámetros las cadenas a comparar.
16. Escriba una macro llamada BORRA_LETRA que elimine todas las apariciones de un carácter en una
cadena dada. Considere que la macro utiliza como parámetros la cadena y el carácter a eliminar.
17. Escriba una macro llamada ORDENALISTA que ordene un vector de memoria en forma creciente.
Considere que la macro utiliza como parámetro el vector a ordenar.
18. Escriba una macro llamada INSERTA que inserte (en orden) un carácter en una cadena de caracteres.
Considere que la macro utiliza como parámetros la cadena y el carácter a insertar.
19. Escriba una macro llamada INTERCALA que realice la mezcla (intercalación) de 2 vectores en un tercero.
Considere que la macro utiliza como parámetros los vectores a intercalar y el vector mezcla.
20. Escriba una macro llamada SUBCADENA que determine si una cadena es subcadena de otra. Considere
que la macro utiliza como parámetros la subcadena y la cadena a analizar.
UNJU. FACULTAD DE INGENIERÍA
Página 3
LABORATORIO DE COMPUTADORAS
21. La directiva INCLUDE permite agregar código a un programa en ensamblador a partir de otros archivos.
Por ejemplo, para el programa del ítem 1 (primero.asm) se almacenó el código de la macro ESCRIBE en
el archivo primero.lib que se incluye en el programa mediante la directiva INCLUDE primero.lib.
primero.asm
title 'escribe_cadena'
cr equ 13
lf equ 10
primero.lib
escribe macro palabra
lea dx,palabra
call escribir
endm
INCLUDE primero.lib
datos segment
texto1 db cr,lf,'Ingrese cadena:','$'
texto2 db cr,lf,'Cadena ingresada:','$'
cadena db 10 dup(' '),'$'
datos ends
lee macro cad, long
...
endm
pila segment stack
db 64 dup('pila')
pila ends
codigo segment
inicio proc far
assume ds:datos,ss:pila,cs:codigo
...
escribe texto1
lee cadena,09
escribe texto2
escribe cadena
...
inicio endp
codigo ends
end inicio
Considerando esto, guarde todas las macros desarrolladas en este práctico en el archivo macros.lib y
sustituya sus definiciones por la correspondiente sentencia INCLUDE.
22. Analice la macro:
XPUSH MACRO R1, R2, R3, R4, R4, R5, R6, R7, R8, R9, R10
IRP reg; <R1, R2, R3, R4, R4, R5, R6, R7, R8, R9, R10>
IFNB <reg>
PUSH reg
ENDIF
ENDM
ENDM
Considerando que la macro XPUSH se invoca como sigue
XPUSH AX, BX, DS, ES, VAR1
Determine:
a) Finalidad de la macro.
b) Resultado de la expansión de la macro con el formato de la invocación señalado.
c) ¿Se puede escribir la macro de otra manera y que cumpla el mismo cometido? En caso afirmativo
escriba el código de la macro, invocación y expansión.


UNJU. FACULTAD DE INGENIERÍA
Página 4
Descargar