You are on page 1of 11

Universidad Nacional de Ingeniería

Facultad de Electrotecnia y Computación

Ing. Electrónica

Maquinas Computadora I
Docente: Marlon Robleto

Elaborado por:

 Ricardo Gabriel Jarquín Anduray

 Luis Carlos Guevara Cerda

 Jocsan Haniel Castillo Carranza

Tema: Informe de laboratorio #2 “Instrucciones de Movimiento y aritméticas”

Grupo: 4T1-Eo

Fecha: Jueves 24 de Marzo del 2016


Tabla de contenidos

I. Introducción
II. Objetivos
III. Procedimiento
IV. Investigación complementaria
V. Conclusiones
VI. Recomendaciones
I. Introducción
Para el desarrollo de software de manera eficiente se requiere familiaridad con los modos
de direccionamientos utilizados por el 8086 y demás microprocesadores, para ello se
necesita el uso de la instrucción MOV, la cual es utilizada para describir los diferentes
modos de direccionamiento existentes, ya sea para mover datos tipo byte, palabra o doble
palabra (solo para microprocesadores de 32 bits), entre los distintos registros y memoria.
Otra conjunto de instrucciones que se deben de tener en cuenta son las instrucciones
aritméticas y lógicas la cuales son utilizadas por el 8086 las operaciones aritméticas básicas
son: la suma, resta, multiplicación, división, comparación, negación aritmética, incremento
y decremento. Mientras que las instrucciones lógicas incluyen AND, OR, OR exclusivo,
NOT, desplazamiento, rotación y comparación lógica (TEST).
Los primeros microprocesadores de 8 bits no podían multiplicar ni dividir sin un programa
que realizara estas operaciones mediante el empleo de una serie de desplazamientos y
sumas o restas sucesivas. Así que los microprocesadores de 16 bits empezaron a incluir las
instrucciones de multiplicación y división en vista de esta carencia.
El registro de bandera contiene un bit llamado acarreo el cual es modificado por los
resultados de las operaciones aritméticas y lógicas. Si el resultado de una operación de
suma es mayor que el máximo que puede ser representado por el sistema, entonces la
bandera de acarreo es puesta en 1 e indica que ha ocurrido un acarreo en la suma que acaba
de realizar. En la substracción, si el minuendo es menor que el substraendo, la bandera de
acarreo es también puesta en 1, con la diferencia que ahora indica que ha ocurrido un
préstamo en la anterior operación de resta. Estas características son utilizadas para realizar
operaciones con más de un byte.

II. Objetivos

• Familiarizarse con los modos de direccionamiento y el uso de la instrucción MOV


para el desplazamiento de datos.
• Conocer y utilizar correctamente las instrucciones aritméticas ADD, SUB, MUL,
DIV al momento de realizar operaciones aritméticas entre datos.
• Programar en ensamblador pequeños programas que lleven desplazamiento de datos
e instrucciones aritméticas.
• Comprender el uso del bit de acarreo en el registro de bandera.

III. Procedimiento
1. Se ejecutó el emulador de microprocesadores emu8086.

2. Se abrió un nuevo archivo, en la ventana de bienvenida seleccionando la opción


new

3. Se escribió en el IDE el código fuente en lenguaje ensamblador que se muestra a


continuación.

MOV AX, FFF1h


MOV BL, AL
MOV DL, 15h
ADD BL, DL
RET

4. Luego se copilo el código pero en este caso indica el error siguiente:


5. El error se debe a la que se está utilizando un direccionamiento inmediato y si el
numero hexadecimal que se desea guardar en el registro empieza con una letra debe
agregarse un cero a la izquierda como se ve en el siguiente código el cual ya está

arreglado:

6. Al ejecutar el programa paso a paso se pudo observar cómo cambian los registros,
en un principio todos se encuentran en cero como se ve en la siguiente imagen:

7. En la ejecución de cada instrucción cada registro empieza a tomar el valor deseado


utilizando la función MOV al final del programa los registros quedan de la
siguiente manera:
8. El programa es un código bastante sencillo mueve unos datos a los registros y
luego realiza una suma.

La primera instrucción hace un direccionamiento directo y guarda en el registro AX


que es un registro de 16 bits el número “FFF1h” que también es de 16bits.

La segunda instrucción guarda en el registro BL que es de 8 bits los datos en el


registro AL que son los primeros 8 bits del registro AX es decir el número “F1h”..

La tercera instrucción es nuevamente un direccionamiento directo pero ahora de 8


bits el cual guarda en el registro DL el número “15h”.

La cuarta instrucción es una operación aritmética el cual suma al registro BL el


dato en el registro DL es decir BL=BL+DL. Modificando únicamente al registro
BL mientras que el registro DL conserva su dato original.

Por último la instrucción RET Extrae una dirección de la pila y salta a ella. Además
de volver, restaura el registro de banderas.
9. Luego se volvió a ejecutar el programa paso a paso pero ahora para observar como
el registro de banderas es modificado al realizar una operación aritmética o lógica.

Luego de realizar la suma del registro BL con el registro DL dos banderas se activan como
se puede observar:
Los cuales son La bandera de acarreo que se activa cuando se produce acarreo en una suma
o multiplicación, en una resta entre números sin signo, en este caso como el resultado de la
suma es más de 8 bits se produjo un acarreo. Y La bandera de paridad se usa para indicar si
el resultado, en un registro, de una operación matemática es válido.
10. Luego se modificó el código para que en lugar de sumar los registros se restaran. El
código y el resultado de la resta se puede ver en la siguiente imagen.

Se puede observar al registro BL se le resta el valor de DL, dejando el dato del registro DL
sin modificar es decir BL=BL-DL.
Las banderas que se activaron al realizar las restas son las siguientes:
La bandera AF (de acarreo auxiliar) se utiliza en operaciones matemáticas con números
decimales codificados en binario (BCD). Se activa si hay acarreo presente.
La bandera SF (de signo) muestra el bit más significativo del resultado de una operación, el
cual denota el signo del número.
Si se modifica la instrucción SUB de la siguiente manera: SUB DL, BL ahora al registro
DL se le resta el dato del registro BL, es decir DL=DL-BL.
Al final de la ejecución del programa los registros y las banderas quedan de la siguiente
manera:

Donde se puede ver que la bandera de acarreo se activó pues que el sustraendo es mayor
que el minuendo.
IV. Investigación complementaria
Investigue las instrucciones de multiplicación y división y realice un ejemplo con cada una
de esas instrucciones.
Multiplicación
Antes de empezar a hablar de la multiplicación es necesario recordar que si se multiplican
dos números de 8 bits se genera un producto de doble anchura es decir de 16 bits.
La multiplicación puede ser de dos maneras entera sin signo usando la instrucción MUL y
la entera con signo usando la instrucción IMUL. Como se mencionó anteriormente la
operación de multiplicación afecta el registro de bandera, específicamente la bandera de
acarre y desbordamiento. La demás banderas se ven afectadas pero de manera
impredecibles por los cual no se utilizan.
Las operaciones de multiplicación básicas son byte a byte, palabra por palabra y palabras
dobles por palabra dobles (esta es exclusiva para microprocesadores de 32 bits).
Algo importante de destacar es que siempre el multiplicando debe encontrarse en el registro
AL en el caso de la multiplicación byte por byte ,en el registro AX para la multiplicación
palabra por palabra y en el registro EAX para la multiplicación de palabras dobles por
palabra dobles.
El resultado de la multiplicación se almacena de la siguiente:
Para la multiplicación de byte por byte:
El resultado se almacena en el registro AX
Para la multiplicación de palabra por palabra:
El resultado se almacena en ambos registro por ejemplo
MUL DX, el resultado se almacena en los registro de la siguiente manera DX-AX donde
los 8 bits más significativos se almacenan en DX.
Para la multiplicación de palabras dobles por palabra dobles:
El resultado se almacena en ambos registro por ejemplo
MUL EDX, el resultado se almacena en los registro de la siguiente manera EDX-EAX
donde los 16 bits más significativos se almacenan en EDX.

Código de ejemplo:
MOV AX, 0FFFFh
MOV DX, 0A2FFh
MUL DX
RET
Resultado de la simulación:
Se puede notar que las banderas de acarreo y desbordamiento
se han activado y los datos en los registros AX y DX han sido
cambiados, ahora se encuentra el resultado de la
multiplicación. Ordenado de la manera DX-AX es decir el
número resultante de la multiplicación es: A2FE5D01h.

División
Al igual que la multiplicación la división puede ser entera sin signo DIV o entera con signo
IDIV. El dividendo siempre es un dividendo del doble de anchura es decir para una división
de 8 bits el dividendo debe de ser de 16 bits. En la división ninguno de los bits de bandera
cambia de forma predecible. En la división pueden ocurrir dos tipos de errores: el primero
por tratar de dividir entre 0 y el otro por desbordamiento de división, este ocurre por dividir
un número pequeño entre un número grande.
División de 8 bits:
El dividendo de 16 bits se almacena en el registro AX y el divisor en cualquier otro registro
de 8 bits. El resultado se almacena de la siguiente manera, el cociente en el registro AL y el
residuo en AH.
División de 16 bits:
Ahora el dividendo de 32 bits se almacena en los registros DX-AX, y el divisor en
cualquier otro registro de 16 bits. El resultado se almacena de la siguiente manera, el
cociente en AX y el residuo en DX.

División de 32 bits:
Ahora el dividendo de 64 bits se almacena en los registros EDX-EAX, y el divisor en
cualquier otro registro de 32 bits. El resultado se almacena de la siguiente manera, el
cociente en EAX y el residuo en EDX.
Código de ejemplo:
MOV AX, 10AAh
MOV CL, 95h
DIV CL
RET
Resultado de la simulación:
Esta operación es una división de 8 bits se puede observar que el
programa carga el número 10AAh al registro AX este será el
Dividendo, y el registro CL contendrá el número 95h y será el divisor.
El cociente se guarda en AL y el residuo en AH por ello al final de la
ejecución AL=1Ch y AH= 5Eh.

V. Conclusiones

• Se logró tener una mejor comprensión de los modos de direccionamiento para


mover datos, especialmente el direccionamiento inmediato, también se aprendió
a utilizar los registros de 8 bits que son subregistros de los registros de 16 bits.
• Se hizo uso de las instrucciones para operaciones aritméticas, de tal manera de
hacer uso correcto de ellas al momento de hacer operaciones entre registros, el
algún programa.
• Las operaciones aritméticas afecta los registros de bandera, algunos de manera
predecible mientras que otros de manera impredecible en dependencia de la
operación aritmética que se esté utilizando.
• El resultado de la operación aritmética es almacenado de diferente manera
según la operación aritmética utilizada por ello se debe de tener mucho cuidado,
al realizar estas operaciones, se debe conocer que registro cambiaran y cuales
no para evitar problemas en el software.

VI. Bibliografía

Brey,Barry R(2006). Microprocesadores Intel 7ma edición. México: Pearson


educación.

You might also like