Você está na página 1de 10

PRÁCTICA 3

PROGRAMAS CON OPERACIONES


ARITMÉTICAS

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.

ITSON Manuel Domitsu Kono


26 Programas con Operaciones Aritméticas

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.
;**********************************************************

;****** CÓDIGO DE INICIO **********************************

ideal
dosseg
model small
stack 256

;****** VARIABLES DEL PROGRAMA ****************************

dataseg
codsal db 0
dato1 dw ?
dato2 dw ?
resul dw ?

;****** CÓDIGO DEL PROGRAMA *******************************

codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos

ITSON Manuel Domitsu Kono


Práctica 3 Programas con Operaciones Aritméticas 27

mov ax, [dato1] ; resul = dato1 + dato2


add ax, [dato2]
mov [resul], ax

salir:
mov ah, 04Ch
mov al, [codsal]
int 21h

;****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

2. Ensamble y ligue el programa anterior.

3. Cargue el programa Turbo Debugger tecleando:

td suma

4. Inicialice las variables dato1 y dato2 a los valores 6A85h y 32C7h, respectivamente.

5. Haga que la Ventana de Módulo sea la ventana activa, tecleando:

[Alt] n

donde n es el número de la ventana.

6. Posicione el cursor sobre la línea con la etiqueta salir:

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.

8. Anote en la tabla 3-1 el resultado de la suma y el estado de las banderas.

9. Presione [Ctrl][F2] para reinicializar el programa.

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.

ITSON Manuel Domitsu Kono


28 Programas con Operaciones Aritméticas

Tabla 3-1. Resultados del programa SUMA:ASM


Variables Banderas
Caso
dato1 dato2 Resul O S Z C
1 6A85h 32C7h
2 24h 0FFFAh
3 24h 0FF44h
4 0B4h 0FF4Ch

Tabla 3-2. Valores en decimal de las sumas del programa SUMA.ASM,


considerando dato1, dato2 y resul como variables no signadas
Variables Resultado ¿Coinciden resul y el
Caso
dato1 dato2 Resul esperado resultado esperado?

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.

ITSON Manuel Domitsu Kono


Práctica 3 Programas con Operaciones Aritméticas 29

Tabla 3-3. Valores en decimal de las sumas del programa SUMA.ASM,


considerando dato1, dato2 y resul como variables signadas
Variables Resultado ¿Coinciden resul y el
Caso
dato1 dato2 resul esperado resultado esperado?

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.
;**********************************************************

;****** CÓDIGO DE INICIO **********************************

ITSON Manuel Domitsu Kono


30 Programas con Operaciones Aritméticas

ideal
dosseg
model small
stack 256

;****** VARIABLES DEL PROGRAMA ****************************

dataseg
codsal db 0
dato1 dw ?
dato2 dw ?
resul dw ?

;****** CÓDIGO DEL PROGRAMA *******************************

codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos

mov ax, [dato1] ; resul = dato1 - dato2


sub ax, [dato2]
mov [resul], ax

salir:
mov ah, 04Ch
mov al, [codsal]
int 21h

;****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

19. Ensamble y ligue el programa anterior.

20. Cargue el programa Turbo Debugger tecleando:

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.

ITSON Manuel Domitsu Kono


Práctica 3 Programas con Operaciones Aritméticas 31

Tabla 3-4. Resultados del programa RESTA:ASM


Variables Banderas
Caso
dato1 dato2 Resul O S Z C
1 6A85h 32C7h
2 24h 0FFFAh
3 6A24h 8007h
4 0B4h 0B4h

Tabla 3-5. Valores en decimal de las restas del programa RESTA.ASM,


considerando dato1, dato2 y resul como variables no signadas
Variables Resultado ¿Coinciden resul y el
Caso
dato1 dato2 resul esperado resultado esperado?

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.

ITSON Manuel Domitsu Kono


32 Programas con Operaciones Aritméticas

Tabla 3-6. Valores en decimal de las restas del programa RESTA.ASM,


considerando dato1, dato2 y resul como variables signadas
Variables Resultado ¿Coinciden resul y el
Caso
dato1 dato2 resul esperado resultado esperado?

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:

ITSON Manuel Domitsu Kono


Práctica 3 Programas con Operaciones Aritméticas 33

;**********************************************************
; MULTI.ASM
;
; Este programa multiplica dos variables de un byte sin
; signo.
;**********************************************************

;****** CÓDIGO DE INICIO **********************************

ideal
dosseg
model small
stack 256

;****** VARIABLES DEL PROGRAMA ****************************

dataseg
codsal db 0
dato1 db ?
dato2 db ?
resul dw ?

;****** CÓDIGO DEL PROGRAMA *******************************

codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos

mov al, [dato1] ; resul = dato1 * dato2


mul [dato2]
mov [resul], ax

salir:
mov ah, 04Ch
mov al, [codsal]
int 21h

;****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

32. Ensamble y ligue el programa anterior.

33. Cargue el programa Turbo Debugger tecleando:

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.

ITSON Manuel Domitsu Kono


34 Programas con Operaciones Aritméticas

Tabla 3-5. Resultados del programa MULTI:ASM


Variables Banderas
Caso
dato1 dato2 resul O C
1 0Ah 12h
2 24h 1Fh

35. Para cada uno de los casos interprete los valores hexadecimales de las variables como decimales y
escríbalos en la tabla 3-6.

Tabla 3-6. Valores en decimal de las sumas del programa MULTI.ASM


Variables Resultado
Caso
dato1 dato2 resul esperado

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.

ITSON Manuel Domitsu Kono