Вы находитесь на странице: 1из 5

INSTITUTO TECNOLGICO DE MATEHUALA

CUESTIONARIO UNIDAD 3
Elabor: ISCs

Jezrael Alejandro Vzquez Puente

Materia:

Lenguaje Ensamblador

Docente: Ing. Martn Luis Ledezma Hernndez Carrera: Grupo: Ingeniera en Sistemas Computacionales Sexto Semestre

Matehuala, S.L.P.

Marzo 2011

1.- Bajo qu 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 ltimalnea para una macro sencilla llamada SETUP SETUP MACRO MOVAX, DATA MOVDS, AX MOV ES, AX ENDM ; Define macro ; cuerpo de ;la definicin ;de la macro

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 clrfResult_L clrfResult_H movf Factor_B,F btfscSTATUS,Z return movfFactor_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 msg1db "Enter string to be printed : $" msg2db 0dh, 0ah, "I/O Error or Paper out...$" msg3db 0ah, "Printing string...$" bufdb 80 db 0 db 80 dup(' ') data ends code segment assumecs:code, ds:data, es:data start : mov ax, data mov ds, ax moves, ax prnstr msg1 mov ah, 0ah lea dx, buf int 21h movsi, offset buf + 2 movch, 00h mov cl, byte ptr [si-1] mov dx, 0000h again : mov ah, 02h int 17h test ah, 00101001b jzcont prnstr msg2 jmp again cont : mov ah, 00h mov dx, 0000h

next : mov ah, 00h mov al, [si] int 17h incsi 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 clrfResult_L;borramos para inicializar clrfResult_H movf Factor_B,F;Si es cero... btfscSTATUS,Z;En Caso que el Factor "B" Sea Cero return;volver con resultado= 0 movfFactor_A,W;cargamos el Factor "A" Mult_Bucle addwfResult_L,F;Sumamos "A", Tantas veces como sea "B" btfscSTATUS,C;Existe Acarreo?... incfResult_H,F;...Si. Incrementamos el byte Mayor decfszFactor_B,F;Terminó la Multiplicación?...

gotoMult_Bucle;... No, Seguimos haciendo sumas. return;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 clrfCociente_L;Limpiamos el valor del resultado clrfCociente_H VerifDiv movfwDividendo_H;Si la parte alta del Dividendo... btfssSTATUS,Z;contiene algún valor... gotoPuedeDividir;... Podemos dividir movfw Divisor ;Si no es el caso... subwfDividendo_L,W;...Verificamos que la parte baja del Dividendo... btfssSTATUS,C;...sea mayor que el divisor return;En caso de ser menor, la división no se realiza PuedeDividir incfCociente_L,F;Aumentamos el valor del cociente bajo... btfscSTATUS,Z;...en caso de llegar al máximo... incfCociente_H,F;...aumentamos el cociente alto movfw Divisor ;Cargo el valor del Divisor en W... subwfDividendo_L,F;...y le resto al dividendo el valor del divisor btfscSTATUS,C;Si el valor es positivo... gotoVerifDiv;...continuo con la división... decfDividendo_H,F;...Si fue negativo decremento la parte alta del dividendo y... gotoVerifDiv;...continuo con la división.

Вам также может понравиться