Sie sind auf Seite 1von 3

1.- Cul son las diferencias entre Macros y Procedimientos?.

( 3 puntos )
Macros
Procedimientos
Cuando queremos usar una macro, solo
Si deseamos utilizar un procedimiento
necesitamos escribir su nombre sin ningn tipo
deberemos utilizar obligatoriamente la
de instruccin adicional. Por ejemplo: MiMacro
instruccin CALL, por ejemplo: CALL MiProc
La macro es un mdulo con funciones especficas Un procedimiento es una extensin de un
que puede ser utilizado por diferentes
determinado programa
programas.
Los Procedimientos estn situados (located) en
Una Macro es incrustada directamente al realizar
una direccin especifica de memoria, y si usted
la compilacin en el cdigo del programa cada
utiliza el mismo procedimiento 10 veces, la CPU
vez que se utiliza. Por lo que si utilizamos una
transferir el control del programa a esa zona
macro 10 veces estaremos incluyendo su
especifica de memoria.
cdigo complete al compilar, provocando que el
ejecutable que creemos sea cada vez ms y
ms largo, ya que cada vez todas las
instrucciones de la macro son insertadas en el
cdigo principal.
Cul recomienda Usted y Porqu?

2.- Brindar un concepto a cada uno de los siguientes Directivas. ( 3 puntos )


a) &: Indica al ensamblador que concatene texto o smbolos
b) REPT: Provoca la repeticin de un bloque de instrucciones hasta ENDM, de acuerdo con el numero

de veces en la expresin de entrada.


c) IRP : Hace que se repita un bloque de instrucciones hasta ENDM
d) EXTRN: Sirve para indicar una lista de smbolos que deben ser reconocidos en el mdulo actual,

pero han sido definidos en otro mdulo. Se debe indicar el tipo de segmento al que pertenecen los
smbolos.

e) EXITM: Sirve para que no se ensamblen ms sentencias de la macro (se usa dentro de bloques

condicionales).
3.- Escriba dos macros para leer e imprimir cadenas:
( 5PROC
puntos
LEERCAD
FAR )
IMPRIE MACRO MEN
LEA DX,MEN
MOV AH,09H
INT 21H
ENDM

CADENA MACRO CADE


LEA DX,CADE
MOV SI,DX
MOV BYTE PTR[SI],20
MOV SI,0
MOV AH,0AH
INT 21H
ENDM

MOV SI,DX
MOV byte PTR[SI],20
MOV AH,0AH
INT 21H
;
RET
LeerCad ENDP
ESCRCAD PROC FAR
MOV SI,DX
ADD DX,2
MOV BL,byte PTR[SI+1]
MOV BH,0
MOV byte PTR[SI+BX+2],"$"
MOV AH,09H
INT 21H
;
RET
ESCRCAD ENDP

4- Escriba una macro que calcule el numero de caracteres que forman una cadena. Asuma
que la cadena termina con el carcter 0 (no se cuenta) y que consta a lo sumo de 254
caracteres:
( 5 puntos )
;MACRO para usar la int 21H..
DosInt MACRO funcion
MOV AH,funcion
INT 21H
ENDM
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;MACRO que Captura Numero de Caracteres..
CapCar MACRO
LOCAL leer,incrementar,salida
;MOV cl,0
;MOV ncc,cl
leer:
DosInt 01h
CMP AL,"0"
JNE incrementar
JMP salida
incrementar:
INC ncc
JMP leer
salida:
MOV DX,OFFSET salto
DosInt 09h
;
MOV DX,OFFSET msgncc
DosInt 09H
mov al, ncc
mov ah,
call NUM_CAD
MOV DX,OFFSET pcadena
DosInt 09H

codigo SEGMENT
ASSUME DS:datos,CS:codigo,SS:pila
NUM_CAD PROC
MOV CX,0
OTRA_VEZ:
MOV DX,0
DIV TEN
ADD DL,"0"
PUSH DX
INC CX
CMP AX,0
JE LISTO
JMP OTRA_VEZ
LISTO:
MOV DX,OFFSET pcadena
MOV SI,DX
DE_NUEVO:
CMP CX,0
JE PREPARADO
POP AX
MOV [SI],AL
INC SI
DEC CX
JMP DE_NUEVO
PREPARADO:
MOV BYTE PTR[SI],"$"
RET
NUM_CAD ENDP
inicio:

ENDM
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

MOV AX,datos
MOV DS,AX
;
MOV DX,OFFSET msging
DosInt 09H
;
CapCar
;
MOV DX,OFFSET msgcom
DosInt 09H
;
JMP salir

;*****************************************
;********************
pila SEGMENT stack
DB 64 DUP("pila")
pila ENDS
;********************
;
***************************************************
**
datos SEGMENT
msging DB "Ingrese Cadena: ","$"
pcadena DB 254 DUP(?)
msgncc DB "La Cadena cuenta con: ","$"
ncc DB 0

salir:
;DosInt 01H
DosInt 4CH
codigo ENDS
;**************************************

5.- Escriba un procedimiento que borre la pantalla e imprima un marco rectangular formado
por * con extremos en (5,5) y ( 65, 20).
( 4 puntos )

;****Modulo PRUEBA.ASM****
extrn _borrar:far, _cursor:far
cursor macro columna,fila
mov ax,columna
push ax
mov ax,fila
push ax
call _cursor
endm
asterisco macro
mov dl,42
mov ah,02h
int 21h
endm

paso1:
cursor curs1,curs2
asterisco
inc curs1
cmp curs1,65 ; incremente la columna o
imprime toda la fila
JNE paso1
mov curs1,5
inc curs2
JMP paso2

pila segment stack


db 80 dup(?)
pila ends
;-------------------------datos segment

inc curs2
cmp curs2,20
JNE paso2
mov curs1, 5
mov curs2, 20
JMP paso3
paso3:
cursor curs1,curs2
asterisco
inc curs1
cmp curs1,65
jne paso3
mov curs1, 65
mov curs2,5
JMP paso4
paso4:
cursor curs1,curs2
asterisco
INC CURS2
cmp curs2,20
JNE paso4

curs1 dw 5
curs2 dw 5
datos ends
;--------------------------------------------------------codigo segment
assume cs:codigo, ds:datos
inicio:
mov ax,datos
mov ds,ax
call _borrar

paso2:
cursor curs1,curs2
asterisco

cursor 5,23
FIN:
mov ah,4ch
int 21h

Das könnte Ihnen auch gefallen