Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Nombre:
informtica Bsica
Tema:
Practica 2
Fecha: 06 de Febrero de 2013
RECURSOS:
Para implementar los ejercicios de programacin en lenguaje ensamblador se utilizarn las siguientes herramientas de software: Editor: Block de notas, EDIT / NE / cualquier otro que genere archivos ASCII. Ensamblador: TASM.EXE Enlazador: TLINK.EXE Software IDE: emu8086.exe
TEORIA. AAA
Aritmtica ASCII Adjust for Addition (Ajuste ASCII para suma): AAA cambia el contenido de AL a un nmero decimal no empacado valido con el nibble de alto orden en ceros. Banderas afectadas AF, CF, OF(no definida), SF(no definida), ZF(no definida), PF(no definida).
AAD
Aritmtica ASCII Adjust for Divisin (Ajuste ASCII para divisin): AAD multiplica el contenido de AH por 10, aade el resultado al contenido del AL y ubica dicho resultado en AL. Luego, la instruccin pone AH en 0. Esta instruccin se usa antes de dividir nmeros decimales no empacados.
Banderas afectadas: SF, ZF, PF, OF(no definida), AF(no definida), CF(no definida).
AAM
Aritmtica ASCII Adjust for Multiplication (Ajuste ASCII para multiplicacin): Despus de multiplicar dos nmeros decimales no empacados, se utiliza AAM a fin de corregir el resultado para un nmero decimal no empacado. Para que la instruccin trabaje adecuadamente, los nibbles de alto orden de cada nmero multiplicado deben ponerse en 0. Banderas afectadas SF, ZF, PF, OF(no definida), AF (no definida), CF (no definida).
AAS
Aritmtica ASCII Adjust for Subtraction (Ajuste ASCII para resta): AAS corrige el resultado de una resta decimal no empacada anterior, de tal forma que el valor en AL es un verdadero nmero decimal no empacado. Banderas afectadas AF, CF, OF(no definida), SF(no definida), ZF(no definida), PF(no definida).
DESARROLLO DE EJERCICIOS.
1) Abra el emu8086.
2) Revise la sintaxis de las instrucciones AAA, AAS y DAA en el simulador pulsando la tecla F1 y dando clic en el ttulo 8086 Instruction set.
Instruction
Operands
Description ASCII Adjust after Addition. Corrects result in AH and AL after addition when working with BCD values. It works according to the following Algorithm: if low nibble of AL > 9 or AF = 1 then: AL = AL + 6 AH = AH + 1 AF = 1 CF = 1 else AF = 0 CF = 0 in both cases: clear the high nibble of AL. Example: MOV AX, 15 ; AH = 00, AL = 0Fh AAA ; AH = 01, AL = 05 RET CZSOPA r ??? ? r
AAA
No operands
ASCII Adjust after Subtraction. Corrects result in AH and AL after subtraction when working with BCD values. Algorithm: if low nibble of AL > 9 or AF = 1 then: AL = AL - 6 AH = AH - 1 AF = 1 CF = 1 else AF = 0 CF = 0 in both cases: clear the high nibble of AL. Example: MOV AX, 02FFh ; AH = 02, AL = 0FFh AAS ; AH = 01, AL = 09 RET CZSOPA r ??? ? r
AAS
No operands
Decimal adjust After Addition. Corrects the result of addition of two packed BCD values. Algorithm: if low nibble of AL > 9 or AF = 1 then: AL = AL + 6 AF = 1 if AL > 9Fh or CF = 1 then: AL = AL + 60h CF = 1 Example: MOV AL, 0Fh ; AL = 0Fh (15) DAA ; AL = 15h RET CZSOPA r r r r r r
DAA
No operands
3) Minimice la ventana y regrese al emulador, en la barra de men seleccione ascii codes e identifique en la tabla de caracteres ASCII los nmeros en ASCII hexadecimal que les corresponde a los nmeros del 0 al 9 y antelos a continuacin (al dar clic en cualquier parte de la ventana puede intercambiar entre ver los datos ASCII en su correspondiente decimal o hexadecimal):
PROGRAMA 1
.model small .stack .data operando1 db 39h ; 39h codigo ascii del 9 decimal operando2 db 39h resultadoascii db 2 dup (?) ;reserva dos byte para el resultado .code Inicio: mov ax, @DATA ;indica donde estan los datos que se van a operar mov ds, ax mov ax,0 mov al,operando1 add al,operando2 aaa ;ajuste ascii despues de sumar 2 bytes ascii add ax,3030h
mov resultadoascii, ah mov resultadoascii+1,al ;---------------------------mov dl,resultadoascii mov ah,02h int 21h mov dl,resultadoascii+1 mov ah,02h int 21h ;---------------------------mov ax,4c00h int 21h end inicio
5) D clic sobre EMULATE y abra la ventana de variables (en el botn vars), debera visualizar 3 elementos: operando1, operando2 y resultadoascii, seleccione en las opciones de Show as de cada variable, la visualizacin ASCII, en la variable resultadoascii tambin cambie elements a 2.
6) Corra el programa paso a paso hasta antes de ejecutar la operacin AAA, observe el estado del acumulador y de las banderas, especialmente AF
7) Ejecute la instruccin de ajuste y observe el estado del acumulador (AX) y las banderas en este momento especialmente CF y AF
10) Modifique el programa anterior poniendo como operandos los nmeros 34h y 32h
11) Repita el procedimiento de los pasos 5 al 9 y describa las diferencias en los estados del acumulador y las banderas AF y CF: en el primer caso ax es 74 y en el 2 es 34, los correspondientes en ascci a los resultados, mientras que en AF en el primero es 1 y en el segundo es 0
PROGRAMA 2
.model small .stack .data operando1 db 36h ; 36h codigo ascii del 6 decimal operando2 db 32h resultadoascii db 2 dup (?) ;reserva dos byte para el resultado .code inicio: mov ax, @DATA ;indica donde estan los datos que se van a operar
mov ds, ax mov ax,0 mov al,operando1 sub al,operando2 aas add ax,3030h mov resultadoascii, ah mov resultadoascii +1, al ;---------------------------mov dl,resultadoascii mov ah,02h int 21h mov dl,resultadoascii+1 mov ah,02h int 21h ;---------------------------mov ax,4c00h int 21h end inicio
14) Corra el programa paso a paso hasta antes de ejecutar la operacin AAS, observe el estado del acumulador y de las banderas, especialmente AF y CF
15) Ejecute la instruccin de ajuste y observe el estado del acumulador y las banderas en este momento especialmente CF y AF
18) Cambie los operandos de modo que el operando2 sea mayor que operando1 y ejecute el programa por qu se da este resultado?
PROGRAMA 1
1- Para qu se realiza la instruccin ADD AX, 3030h? para agregar al operando un ajuste para que el cdigo ascci sea el correcto 2- En qu formato de decimal (empaquetado o no empaquetado) se da el resultado, despus del ajuste, en AAA? No empaquetado
PROGRAMA 2
1- En qu formato de decimal (empaquetado o no empaquetado) se da el resultado, despus del ajuste, en AX? No empacado 2- Cmo puede arreglarse el hecho de tener un resultado negativo en el programa y que no me afecte la presentacin del resultado en pantalla?
Investigacin Complementaria
Investigue Sobre las otras instrucciones de ajuste que tiene el microprocesador 8086: DAS, AAD y AAM
ADD
REG, memory memory, REG REG, REG memory, immediate REG, immediate
CZSOPA r r r r r r Decimal adjust After Subtraction. Corrects the result of subtraction of two packed BCD values. Algorithm: if low nibble of AL > 9 or AF = 1 then:
AL = AL - 6 AF = 1
DAS
No operands
AL = AL - 60h CF = 1
Example: MOV AL, 0FFh ; AL = 0FFh (-1) DAS ; AL = 99h, CF = 1 RET CZSOPA r r r r r r
ASCII Adjust after Multiplication. Corrects the result of multiplication of two BCD values. Algorithm:
AH = AL / 10 AL = remainder
AAM