Sei sulla pagina 1di 6

Guía

3 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.4

OF. Indica un error producido durante las operaciones con signo. En la suma con signo igual o
una resta con signo opuesto producen un resultado que es más de 16 bits. O en la división
produce un cociente que es mayor al registro.

SF. Indica el signo en el dato vale uno cuando es negativo.


ZF. Este indica cuando la operación es 0 si el resultado son 0 este se activa.
CF. En la suma produce un acarreo y en la resta una acarreo negativo el valor es 1.
AF. Su valor es de uno cuando se produce un acarreo o acarreo negativo en el bit 3.

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

Al usar la instrucción ADD se omite el acarreo mientras que con la instrucción ADC se llama al acarreo
que lleva antes.

Mov al, 125 ;Mover 01111101 a AL

Add al, 150 ; sumar 01111101 + 10010110 = 00010011 (13h) con CF=1
Mov dl, 0 ; registro DL todos 0
Adc dl, 0 ; aca suma 00000000 + 00000000 + CF = 00000001 (01h)

; DL:AL (0113H) 00000001 00010011 = 275 resultado de 16 bit

Explicación

Al cargar los datos en los registros se da una operación de suma de binarios en un 8 bit al sumar
125+150 es igual a 275 esta suma en un binario de un byte es de espacio insuficiente es por eso que
se utiliza el acarreo al en este ejemplo el acarreo lo sumamos en el registro DL el cual suma 0 +0
+acarreo es igual 00000001(01h) así se puede obtener un número mayor a la suma de un dato
preciso con son de 1 byte que solo puede tener hasta 256.
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.

El CF se activa cuando el el minuendo es menor al sustraendo da un acarreo negativo para


poder es decir al restar los binarios 0 – 1 daria como resultado 1 mas acarreo 1.

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

En el ejemplo se puede ver como se restan dos datos en registros cuando el minuendo es mayor al
sustraendo no es muy difícil es caundo el sustraendo es mayor al minuendo donde vemos el problema

mov al, 0 ; movemos 0 a AL


mov bl, 1 ; movemos 1 a BL
sub bl, 5 ; aca resta 00000001 – 00000101 = 11111100 (FCh) con cf =1
sbb al, 0 ; aca resta 00000000 – 00000000 – acarreo = 11111111 (FFh)

AL:BL = 11111111 11111100 (FFFCh) = -4 resultado 16 bit

Explicación
Acá vemos que al substraer números mayores al sustraendo el acarreo es negativo es decir se presta
un bit para poder realizar la resta es por ende que al quitar un bit a una cadena byte este lo convierte
en signo negativo

c) Tercer programa
¿Cómo se especifica en una instrucción de multiplicación que se desea trabajar con
números de un byte?
Con el tipo de registro con el que se va a trabajar por ejemplo tenemos el registro AX que
contiene dos bytes AH y AL cada uno de 8 bit al decir que se va a multiplicar un dato de 8 bit
por otro de 8 bit se debe de dar espacio suficiente en el registro de 16 bit.

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


byte?

En un registro de 2 byte AX=AH*AL.

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

mov ah, 0
mov al, 01
mov cl, 02
mul cl

mov ah, 0
mov al, 01
mov cl, 02
imul cl

0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

En la operación MUL, IMUL al multiplicar datos positivos no tiene mucho cambio y


siempre se da el resultado en 2 bytes

mov ah, 0
mov al, 01
mov cl, -02
mul cl

mov ah, 0
mov al, 01
imov cl, -02
mul cl

0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

En la operación MUL IMUL con un dato negativo o una cifra con signo negativo esto
cambia ya que con MUL la multiplicación con un dato negativo este toma al dato
positivo en este caso 254 y lo multiplica por 1 mientras que con IMUL este toma en
cuenta el dato con el signo negativo y lo multiplica por 1 en este caso -2

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 una división de un byte el cociente se guarda o almacena en el registro AL mientras que el


residuo se almacena en el registro AH así tenemos.
AH(res),AL(coc) = (AL) ÷ (CL)

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


En el registro de AL se guarda dividendo y el divisor se almacena en CL

Explique porque los resultados de las operaciones cambiaron al usar IDIV en lugar de
DIV. Utilice cálculos para fundamentar su explicación.
Porque al igual que la multiplicación la operación o instrucción DIV, IDIV reconoce el símbolo
Al dividir un numero registrado en AL (1 byte) con el dato o divisor CL(1 byte) y ambos son de signo
positivo no abra ningún problema se realizara la división y se registrara el cociente en AL y el residuo
en AH.
Pero al momento de hacer la división con alguno de los componentes con signo o valor negativo en DIV
no reconoce este símbolo y lo toma como si fuera un número mayor donde el cociente es 0 y el residuo
es el mismo dividendo, por eso se utiliza IDIV donde reconoce el valor negativo y este es dividido
normalmente pero con el signo negativo.

¿Por qué la última modificación del programa generó un error en la ejecución?


Porque el dato es 0 cualquier numero dividido entre cero es inexistente o no se puede dividir entre 0

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

Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486.
3
Arquitectura, programación e interfaces, Prentice Hall, México DF, 1995
Biblioteca UDB 001.6404 B847 1997
Guía
3 8

Godfrey, T. Lenguaje Ensamblador para Microcomputadoras IBM : Para Principiantes y


1
Avanzados, Prentice Hall, México DF, 1991
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

Potrebbero piacerti anche