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

SISTEMAS DE COMPUTACIÓN II

Módulo I Creación de programas y procedimientos en Assembler

Unidad I Codificación y programación en Assembler

Trabajo práctico Requerido Nº 1 : Codificación y ejecución en Assembler

Presentación
Este trabajo tiene como propósito permitir que usted incorpore la estructura
básica de programación en assembler, conozca las instrucciones más
comunes, maneje los flags y se vincule con el hardware del computador. Se
trata de poner en práctica las “siete notas musicales”, para que pueda
combinarlas en estructuras más complejas luego.

Para alcanzar este objetivo usted deberá leer la bibliografía propuesta en el


orientador del aprendizaje correspondiente a la unidad 1. Y recordar
contenidos trabajados en Sistemas de Computación I, específicamente,
aquellos relacionados con el uso de programa Debug desarrollados, a partir de
las páginas 33 de la cuarta edición del libro “La PC por dentro” del profesor
Mario Ginzburg.

Consignas
Codifique y ejecute de la forma que usted crea más efectiva los programas
correspondientes a los ejercicios Nº 4, 6, 12, 14, 17, 23, 24, 27 del libro
“Assembler desde cero” 3ra edición mejorada”
Para su realización considere siguientes indicaciones:
Las direcciones del inicio del programa, la de los datos y su
valor, deben obtenerse a partir se su número de DNI.1 (tal
como usted lo realizó en los Trabajos Prácticos del Sistema
de Computación I). Es decir que si su documento es el
número 12.345.678, El área de datos debe comenzar en
1234h y el área de programa en 5678h. Esos números se

1
Cualquier duda acerca de la elección debe consultarse con el profesor, que dispondrá de una
lista con el DNI de cada alumno, a los efectos de verificar en el momento de la corrección de
los Trabajos Prácticos que cada alumno haya trabajo individualmente.

Sistemas de Computación II / Pág. 1


considerarán como si fueran expresados en hexadecimal,
pese a que se originan en números decimales.
El valor de la variable (contenido en CX, o CH, CL) -que
determina las veces que se hará un ciclo o loop- se elegirá 3
ó 4, para evitar tener que ejecutar dicho loop demasiadas
veces. Salvo que sea imprescindible respetar las iteraciones
requeridas en el enunciado.
Además de codificar cada ejercicio, debe realizar un
diagrama lógico de cada codificación en Assembler a
ejecutar, indicando en los “rombos” los flags a utilizar y su
valor. Para realizarlo usted puede efectuar un planteo de los
movimientos y/o operaciones a realizar como se ejemplifica
en las figuras 3.2, 3.4 ,3.5 ,3.18, etc. del libro Assembler
desde cero. Este esquema le facilitará tener una visión
integral de todos los pasos a codificar, y sí los numera, en
qué orden serán codificados en el diagrama lógico.

Por otro lado, para orientar la realización y presentación de este trabajo le


facilitamos la siguiente guía:
1. La codificación y ejecución de cada ejercicio los deberá presentar en
formato Word. Es por ello que deberá copiar la pantalla de Debug a un
documento Word u otro procesador de texto.2
2. Antes de la ejecución de cada programa, deberá determinar en un
borrador los valores que espera obtener en memoria como resultado de la
ejecución de dicho programa. Tenga en cuesta este punto porque luego
formará parte importante del Trabajo Práctico.

3. El programa Debug se utiliza de manera similar que en Sistemas de


Computación I. La única diferencia importante, consiste en que el
programa ahora se codifica mediante el comando A, y no con el comando
E.

Por tal razón, debe realizar la siguiente secuencia de comandos:

2
Forma de copiar una pantalla del Debug en el Word

1) Abrir un documento Word para realzar el trabajo paralelamente realizar el ejercicio solicitado en
el programa Debug.
2) Con el botón derecho del mouse hacer clic en la barra superior de la pantalla del DOS
3) Hacer clic en el botón izquierdo del mouse en Editar.
4) Hacer clic con el botón izquierdo en la opción “Seleccionar todo” y posicionar el mouse en el
margen superior izquierdo
5) Mover la flecha del mouse sobre dicho punto y presionar Enter, al realizarlo se dejará de ver lo
seleccionado.
6) Volver al documento creado en Word u otro procesador de texto y presionar las teclas Ctrl V para
copiar lo seleccionado en el punto anterior.

Sistemas de Computación II / Pág. 2


a. Comando E, para ingresar los datos elegidos (direcciones y valores
elegidos de su DNI).

b. Comando A, acompañado con la dirección inicial del programa para


editar el programa en Assembler (dirección inicial elegida del DNI),
cuya ultima instrucción de cada secuencia será INT 20. Por ejemplo, A
3000 si el programa inicia en la dirección 3000.

c. Comando U, acompañado con la dirección inicial del programa para


corroborar que el programa ha sido bien escrito.

d. Comando RIP, para que el IP apunte a la dirección de la primera


instrucción.

e. Comando R, para verificar que la primera instrucción a ejecutar sea la


correcta.

f. Sucesión de comandos T hasta que la próxima instrucción a ejecutar


sea INT 20, la cual no debe ser ejecutada, para evitar que se pierda
el programa editado en pantalla. Cada vez, que se hace un comando T
debe observar que los registros cambien de la forma esperada, y que la
próxima instrucción sea la correcta. Deberá identificar como cambian
los registros con flechas. Éstas pueden comenzar en: el número
(constante) que acompaña la instrucción, en otro registro, en memoria
o en la dirección indicada por Debug. Y terminar en el registro que la
instrucción ordeno que cambie (usted puede visualizar un ejemplo de
los solicitado en el ejercicio N°13 del libro de Asembler desde cero)

g. Antes de ejecutar una instrucción de salto se debe aclarar en el


documento del TP si el salto se va a producir o no en función del valor
que tengan los flags antes de dicha ejecución. Para ello deberá escribir
al lado de la instrucción de salto que tiro el debug si el valor de los
flags permiten o no que se produzca el salto. Además, deberá unir con
una flecha (generada con el dibujador del Word) el valor anterior del IP
con el nuevo valor luego de ejecutar la instrucción.

h. Asimismo, en las instrucciones de salto se deben resaltar el valor de los


flags intervinientes para el caso que se produzca el salto. Identifique
con un resaltador si existen la coincidencia, entre la dirección que se
quiere saltar (indicada en la instrucción de salto) y la dirección que le
sigue (indicada por el IP).

i. Una vez ejecutado el programa: Mediante el comando E, se deben


examinar los resultados obtenidos en memoria en las direcciones que
corresponda, éstos deben coincidir con los resultados esperados,
estimados en el paso 2.
Si esta verificación no es correcta debe encontrar la fuente de error y
realizarlo nuevamente.

Sistemas de Computación II / Pág. 3


j. En la presentación del TP deberá mostrar el desarrollo de la ejecución
del programa indicando gráficamente, cada vez, que un registro o flag
cambia de valor.

Criterios de corrección
En la corrección de este Trabajo Práctico, tendremos en cuenta los siguientes
criterios:
a. La claridad del Trabajo entregado y su encuadre en cuanto a
consignas de formato general.
b. La precisión de los resultados
c. La comprensión demostrada en la justificación de resultados y
pasos intermedios.
d. El cumplimiento del plazo previsto para su entrega.

Utilice estos criterios para anticiparse a los resultados de la evaluación.


Adecue su producción a los parámetros señalados. Si tiene dudas, consulte a
su tutor.

Sistemas de Computación II / Pág. 4


DNI: 37.686.885
Libro usado: Assembler Desde Zero – Mario Guinzburg 3ra Edición
Ejercicio 4

Sistemas de Computación II / Pág. 5


DIRECCIÓN VALOR
3768 03
3769 00
376A 04
376B 00
376C 0C
376D 00

Cargamos los datos:

Creamos el programa:

Sistemas de Computación II / Pág. 6


Ejecutar el programa:
La primera instrucción mueve al registro contador el contenido que haya en 376A:

Luego se mueve al registro base el contenido que haya en 3768:

Se limpia el registro acumulador (se lo vuelve 0 por las dudas de que tenga contenido):

Se le suma al registro acumulador el contenido del registro base:

Si hubo overflow se salta a la posición de memoria 6850:

Se le resta uno al registro contador:

Salta a la posición de memoria 688F si está apagado el bit de zero, para repetir la operación:

Sistemas de Computación II / Pág. 7


Vuelve a sumar al registro acumulador el registro base:

El registro acumulador ya tiene valor 6, y en caso de overflow salta a la memoria 6850:

Se le vuelve a restar uno al registro contador:

Salta a la posición de memoria 688F si está apagado el bit de zero, para repetir la operación:

Se le vuelve a sumar al registro acumulador el contenido del registro base:

En caso de overflow salta a la memoria 6850:

Sistemas de Computación II / Pág. 8


Se le vuelve a restar uno al registro contador:

Si no dio zero la operación vuelve a la memoria 688F para volver a sumar:

Se le suma al registro acumulador el contenido del registro base:

Si hubo overflow salta a la memoria 6850:

Se le vuelve a restar uno al registro contador:

Si la operación no dio zero, se vuelve a la memoria 688F:

Sistemas de Computación II / Pág. 9


Como la operación dio zero, sigue y ahora guarda en la memoria 376C lo que haya en el registro
acumulador:

Da por finalizado el programa:

Controlamos que el resultado de OK (3 + 3 + 3 + 3 = 12):

Sistemas de Computación II / Pág. 10


Ejercicio 6

DIRECCIÓN VALOR
3768 70
3769 90
376A D7
376B FF
3770 BC
3771 9A
3772 31
3773 00
377A 9

Sistemas de Computación II / Pág. 11


Cargando datos:

Cargando instrucciones:

Ejecutando el programa:

Sistemas de Computación II / Pág. 12


Finaliza el programa y comprobamos el resultado obtenido: 9

Sistemas de Computación II / Pág. 13


Ejercicio 12

DIRECCIÓN VALOR
3768 05
3769 00
376A 0A
376B 00
376C 0F
376D 00
1500 3
2000 0F

Sistemas de Computación II / Pág. 14


Cargamos los datos:

Cargamos el código:

Sistemas de Computación II / Pág. 15


Ejecutamos el programa:

Nos posicionamos donde comienza el código, movemos al registro contador la cantidad de números
(para repetir el bucle esa cantidad de veces), movemos el registro de índice la posición del primer
numero, y al registro contador el valor del primer numero. Lo comparamos:

En caso de ser mayor saltamos a la posición 6900 en caso de ser menor el numero comparado con el
registro AX (PARA NO PISARLO EN LA POSICION 6892). Luego salta a 6900 porque es mayor, suma al
registro índice para seguir el bucle y resta al registro contador:

Sistemas de Computación II / Pág. 16


Si el registro contador no es 0, vuelve a saltar a la posición 688E donde nuevamente compara el registro
acumulador con el numero siguiente. Si es menor, salta a 6900 para no pisarlo por el nuevo, pero como
es mayor sigue de largo y lo pisa.

Se le vuelve a sumar 2 al registro de índice para obtener el siguiente número, se le resta al registro
contador para ir decrementando el bucle y se vuelve a comprar con el nuevo número:

Sistemas de Computación II / Pág. 17


Con la instrucción JA se le dice que si es menor, salte a la posición 6900: como es mayor, no salta a esa
posición y sigue de largo, se pisa el número anterior de AX con el nuevo numero que hay en memoria, en
este caso F:

Con la última instrucción anterior JNZ intenta repetir el bucle si CL es distinto de 0, como es igual a 0
sigue y guarda en la posición de memoria 2000 el último numero obtenido, y finaliza el programa:

Sistemas de Computación II / Pág. 18


Controlamos el número obtenido en la posición 2000: F

Sistemas de Computación II / Pág. 19


Ejercicio 14:

DIRECCIÓN VALOR
3768 03
3769 D4
376A 00
3057 44
3058 00
3059 FF
305A 00
305B 17

1500 17
1501 02

1600 6E
1601 69

Sistemas de Computación II / Pág. 20


Cargando datos:

Codificando:

Sistemas de Computación II / Pág. 21


Ejercicio 17:

DIRECCIÓN VALOR
3768 33  33
3769 38  39
376A 39  30
3057 2E  2E
3058 37  30
3767 XX  30

Sistemas de Computación II / Pág. 22


Cargando datos:

Cargando código:

Ejecutando el programa:

Sistemas de Computación II / Pág. 23


Sistemas de Computación II / Pág. 24
Sistemas de Computación II / Pág. 25
Comprobando resultados:

Sistemas de Computación II / Pág. 26


Ejercicio 23

DIRECCIÓN VALOR
3768 1200
376A 2222
376C 500

Sistemas de Computación II / Pág. 27


Cargamos los datos:

Codificamos:

Sistemas de Computación II / Pág. 28


Ejecutamos el programa:

Sistemas de Computación II / Pág. 29


Sistemas de Computación II / Pág. 30
Sistemas de Computación II / Pág. 31
Ejercicio 24

DIRECCIÓN VALOR
3768 02
3769 48
376A 4F
376B 4C
376C 41
376D 03
1500 04

Sistemas de Computación II / Pág. 32


Cargamos los datos:

Codificando:

Ejecutando código:

Sistemas de Computación II / Pág. 33


Sistemas de Computación II / Pág. 34
Sistemas de Computación II / Pág. 35
Comprobando que hay 4 caracteres en el resultado:

Sistemas de Computación II / Pág. 36

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