Este documento presenta instrucciones para analizar operaciones aritméticas utilizando el simulador EMU8086. Instruye al estudiante a ejecutar programas que realizan sumas, restas, multiplicaciones y divisiones utilizando registros como AL, AH, AX y observando el estado de banderas. El estudiante debe completar tablas anotando resultados y analizar cómo las instrucciones ADD, SUB, MUL, DIV difieren de ADC, SBB, IMUL, IDIV al tomar en cuenta el signo de los números.
1. 3Guía
1
Instrucciones
Aritméticas
Facultad: Estudios Tecnologicos.
Escuela: Electrónica
Asignatura: Microprocesadores
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 cuáles serán los resultados? ¿Dónde
se almacena el resultado al final de las operaciones?
DATOS:
byte1 >> con el valor de 125
byte2 >> con el valor de 150
word1 >> con el valor 20A3h
word2 >> con el valor 5938h
OPERACIONES SUMA “ADD”
RESULTADO1 125 + 150 = 113 < pero como solo es de 1 bit saldrá “13” como
respuesta.
RESULTADO2 20A3 + 5938 = 79BD < saldrá todo el resultado por ser de 2 bits.
2. PRIMER PROGRAMA
INICIO
AL = byte1
AL = AL + byte2
M[011Eh] = AL
AX = word1
AX = AX +word2
M[011Fh] = AX
FIN
#make_COM#
org 100h
byte1
byte2
word1
word2
END
equ 125
equ 150
equ 20A3h
equ 5938h
mov al, byte1 ;suma de 2 números de 1 byte
add al, byte2
mov [011Eh], al
mov ax, word1 ;suma de 2 números de 2 byte
add ax, word2
mov [011Fh], ax
ret
4) Digite y emule el programa
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? SI
MOMENTO
DIRECCIONES BANDERAS
011Eh 011Fh 0120h O S Z A P C
Inicio 00 00 00 00 00 00 0 0 0 0 0 0
Después del 1ª suma 13 00 00 00 00 00 0 0 0 1 0 1
Antes de la 2ª suma 13 00 00 00 00 00 0 0 0 1 0 1
Después de la 2ª suma 13 00 DB 79 79 00 0 0 0 0 1 0
Después del último MOV 13 00 BD 79 79 00 0 0 0 0 1 0
TABLA 1
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 operación? NO
9) Continúe ejecutando el programa hasta la segunda suma
¿Se dio algún cambio? NO
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.
Ejecute paso a paso hasta la primera suma. ¿Cambió el resultado de la
operación? NO
Continúe ejecutando el programa hasta la segunda suma ¿Se dio algún cambio?
SI
4. ¿Qué resultados se modificaron?, ¿qué parte no?, ¿por qué cree que se dieron esos
cambios específicos en los resultados?
Banderas (flags), hasta la parte de la segunda adición,
6ta Rum.
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?
5. 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
byte2
word1
word2
equ 80
equ 69
equ 26437
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
6. INICI
O
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?
SUB Resta el operando fuente del destino.
Propósito: Substracción
SBB Esta instrucción resta los operandos y resta uno al resultado si CF está activada. El
operando fuente siempre se resta del destino.
Propósito: Substracción con acarreo
Instrucción Prueba Minuendo Sustraendo Diferencia O S Z A P C
SUB
1º
50 45 0B 0 0 0 1 0 0
6745 145 6600 0 0 0 0 1 0
2º
45 50 5F 0 1 0 0 1 1
145 6745 9A00 0 1 0 0 1 1
SBB
3º
50 45 0B 0 0 0 1 0 0
6745 145 6600 0 0 0 0 1 0
4º
45 50 5F 0 1 0 0 1 1
145 6745 9A00 0 1 0 1 1 1
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?
7. LOS REGISTROS SIGUIENTES:
AH, AL, CL
LOS DATOS QUE SE OPERAN
AL = 0FFh (FACTOR) CL = 06 (FACTOR)
SE ALMACENA EN AX. (05: FA)
TERCER PROGRAMA
INICIO
AH = AAh
AL = 0FFh
CL = 06h
AX = (AL) X (CL)
FIN
#make_COM#
org 100h
INICIO:
END
mov ah, 0AAh ;multiplica 2 números de 1 byte
mov al, 0FFh
mov cl, 06
mul cl
ret
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? SI en MUL y NO en IMUL
Instrucción Dato Multiplicando Multiplicador Producto
MUL
06 FF 06 05: FA
-06 FF -06 F9: 06
IMUL
06 FF 06 FF: FA
-06 FF -06 00: 06
TABLA 3
8. 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
AX = 123
CL = 05
AH(res),AL(cos) = (AL) ÷ (CL)
FIN
#make_COM#
org 100h
INICIO:
END
mov ax, 123 ;multiplica 2 números de 1 byte
mov cl, 05 ;Dato
div cl
ret
Instrucción Dato Dividendo Divisor Cociente Residuo
DIV
05 7B 05 18 3
-05 7B FB 00 7B
IDIV
05 7B 05 18 3
-05 7B FB E8 3
9. TABLA 4
30) Cambie el dato por 00h y ejecute el programa ¿qué ocurrió? Error
en la división entre 0
10. 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.
ADC
Propósito: Adición con acarreo.
Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la
bandera CF esté activada, esto es, en caso de que exista acarreo.
El resultado se guarda en el operando destino.
ADD
Propósito: Adición de los operandos.
Suma los dos operandos y guarda el resultado en el operando destino.
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.
SUB
Propósito: Substracción
Resta el operando fuente del destino.
SBB
Propósito: Substracción con acarreo
Esta instrucción resta los operandos y resta uno al resultado si CF está activada. El
operando fuente siempre se resta del destino.
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.
11. MUL
Propósito: Multiplicación sin signo
El ensamblador asume que el multiplicando sera del mismo tamaño que el del
multiplicador, por lo tanto multiplica el valor almacenado en el registro que se
le da como operando por el que se encuentre contenido en AH si el
multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits.
Cuando se realiza una multiplicación con valores de 8 bits el resultado se
almacena en el registro AX y cuando la multiplicación es con valores de 16
bits el resultado se almacena en el registro par DX:AX.
IMUL
Propósito: Multiplicación de dos enteros con signo.
Este comando hace lo mismo que el anterior, solo que si toma en cuenta los
signos de las cantidades que se multiplican.
Los resultados se guardan en los mismos registros que en la instrucción MUL.
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.
DIV
Propósito: División sin signo
El divisor puede ser un byte o palabra y es el operando que se le da a la
instrucción.
Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si
el divisor es de 16 bits se tomara como dividendo el registro par DX:AX,
tomando como palabra alta DX y como baja AX.
Si el divisor fué un byte el cociente se almacena en el registro AL y el residuo
en AH, si fué una palabra el cociente se guarda en AX y el residuo en DX.
IDIV
Propósito: División con signo
Consiste basicamente en lo mismo que la instrucción DIV, solo que esta última
realiza la operación con signo.
Para sus resultados utiliza los mismos registros que la instrucción DIV.
¿Por qué la última modificación del programa generó un error en la ejecución?
Por haberse divido entre “0”.
Investigación complementaria
12. 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
Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y
80486. Arquitectura, programación e interfaces, Prentice Hall, México DF, 1995
3
Biblioteca UDB 001.6404 B847 1997
13. Godfrey, T. Lenguaje Ensamblador para Microcomputadoras IBM : Para Principiantes y
Avanzados, Prentice Hall, México DF, 1991
1
Biblioteca UDB 005.136 G577 1991
Puede consultar el material en línea del EMU8086 sobre los temas de esta actividad. Se
recomiendan:
“Arithmetic and logic instructions ”,
http://www.emu8086.com/assembly_language_tutorial_assembler_reference/a
sm_tutorial_06.html