Anda di halaman 1dari 15

Guía  1 


.
Instrucciones Aritméticas

Objetivo General

Analizar la forma en que se ejecutan algunas instrucciones aritméticas y de manejo de la


PILA.

Objetivos Específicos

Observar el uso de algunas instrucciones aritméticas y las banderas que


son afectadas.
Identificar las banderas que afecta cada instrucción observada.

Utilizar correctamente los registros del microprocesador al realizar


operaciones aritméticas, tanto de 8 bits como de 16 bits.
Analizar detenidamente el proceso de cada operación.

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​, note que al inicio se declaran los datos.

¿Con qué datos se realizarán las operaciones y cuales serán los resultados?

byte1 125 byte2 150 word1 20A3h word2 5938h


¿Dónde se almacena el resultado al final de las operaciones?
150+125=113 como es un bit será 13. 20A3+5938=79BD como son dos bits se guarda todo el
resultado.
Guía  2 

PRIMER PROGRAMA

#make_COM#
org 100h
INICIO byte1 equ 125
byte2 equ 150
word1 equ 20A3h
word2 equ 5938h

AL = byte1 mov al, byte1 ;suma de 2 números de 1 byte


AL = AL + byte2
add al, byte2
mov [011Eh], al
M[011Eh] = AL
mov ax, word1 ;suma de 2 números de 2 byte
AX = word1
add ax, word2
AX = AX +word2 mov [011Fh], ax

M[011Fh] = AX
ret
FIN END

4) Digite y emule el programa


g
5) Antes de ejecutar el programa tome nota del contenido almacenado en las
direcciones 011Eh, 011Fh y 0120h en la TABLA 1, también del estado de las
banderas.

6) Ejecute paso a paso el programa, anotando la información solicitada en la


TABLA 1, observando el resultado de las operaciones y el estado de las
banderas

¿Concuerda el resultado lo que usted esperaba? _______

MOMENTO DIRECCIONES BANDERAS


011Eh 011Fh 0120h O S Z A P C
Inicio 90 90 9 0 0 0 0 0 0 0

Después del 1ª suma 90 90 90 0 0 0 1 0 1


Antes de la 2ª suma 13 90 90 0 0 0 1 0 1
Después de la 2ª suma 13 90 90 0 0 0 1 0 1
Después del último MOV 13 DB 79 0 0 0 0 1 0
TABLA 1

la dirección para ver los datos en la memoria es [DS:011E] y su contenido es 90

7) Cargue nuevamente el programa e invierta manualmente el estado del


acarreo.

8) Ejecute paso a paso hasta la primera suma.


¿Cambió el resultado de la operacion? No , no cambio.

9) Continúe ejecutando el programa hasta la segunda


suma ¿Se dio algún cambio? _
Guía  3 

10)Modifique el código fuente sustituyendo las instrucciones ADD por ADC y
emule nuevamente el programa.
11) Repita desde el paso 7 y compare con los resultados previos.

¿Qué resultados se modificaron?, ¿qué parte no?, ¿por qué cree que se dieron esos
cambios específicos en los resultados?

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

12)Modifique el programa para que funcione como al inicio, pero cambie los
datos con los siguientes valores:

byte1 equ 9Dh


byte2 equ 83h
word1 equ 5938
word2 equ -5938

13)Corra a pasos el programa observando la ejecución de cada instrucción y el


estado de las banderas.

¿Cuál fue el resultado de las operaciones?, ¿Cómo reaccionaron las banderas? y ¿por qué
así y no de otra manera?

__________________________________________________________________

__________________________________________________________________

14)Analice el ​SEGUNDO PROGRAMA​, ¿dónde se almacena el resultado de las


operaciones? ¿cuál es el resultado de las mismas?

__________________________________________________________________

__________________________________________________________________

SEGUNDO PROGRAMA

#make_COM#
org 100h
byte1 equ 80
byte2 equ 69
word1 equ 26437
word2 equ 325
mov cl, byte1 ;resta de 2 números de 1 byte
sub cl, byte2
mov dx, word1 ;resta de 2 números de 2 byte

sub dx, word2


Guía  4 

INICIO END ret

CL = byte1

CL = CL + byte2

DX = word1

DX = DX - word2

FIN

15)Digite y emule el programa tomando nota del valor de los minuendos y


sustraendos (en formato hexadecimal) con que se realizarán las operaciones
en la TABLA 2.

16)Ejecute paso a paso el programa, observando los resultados de las


operaciones y el estado de las banderas. Anote estos valores en la TABLA 2.

17)Modifique el programa para que se invierta el orden de la operación, de


forma que el minuendo pasa a ser sustraendo y viceversa. Repita el paso
anterior tomando nota en la segunda fila de la TABLA 2.

18)Repita los pasos 16 y 17, pero esta vez active manualmente el acarreo
antes de cada resta ¿observa cambios en las operaciones?
19) Cambie el programa para que funcione como al principio.
20) Sustituya las instrucciones SUB por SBB y repita los pasos anteriores.

Complete la TABLA 2.
¿Qué diferencias nota entre la ejecución de la instrucción SUB y SBB?

__________________________________________________________________

__________________________________________________________________
Instrucción Prueba Minuendo Sustraendo Diferencia O S Z A P C
SUB 1º

SBB 3º

TABLA 2

21)Analice el ​TERCER PROGRAMA​ ¿qué registros están involucrados en el


proceso? ¿qué datos se van a operar? ¿dónde se almacenará el resultado?

__________________________________________________________________

__________________________________________________________________
Guía  5 

__________________________________________________________________

TERCER PROGRAMA

#make_COM#
INICIO
org 100h
INICIO: mov ah, 0AAh ;multiplica 2 números de 1 byte
AH = AAh

mov al, 0FFh


AL = 0FFh

CL = 06h mov cl, 06


mul cl
AX = (AL) X (CL)
ret
FIN END

22) Digite y emule el ​TERCER PROGRAMA

23) Ejecute paso a paso, analizando el proceso. Anote los resultados en la

primera fila de la TABLA 3


¿Coinciden los resultados con lo que esperaba?

__________________________________________________________________

Instrucción Dato Multiplicando Multiplicador Producto

06

MUL
-06

06

IMUL

-06

TABLA 3
Guía  6 

24)Modifique el dato de CL colocando -06 y ejecute nuevamente el programa.


Anote los resultados en la TABLA 3.

25) Cambien la instrucción MUL por IMUL y el dato -06 por 06.

26) Ejecute el programa y anote los resultados.

27) Cambie el dato por -06, ejecute nuevamente y anote los resultados

28)Analice el ​CUARTO PROGRAMA​ ¿qué registros están involucrados en el


proceso? ¿qué datos se van a operar? ¿dónde se almacenará el resultado?

__________________________________________________________________

__________________________________________________________________

29)Realice el mismo procedimiento del TRECER PROGRAMA, pero ahora el dato


que será cambiado es 05 y la operación DIV por IDIV. Anote sus resultados
en la TABLA 4.

CUARTO PROGRAMA

INICIO #make_COM#
org 100h
INICIO: mov ax, 123 ;multiplica 2 números de 1 byte
AX = 123

CL = 05 mov cl, 05 ;Dato

AH(res),AL(cos) = (AL) ​÷​ (CL) div cl


ret
FIN
END

Instrucción Dato Dividendo Divisor Cociente Residuo

05

DIV

-05
05

IDIV

-05

TABLA 4

30) Cambie el dato por 00h y ejecute el programa ¿qué ocurrió? ______
Guía  7 

Análisis de resultados
a) Primer programa

Tomando en cuenta los datos particulares de cada operación explique el porque de la


activación o desactivación de las banderas O, S, Z, C y A.

Explique porque los resultados de las operaciones cambiaron al usar ADC en lugar de
ADD. Utilice cálculos para fundamentar su explicación.

b) Segundo programa

Al ejecutar una resta las banderas C y A reaccionan diferente si el minuendo es mayor o


menor al sustraendo, explique el porque basándose en el concepto de préstamo.
Explique porque los resultados de las operaciones cambiaron al usar SBB en lugar
de SUB. Utilice cálculos para fundamentar su explicación.

c) Tercer programa

¿Cómo se especifica en una instrucción de multiplicación que se desea trabajar con


números de un byte?

En qué registros se almacenan los datos y el resultado de una multiplicación de un byte?

Explique porque los resultados de las operaciones cambiaron al usar IMUL en lugar de
MUL. Utilice cálculos para fundamentar su explicación.

d) Cuarto programa

¿Cómo se especifica en una instrucción de división que se desea trabajar con números de
un byte?
En qué registros se almacenan los datos y el resultado de una división de un byte?

Explique porque los resultados de las operaciones cambiaron al usar IDIV en lugar de
DIV. Utilice cálculos para fundamentar su explicación.
¿Por qué la última modificación del programa generó un error en la ejecución?

Investigación complementaria
Compare el funcionamiento de la directiva EQU con DB.

Investigue como se puede realizar una multiplicación de dos números de dos bytes
cada uno.
Investigue como se puede realizar una división de dos números de dos bytes cada uno.
Diseñe dos flujo-gramas que representen el proceso para sumar dos números de
4 bytes cada uno, en el primero se trabajará con registros de 16 bits y en el
segundo de 8 bits.

Bibliografía

Guia práctica de referencia:


www.udb.edu.sv/udb/archivo/guia/electronica-tecnologico/microprocesadores-(fet)/2013/ii/guia-1.pdf
Manual del programa emu8086 e ​Instalador del programa: ​www.emu8086.com
Martinez Durá, Rafael. ”Estructura de Computadores”. Ed. Rama.

Puede consultar el material en línea del EMU8086 sobre los temas de esta actividad. Se
recomiendan: “​Arithmetic and logic instructions​ ”,

www.emu8086.com/assembly_language_tutorial_assembler_reference/a sm_tutorial_06.html

Anda mungkin juga menyukai