You are on page 1of 8

INSTITUTO TECNOLÓGICO DE NUEVO LAREDO

ING. EN SISTEMAS COMPUTACIONALES

MATERIA: UNIDAD: PRÁCTICA:


Lenguajes de Interfaz 2 8

NOMBRE DE LA PRÁCTICA: Ciclos

OBJETIVO: Utilizar las Instrucciones de Transferencia de Control y Ciclos para solución de


problemas.
MATERIAL Y EQUIPO NECESARIO:
 Computadora personal IBM o compatible
 Con cualquiera de los siguientes sistemas operativos
o DOS
o Windows 3.11
o Windows 9x (95 o 98)
o Windows 2000
o Windows XP ó en Windows 7 usar una maquina virtual en Modo XP
 Instalado el programa DEBUG.EXE
 Instalado el programa TASM.EXE y TLINK.EXE

Introducción:

Las instrucciones de Transferencia de Control, modifican la trayectoria de


ejecución basada en los valores de las banderas afectadas por las operaciones
realizadas previamente.

Correlación con los temas y subtemas del programa de estudio


vigente:

1.8 Desplegado de mensajes en el monitor


2.1 Ensamblador (y ligador) a utilizar
2.2 Ciclos numéricos
2.4 Comparación y prueba
2.5 Saltos
2.6 Ciclos condicionales
2.7 Incremento y decremento
2.13 Desplazamiento y rotación

Página 1 Práctica No. 8 Ciclos


Teoría:
Las instrucciones de transferencia de control son usadas para mandar el
programa a ejecutarse en una diferente sección del programa.

+-
¦ Instrucciones JUMP
<
¦ Instrucciones CALL
+-

Instrucciones jump (brincar). transfiere el control a la localidad nombrada sin


guardar dirección de retorno.
Instrucciones call (llamada) involucra una subrutina.
Las instrucciones jump permiten a la computadora pensar. Las instrucciones
condicionales pueden probar el resultado de una operación previa, y modificar
el flujo del programa basado en este resultado. Si las instrucciones jump
condicional no existieran, los programas de computadora serían mucho más
simples, pero también mucho menos productivos.
Una instrucción jump modifica el apuntador de instrucciones (IP) y
posiblemente el registro del segmento de código (CS). Estos registros indican la
siguiente instrucción a ser ejecutada.
Si la instrucción contiene la dirección del blanco del jump o call como parte de la
instrucción (como el dato en una instrucción inmediata), este es un jump
directo. Si la instrucción tiene la dirección en un registro o localidad de memoria,
este es un jump indirecto, entonces la instrucción requiere traer la dirección
buscada de alguna localidad intermedia. El programa no puede tomar la rama
directamente a localidad deseada, pero debe ir ahí indirectamente.
Cuando hay un jump directo a la localidad cercana como 127 bytes hacia
adelante o 128 bytes hacia atrás dentro del programa la computadora hace un
jump relativo.
Una instrucción incondicional es una que transfiere el control cada vez que esta
se ejecuta. En contraste una instrucción condicional prueba el estado corriente
de la máquina para determinar si se transfiere o no el control.
Todas las instrucciones call son incondicionales:
+-----------+
CALL ¦ 109 ¦ -- +
+-----------+ + --- Dirección
+-----------+ ¦
JMP ¦ 140 ¦ -- +
+-----------+
Instrucción return (regreso de una subrutina)

RET
Página 2 Práctica No. 8 Ciclos
Jumps Condicionales
+---
¦ 1. Prueba Banderas
<
¦ 2. Prueba Loops
+--

Prueba banderas. Prueba el resultado de una operación aritmética o lógica


previa.
Prueba de loop. Controla la interacción de una sección del código.
Todos los jump condicionales tienen un desplazamiento de un byte. Si un jump
condicional es a una localidad a más de 128 bytes, una diferente construcción
debe ser usada. Como un ejemplo suponer que el programa necesita ejecutar la
etiqueta zero si la bandera de cero es puesta. Esta etiqueta es de más de 128
bytes. El código para manejar esta ocurrencia se mira así:

JNZ CONTINUE
JMP ZERO

CONTINUE:
‘’
‘’
Instrucciones de lazo

V --------+
+-----------------------+ MOV CX,N ¦
¦COUNT<--No.REPETICIONES¦ BEGIN: ¨ --+ ¦
+-----------------------+ ¨ > CUERPO ¦
+------------> V ¨ --+ DEL LAZO ¦
¦ +-----------------------+ DEC CX ¦
¦ ¦ CUERPO DEL LAZO ¦ JNZ BEGIN ¦
¦ +-----------------------+ --------+
¦ V MISMO RESULTADO FINAL
¦ +-----------------------+ --------+
¦ ¦ COUNT <-- COUNT - 1 ¦ MOV CX,N ¦
¦ +-----------------------+ BEGIN: ¨ --+ ¦
¦ ¦ ¨ > CUERPO ¦
¦ V ¨ --+ DEL LAZO ¦
¦ SI LOOP BEGIN ¦
+-------- COUNT ≠ 0 ? -------+

¦ NO
V

Página 3 Práctica No.8 Ciclos


+---
¦ Decremento
¦
Instrucciones loop < Prueba
simplifican el ¦
¦ Tomar la porción de la rama
+---

Modo de direccionamiento: Relativo


El operando debe estar en un rango de +127 a -128 ( relativo ) = 1 byte

CX <-- CX - 1 , si la condición de prueba es alcanzada entonces


IP <-- IP + operando

si la condición no es alcanzada IP no cambia.

Interrupciones del DOS


Para comprender mejor esta práctica veremos un ejemplo, donde utilizaremos Interrupciones del
DOS para interactuar con el teclado y el monitor.

Función PRINT STRING ------ Numero 09 Hexadecimal


Entre con:
Reg AH = 9
DS:DX = Dirección de inicio del string
Ejecute:
INT 21
Comentario: El string debe terminar con “$” (signo del dólar)

Capture el siguiente un programa en DEBUG:

Página 4 Práctica No.8 Ciclos


Para interactuar con el teclado.

Función de ENTRADA AL TECLADO ------ Numero 01 Hexadecimal


Entre con:
Reg AH = 1
Ejecute:
INT 21H
Regresa con:
Carácter tecleado en el registro AL.
Comentario:
CTRL BREAK causa salida de la función.

Capture el siguiente programa en DEBUG:

Puede observarse que el carácter ASCII de la A esta guardado


en el registro AL después de ejecutar la opción 1 del INT 21H.

Metodología:

En documento anexo, agregar la solución de cada problema en pseudocodigo,


incluyendo el diagrama de flujo correspondiente.

Sugerencias Didácticas:

Seleccionar problemas individuales a resolver para cada uno de los equipos de


trabajo a integrar en la clase y verificar junto con los equipos la ejecución del
programa paso por paso a fin de verificar.
Página 5 Práctica No.8 Ciclos
Procedimiento(Tareas) a realizar por los alumnos:

1.- Diseñe y compruebe un programa en ambiente DEBUG y TASM que


cuente del 0 al 9 en forma ascendente o descendente y como se indica, y
muestre en pantalla el conteo solicitado.

a). - Utilizando ciclos if-then (while ó do-while)

Pasos a mostrar al maestro:

1.1.- El dibujo del diagrama de flujo que cumpla con lo especificado,


indicando las partes del ciclo (condición inicial, proceso, incremento o
decremento y prueba).
1.2.- El listado de nemónicos (codificación en hexadecimal del *.com con
el DEBUG) con sus respectivas direcciones donde la codificación debe
coincidir con el diagrama de flujo y mostrar su ejecución desde DOS.
1.3.- El listado del programa *.asm con el EDIT y los pasos de
ensamblado (TASM y TLINK) donde la codificación debe coincidir con el
diagrama de flujo y mostrar su ejecución desde DOS.
1.4.- Reportar por escrito los programas realizados en la Computadora en
ambiente DEBUG y TASM, incluyendo resultados y conclusiones.

b). - Utilizando ciclos for-next

Pasos a mostrar al maestro:

1.5.- El dibujo del diagrama de flujo que cumpla con lo especificado,


indicando las partes del ciclo (condición inicial, proceso, incremento o
decremento y prueba).
1.6.- El listado de nemónicos (codificación en hexadecimal del *.com con
el DEBUG) con sus respectivas direcciones donde la codificación debe
coincidir con el diagrama de flujo y mostrar su ejecución desde DOS.
1.7.- El listado del programa *.asm con el EDIT y los pasos de
ensamblado (TASM y TLINK) donde la codificación debe coincidir con el
diagrama de flujo y mostrar su ejecución desde DOS.
1.8.- Reportar por escrito los programas realizados en la Computadora en
ambiente DEBUG y TASM, incluyendo resultados y conclusiones.

Página 6 Práctica No.8 Ciclos


a)
Mostrar en la pantalla el conteo de la siguiente manera:

b)

c)

Tips: 0D16 = Carriage Return y 0A16 = Line Feed

En informática y computación, el retorno de carro (CR, "carriage return") es uno de los


caracteres de control de la codificación ASCII, Unicode, o EBCDIC, que hace que una
impresora o pantalla de computadora mueva el cursor a la primera posición de una línea.
A veces se usa junto con el salto de línea (LF), que lo baja a la siguiente línea; es por
tanto una forma de hacer un salto de línea.

Página 7 Práctica No.8 Ciclos


2.- Realizar un programa en ambiente TASM que capture un carácter del teclado
y muestre una pantalla que incluya mensajes de la manera siguiente:

Grupos impares (muestre el código Hexadecimal de la tecla presionada):


Teclee el carácter a mostrar: A
Carácter = A = 41 en Hexadecimal

Grupos pares (muestre el código Binario de la tecla presionada):

Teclee el carácter a mostrar: A


Carácter = A = 0100 0001 en Binario

Tips:
Símbolo = es un 3D16 y el espacio en blanco es un 2016 .
Para capturar un carácter utilice la opción 1 del INT 21H (Regresa en AL el
carácter tecleado).
Para mostrar un letrero en pantalla utilice la opción 9 del INT 21H. .
Debe funcionar para números del 0 al 9 y los caracteres de la A a la Z.
Investigue cómo funcionan las instrucciones de corrimiento para aplicarlas
en esta práctica.

Pasos a mostrar al maestro:

2.1.- El diagrama de flujo de la conversión de ASCII a binario o a


hexadecimal (solamente esa parte).
2.2.- El listado del programa *.asm con el EDIT y los pasos de
ensamblado (TASM y TLINK) y su ejecución desde DOS.
2.3.- Reportar por escrito el programa realizado en la Computadora en
ambiente TASM, incluyendo resultados y conclusiones.

3.- Responda correctamente las siguientes preguntas:


3.1.- Los ciclos se repiten por ____________(verdadero/falso).
3.2.- Los saltos de las instrucciones condicionales usan lógica
______________ (booleana/dos complemento) para generar
la dirección física del brinco.
3.3.- Con el uso del TASM y el TLINK las etiquetas de dirección cambian
por localidades ___________ (físicas/virtuales).

Bibliografía:
Assembly Language Primer
for the IBM PC & XT
Robert Lafore
Plume/Waite Book

Página 8 Práctica No.8 Ciclos