Vous êtes sur la page 1sur 5

INSTITUTO TECNOLGICO DE MATEHUALA

CUESTIONARIO

Unidad 3 Modularizacion
Elabor: Castillo Juarez Oscar Hernandez Ortiz Cesar Juarez Tinajero Luis Eduardo Pedraza Eguia Simon Reyna Hernandez Juan Antonio Materia: Carrera: Grupo: Lenguaje Ensamblador Ingeniera en Sistemas Computacionales Sexto Semestre

Docente: Ing. Martn Luis Ledezma Hernndez

Unidad 3: Modularizacion Semestre: Enero-Junio 2011 Matehuala, S.L.P. Junio 2011

1.- Bajo que circunstancias recomendara el uso de macros? Cuando se quiere el cdigo ms rpido y no importa ser repetitivo (cdigo grande) y cuando se van a generar diversas variantes de cdigo similar 2.- Codifique la primera y la ultima linea para una macro sencilla llamada SETUP SETUP MACRO ; Define macro MOV AX, DATA ;cuerpo de MOV DS, AX ;la definicin MOV ES, AX ;de la macro ENDM 3.- Escriba las diferencias entre el cuerpo de una definicin de macro y la expansin de la macro En que el cuerpo de la definicin de la macro es donde se crea o se define la definicin o cuerpo de la macro y teniendo esto ya establecido, y la expansin de la macro son instrucciones generadas a partir de del cuerpo de la definicin de la macro, o sea, es cdigo objeto generado de instrucciones. 4.- Qu es un argumento mudo (ficticio)? Es la que indica al ensamblador que haga coincidir su nombre con cualquier aparicin del mismo nombre en el cuerpo de la macro 5.- Codifique los siguientes enunciados: (a) Suprima todas las instrucciones que genere una macro; (b) Liste solo las instrucciones que generan cdigo objeto 6.- Codifique dos definiciones de macro que realicen multiplicacin: (a)MULTBY es para generar cdigo que multiplique un byte por un byte; (b)MULTWD es para generar cdigo que multiplique una palabra por una palabra. Incluya multiplicandos y multiplicadores como argumentos mudos en la definicin de la macro. Pruebe la ejecucin de las macros con un pequeo programa que tambin defina los datos de campos necesarios. MULTBY MACRO clrf Result_L clrf Result_H movf Factor_B,F btfsc STATUS,Z return movf Factor_A,W ENDM 7.- Almacene las macros definidas en la pregunta 6 en una biblioteca de macros. Corrija el programa para incluir (INCLUDE) las entrada de la biblioteca durante la pasada 1 del ensamblador 8.- Escriba una macro llamada BIPRINT que use la INT 17H del Bios para imprimir. La macro debe incluir la prueba para el estado de la impresora y debe prever cualquier linea que se imprima con cualquier longitud. prnstr macro msg mov ah, 09h

lea dx, msg int 21h endm data segment msg1 db "Enter string to be printed : $" msg2 db 0dh, 0ah, "I/O Error or Paper out...$" msg3 db 0ah, "Printing string...$" buf db 80 db 0 db 80 dup(' ') data ends code segment assume cs:code, ds:data, es:data start : mov ax, data mov ds, ax mov es, ax prnstr msg1 mov ah, 0ah lea dx, buf int 21h mov si, offset buf + 2 mov ch, 00h mov cl, byte ptr [si-1] mov dx, 0000h again : mov ah, 02h int 17h test ah, 00101001b jz cont prnstr msg2 jmp again cont : mov ah, 00h mov dx, 0000h next : mov ah, 00h mov al, [si] int 17h inc si loop next mov ax, 4c00h

int 21h code ends end start 9.- Corrija la macro de la Figura 22-6 de modo que pase la divisin si el divisor es cero. ;****** Debemos declarar las variables primero, estas son: ;*************************************************** ;****** Factor_A ;****** Factor_B ;****** Result_H ;****** Result_L ;****** Dividendo_H ;****** Dividendo_L ;****** Divisor ;****** Cociente_H ;****** Cociente_L ;*************************************************** ;Se cargan Previamente en Factor_A y Factor_B los valores a multiplicar ;El resultado quedará almacenado en Result_H y Result_L Multiplicar clrf Result_L clrf Result_H movf Factor_B,F btfsc STATUS,Z return movf Factor_A,W Mult_Bucle addwf Result_L,F "B" btfsc STATUS,C incf Result_H,F decfsz Factor_B,F goto Mult_Bucle return ;borramos para inicializar ;Si es cero... ;En Caso que el Factor "B" Sea Cero ;volver con resultado= 0 ;cargamos el Factor "A" ;Sumamos "A", Tantas veces como sea ;Existe Acarreo?... ;...Si. Incrementamos el byte Mayor ;Terminó la Multiplicación?... ;... No, Seguimos haciendo sumas. ;Si. Volvemos a la rutina principal

;Se carga previamente en Dividendo_H y Dividendo_L el valor total del Dividendo ;y en Divisor el valor del divisor. El resultado quedará en Cociente_H y Cociente_L ;y el resto quedará en Dividendo_L

;(Nota: Dividendo_H y Dividendo_L serán borrados en el proceso de división) Dividir clrf Cociente_L clrf Cociente_H VerifDiv movfw Dividendo_H btfss STATUS,Z goto PuedeDividir movfw Divisor subwf Dividendo_L,W Dividendo... btfss STATUS,C return se realiza PuedeDividir incf Cociente_L,F btfsc STATUS,Z incf Cociente_H,F movfw Divisor subwf Dividendo_L,F divisor btfsc STATUS,C goto VerifDiv decf Dividendo_H,F alta del dividendo y... goto VerifDiv ;Si la parte alta del Dividendo... ;contiene algún valor... ;... Podemos dividir ;Si no es el caso... ;...Verificamos que la parte baja del ;...sea mayor que el divisor ;En caso de ser menor, la división no ;Aumentamos el valor del cociente bajo... ;...en caso de llegar al máximo... ;...aumentamos el cociente alto ;Cargo el valor del Divisor en W... ;...y le resto al dividendo el valor del ;Si el valor es positivo... ;...continuo con la división... ;...Si fue negativo decremento la parte ;...continuo con la división. ;Limpiamos el valor del resultado

Vous aimerez peut-être aussi