Académique Documents
Professionnel Documents
Culture Documents
OBJETIVO
Al terminar esta práctica, el alumno será capaz de:
Comprender el uso de las instrucciones para realizar las operaciones aritméticas de enteros básicas y su
efecto en el registro de banderas.
ANTECEDENTES TEÓRICOS
Los conjuntos de números que podemos representar en una computadora, sólo representan un
subconjunto finito de los conjuntos de números que se tienen en matemáticas. Aunado a esto, el
microprocesador de una computadora sólo puede realizar un pequeño número de operaciones
aritméticas. De ser necesario extender el conjunto de operaciones o aumentar el rango de los números
con que éstas operan es necesario crear rutinas que realicen estas operaciones. Dichas rutinas se
basarán en las operaciones fundamentales que provee el microprocesador. Por esto debemos
comprender primero cómo trabajan las instrucciones que realizan las operaciones aritméticas básicas
que tiene un microprocesador, así como el rango de valores de los datos con los que operan y cómo
señalan las diferentes condiciones del resultado.
DESARROLLO
1. Use el editor de Turbo C para editar el siguiente programa en ensamblador y grábelo con el
nombre de SUMA.ASM:
;**********************************************************
; SUMA.ASM
;
; Este programa suma dos variables de tipo palabra.
;**********************************************************
ideal
dosseg
model small
stack 256
dataseg
codsal db 0
dato1 dw ?
dato2 dw ?
resul dw ?
codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos
salir:
mov ah, 04Ch
mov al, [codsal]
int 21h
end inicio
td suma
4. Inicialice las variables dato1 y dato2 a los valores 6A85h y 32C7h, respectivamente.
[Alt] n
7. Presione la tecla [F4]. Ésta es la tecla rápida para la opción Run/Goto cursor. Esto hará que el
programa se ejecute hasta la línea donde se encuentra el cursor, sin ejecutar la instrucción de esta
línea.
10. Repita los pasos 4 a 9 para los valores de las variables dato1 y dato2 mostrados en la tabla 3-1.
11. Las variables del programa SUMA.ASM pueden considerarse como no signadas o signadas.
Considere que las variables dato1, dato2 y resul son no signadas. Convierta los valores de las
variables dato1, dato2 y resul, para los cuatros casos de la tabla 3-1, a decimal y escríbalos en la
tabla 3-2.
12. Calcule, para cada uno de los cuatro casos, el resultado esperado de la suma de los valores
decimales de dato1 y dato2 y escríbalo en la penúltima columna de la tabla 3-2.
1
2
3
4
13. Compare, para cada uno de los cuatro casos, los valores de la variable result y del resultado
esperado e indique en la última columna si esos valores coinciden o no.
14. Note que en el caso 1 de la tabla 3-2, el resultado esperado coincide con el valor de result.
Observe, en la tabla 3-1, que para este caso, las banderas O y S están encendidas, lo que
aparentemente indicaría que hay un desbordamiento y que el resultado es negativo. Sin embargo
como las variables son no signadas, la información de estas banderas se ignora.
Analice los otros tres casos. Deduzca a partir de este análisis una regla, en función del estado de las
banderas, para determinar si el resultado del programa SUMA.ASM es correcto o no.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
15. Repita los pasos 11 a 13 pero considerando a las variables como signadas. Anote los resultados en
la tabla 3-3.
1
2
3
4
16. Observe en la tabla 3-3, que en el caso 1, el resultado esperado no coincide con el resultado
obtenido por el programa. En este caso la bandera O, de sobreflujo, sí debe tomarse en cuenta y
nos indica que el resultado del programa es incorrecto ya que la suma de dos números positivos no
da un resultado negativo. Analice los otros tres casos. Deduzca a partir de este análisis una regla, en
función del estado de las banderas, para determinar si el resultado del programa es correcto o no.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
17. Generalice, a partir de las reglas obtenidas en los pasos 14 y 16, una regla en función de las
banderas O y C para saber si el resultado obtenido por el programa SUMA.ASM es correcto,
tanto para datos signados como no signados.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
18. Use el editor de Turbo C para editar el siguiente programa en ensamblador y grábelo con el
nombre de RESTA.ASM:
;**********************************************************
; RESTA.ASM
;
; Este programa resta dos variables de tipo palabra.
;**********************************************************
ideal
dosseg
model small
stack 256
dataseg
codsal db 0
dato1 dw ?
dato2 dw ?
resul dw ?
codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos
salir:
mov ah, 04Ch
mov al, [codsal]
int 21h
end inicio
td resta
21. Ejecute el programa para los valores de las variables dato1 y dato2 mostrados en la tabla 3-4.
Anote en cada caso el resultado obtenido por el programa así como el estado de las banderas.
22. Considere las variables dato1, dato2 y resul de la tabla 3-4 como no signadas. Para cada uno de
los casos convierta los valores hexadecimales de las variables a decimales y escríbalos en la tabla
3-5.
23. Calcule, para cada uno de los cuatro casos, el resultado esperado de la resta de los valores
decimales de dato1 y dato2 y escríbalo en la penúltima columna de la tabla 3-5.
1
2
3
4
24. Compare, para cada uno de los cuatro casos, los valores de la variable result y del resultado
esperado e indique en la última columna si esos valores coinciden o no.
25. Deduzca a partir de este análisis una regla, en función del estado de las banderas, para determinar si
el resultado del programa RESTA.ASM es correcto o no.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
26. Repita los pasos 22 y 23 pero considerando a las variables como signadas. Anote los resultados en
la tabla 3-6.
27. Compare, para cada uno de los cuatro casos, los valores de la variable result y del resultado
esperado e indique en la última columna si esos valores coinciden o no.
1
2
3
4
28. Deduzca a partir de este análisis una regla, en función del estado de las banderas, para determinar si
el resultado del programa RESTA.ASM es correcto o no.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
29. Generalice, a partir de las reglas obtenidas en los pasos 25 y 28, una regla en función de las
banderas O y C para saber si el resultado obtenido por el programa RESTA.ASM es correcto,
tanto para datos signados como no signados.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
30. ¿Es posible generalizar las reglas obtenidas en los pasos 17 y 29, para saber si el resultado
obtenido por los programas SUMA.ASM y RESTA.ASM son correctos? Si sí, ¿cuál es la regla?
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
31. Use el editor de Turbo C para editar el siguiente programa en ensamblador y grábelo con el
nombre de MULTI.ASM:
;**********************************************************
; MULTI.ASM
;
; Este programa multiplica dos variables de un byte sin
; signo.
;**********************************************************
ideal
dosseg
model small
stack 256
dataseg
codsal db 0
dato1 db ?
dato2 db ?
resul dw ?
codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos
salir:
mov ah, 04Ch
mov al, [codsal]
int 21h
end inicio
td multi
34. Ejecute el programa para los valores de las variables dato1 y dato2 mostrados en la tabla 3-5.
Anote en cada caso el resultado obtenido por el programa así como el estado de las banderas.
35. Para cada uno de los casos interprete los valores hexadecimales de las variables como decimales y
escríbalos en la tabla 3-6.
1
2
36. Calcule el resultado de la multiplicación de los valores decimales de dato1 y dato2 y escríbalo en
la última columna de la tabla 3-6.
37. Observe que el resultado obtenido por el programa es correcto en ambos casos. Note que cuando
las banderas O y C son ambas cero, el resultado cabe en un byte y que si las banderas son ambas
uno el resultado requiere de la palabra completa.