Instrucciones de Control de Flujo y Usos de la Pila

Guía Instrucciones de Control de Flujo y Usos de la Pila 4 Facultad: Estudios Tecnologicos. Escuela: Electrónica Asignatura: Microprocesadores Obj...
1 downloads 1 Views 279KB Size
Guía

Instrucciones de Control de Flujo y Usos de la Pila

4

Facultad: Estudios Tecnologicos. Escuela: Electrónica Asignatura: Microprocesadores

Objetivos Generales  

Analizar la forma en que se ejecutan algunas instrucciones de flujo de control y como se relacionan con las instrucciones de comparación. Aplicar la sección de memoria llamada PILA como un contenedor temporal de información.

Objetivos específicos     

Analizar el uso de algunas instrucciones de control de flujo, haciendo énfasis en las condiciones (estado de las banderas) que se necesitan para realizar o no el salto. Aplicar algunas instrucciones de control de flujo en la resolución de problemas simples como la realización de un lazo repetitivo y la comparación entre dos datos. Mostrar la manera de guardar y extraer información de la PILA. Usar la PILA como un dispositivo de almacenamiento temporal de datos. Analizar la relación que hay entre la PILA y el registro puntero de pila SP.

Materiales y equipos  

Guía de laboratorio Computadora PC con el programa EMU8086

Procedimiento 1) Ejecute el programa emulador de microprocesadores EMU8086, haciendo doble clic en el icono del escritorio. 2) Cree un nuevo documento tipo COM 3) Analice el PRIMER PROGRAMA, que se le presente y ayudado del flujo-grama y los comentarios que explican su funcionamiento. 4) Emule el programa. Antes de ejecutarlo copie, línea a línea, el programa desensamblado en la columna respectiva así como se muestra en el ejemplo. ¿Cuáles son las direcciones de las etiquetas INICIO y BUCLE? _____________________________________________________________________ 5) Localice la ubicación (direcciones) de la cadena Mem. Anote las direcciones y su contenido en la TABLA 1.

1

Guía

4

6) Ejecute paso a paso monitoreando los cambios que se dan en Mem. Al final anote el contenido final en TABLA 1. Momento

DIRECCIONES

Inicio Fin TABLA 1 7) Ejecute nuevamente el programa, contando las veces que se ejecuta la instrucción mov Mem[bx], al y monitoreando el registro de banderas, sobre todo antes y después de la operación de decremento ¿Cuántas veces se realizó la instrucción MOV? ______ ¿Qué causó el rompimiento del lazo de repetición? _______________________ 8) Modifique el código de manera que los cambios solo afecten a los elementos de la cadena. Cuando lo logre notifíquelo a su instructor. PRIMER PROGRAMA

INICIO

AL = 0FFh BX = 000Ah

#make_COM# org 100h INICIO: mov al,0FFh ;Dato mov bx,000Ah ;Contador BUCLE:

BX = BX - 1

jnz Bucle

BX = 00h

SI

MOV AL, 0FFH

mov mem[bx],al ;copia dato ;en men dec bx ;Decrementa BX

Mem[BX] = AL

NO

Programa desensamblado

;Repite si la ;bandera Z= 0

mem ret

FIN db 10 DUP ('x') ;Inicializa 10 ;espacios de ;memoria con ;carácter 78h END

Inicio

9) Emule el SEGUNDO PROGRAMA tomando nota del contenido inicial de las cadenas Fuente y Destino y el intervalo de direcciones donde están almacenadas. __________________________________________________________________ __________________________________________________________________

2

Guía

4

10) Ejecute paso a paso observando las modificaciones en las cadenas y las banderas. No pierda de vista el registro contador CX. 11) Anote el contenido final de la cadena Destino. __________________________________________________________________ __________________________________________________________________ 12) Ejecute nuevamente el programa y cuente las veces que se almacenan datos en la cadena Destino _______ ¿Cuál es la instrucción que hace el salto condicional? _________ ¿Qué causó el rompimiento del lazo de repetición? _______________________ SEGUNDO PROGRAMA

INICIO

#make_COM# org 100h INICIO: mov cx,10

;Contador

CX = 0010

xor si,si

SI = SI XOR SI

;Índice

BUCLE: AL = Fuente[SI]

mov al,fuente[si]

;Lee

Destino[SI] = AL

mov destin[si],al

;Escribe

inc si

SI = SI + 1

CX = CX - 1

NO

loop BUCLE ;Repite si CX no es 00h ;El decremento de CX esta ;implícito en la instrucción

CX = 00h

SI

FIN

FIN:

ret

fuente

db 48,49,50,51,52,53,54,55,56,57 ;datos

destino

db 10 DUP (4Dh)

;Destino 4Dh = ‘M’

END 13) Ahora analice el TERCER PROGRAMA, note que emplea instrucciones que cargan y extraen datos de la PILA. 14) Digite y guarde su programa. 15) Cierre el emulador.

3

Guía

4

16) Active nuevamente el emulador. Esto se hizo para borrar la memoria del emulador y que no interfieran los resultados anteriores con el nuevo programa. 17) Cargue el tercer programa y proceda a emularlo. 18) Visualice el contenido de la PILA (STACK) y el estado de las banderas. ¿Coincide la dirección indicada en la PILA con la combinación SegmentoDesplazamiento de SS:SP? ______ 19) Ejecute las primeras dos instrucciones. 20) Ejecute la tercera instrucción ¿qué cambios observó en los registros y la PILA? __________________________________________________________________ TERCER PROGRAMA #make_COM# INICIO org 100h SI = SI XOR SI

INICIO:

xor si,si

;Inicializa registro

clc ;C = 0 ;Inicializa banderas

C=0

pushf ;guarda banderas en la PILA

PILA = Banderas

BUCLE: popf ;saca banderas de la PILA

Banderas = PILA

mov al,dato1[si] ;carga dato en AL

AL = dato1[SI]

adc al,dato2[si] ;suma al mas dato2

AL = AL + dato2[SI] + C

mov resul[si],al ;guarda en resultado

resul[SI] = AL

pushf

PILA = Banderas

inc si ;incrementa SI

SI = SI + 1

cmp si, 02 jc BUCLE ;salte si C = 1

SI C=1

NO

popf ;saca banderas de la PILA

Banderas = PILA

mov al,0 ;Borra AL AL = 00h

adc al,0 ;Carga el acarreo en AL

AL = AL + ooh + C

mov Resul[si],al ;Último byte del resultado

resul[SI] = AL

FIN

numby

ret dw 0002

4

Guía dato1 dato2 resul END

4

db 0FFh, 0FFh dB 0FFh, 0FFh db 00, 00, 00

21) Ejecute la cuarta instrucción instrucciones ¿qué cambios observó? __________________________________________________________________ 22) El bloque de instrucciones siguiente realizará una operación aritmética ¿Cuál será el resultado de la operación? ______________ ¿Cuál será el estado de las banderas al ejecutarse la operación? ____________ ¿En qué dirección se almacena el resultado? ________ 23) Ejecute la siguiente instrucción ¿Qué dato se almacenó en la PILA?_______ ¿Cambió SP? ______ 24) Ejecute hasta antes de hacer la comparación ¿Cuál será el estado de las banderas? __________________________ 25) Verifique su hipótesis realizando la instrucción. 26) Antes de ejecutar JC ¿Se dará el salto o no? __________ 27) Verifique su hipótesis realizando la instrucción. ¿Se almacenaron datos en la PILA al ejecutar el salto? _______ 28) Ahora se repetirá el bloque aritmético. Responda nuevamente a las preguntas del punto 22, para la situación actual __________________________________________________________________ __________________________________________________________________ 29) Compruebe su predicción. 30) Ejecute la instrucción PUSHF ¿qué dato envío a la PILA? _________ 31) El siguiente bloque involucra al salto condicional otra vez ¿saltará de nuevo? ¿Por qué? __________________________________________________________________ __________________________________________________________________ 32) Compruébelo. 33) Continúe el proceso hasta el final ¿Cuál es el resultado de la operación? ________________ ¿Qué proceso realiza el programa? ______________________

5

Guía

4

34) Modifique el programa para que opere los siguientes datos y verifique su funcionamiento. a) 1050h + 3020h b) EDCB + 2010h c) 2590h + F550h

Análisis de resultados a) Primer programa. ¿Por qué la Instrucción mov Mem[bx], al es desensamblada como la instrucción MOV [BX] + 0010D, AL? ¿Cuántos datos contiene la cadena Mem? ¿Qué indica la directiva DUP? ¿Dónde se definió el número de veces que se ejecutaría el lazo? Si en el código inicial se cambia la segunda instrucción (mov bx,000Ah) para cargar un 0000h ¿el salto se ejecutaría inmediatamente? b) Segundo programa. ¿Cuál es la bandera que se evalúa para realizar el salto? Si se cambia el dato inicial de CX por 00h ¿qué ocurriría? c) Tercer programa. ¿Qué función cumple la instrucción CLC? ¿Qué información se gurda en la PILA al ejecutar PUSHF? ¿Qué relación hay entre los datos que se al maceran en la PILA y el estado de las banderas, durante la ejecución del programa? ¿Por qué es importante para el proceso del programa almacenar datos en la PILA? ¿Qué relación entre el dato en SP y las instrucciones PUSHF y POPF? ¿Qué ocurriría si las instrucciones PUSHF y POPF del programa se cambian por PUSH y POP respectivamente? ¿Cómo se relacionan los datos que se almacenan en la PILA y el estado de las banderas? Explique por lo menos un ejemplo que observo en su programa. Al realizar un salto ¿se almacena o extrae información de la PILA?

6

Guía

4

Investigación complementaria 

Analice el siguiente código y a continuación compare con el PRIMER PROGRAMA ¿Qué conclusiones obtiene de la comparación? #make_COM# org 100h Inicio:

INICIO

mov al,0FFh mov bx,000Ah ;Contador

AL = 0FFh BX = 000Ah

bucle: jz fin ;Salta si Z = 1 Z=0

mov Mem[bx-1],al

M[BX - 1] = AL

dec bx BX = BX - 1

jmp bucle

FIN

fin: Mem

ret db 10 DUP ('x') ;Zona de memoria

END Inicio   

Modifique el segundo programa para que maneje las bocales en mayúscula. Modifique el tercer programa para funcionar con LOOP en lugar de JC Usando las capacidades del 8086 escriba un programa que realice la misma función del tercer programa, pero sin saltos.

Bibliografía Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486. Arquitectura, programación e interfaces, Prentice Hall, México DF, 19953 Biblioteca UDB 001.6404 B847 1997 Puede consultar el material en línea del EMU8086 sobre los temas de esta actividad. Se recomiendan: 

“Program flow control” http://www.emu8086.com/assembly_language_tutorial_assembler_reference/a sm_tutorial_07.html

7

Suggest Documents