Está en la página 1de 7

Objetivos

•Conocer y aplicar las instrucciones aritméticas ADD, SUB, MUL, DIV para realizar
operaciones sencillas en datos binarios.
•Programar en ensamblador pequeños programas que lleven instrucciones aritméticas.
•Observar el cambio en el registro de banderas.
•Conocer y aplicar las instrucciones lógicas AND, OR, XOR y de desplazamiento para
la manipulación de bits.

Introducción

El lenguaje ensamblador es el sistema alfanumérico para escribir código máquina


mediante
expresiones abreviadas (mnemotécnicos).
La compilación es más complicada porque incluye la conversión de operaciones
matemáticas
complejas, comandos de lenguaje natural o tipos de comandos complejos.
Cada ordenador tiene su propio lenguaje ensamblador, exclusivo de su CPU; un
lenguaje de alto
nivel (LAN) puede ser compilado en distintas máquinas.
Es usado principalmente porque hay aplicaciones o programas que deben tratar
directamente con los
registros de la máquina, la memoria, dispositivos de E/S, etc.

Desarrollo

Se procede iniciando el simulador emu8086, el laboratorio indica que debe correr el


siguiente programa:

mov ax,num1 ; copia el sumando 5689h en AX


mov bx,num2 ; copia el sumando 05FEh en BX
add bx,ax ; realiza la suma de los dos operandos y el resultado queda en bx.
hlt
num1 dw 5689h
num2 dw 05FEh
se procede a compilar y simular
Y en la guía se encuentra la pregunta: ¿Trabajó el programa conforme se requería?
La respuesta es que si, dado que suma dos números de 16 bits cuyo resultado lo
almacena en bx, además el resultado es correcto ya que si es necesario se puede
verificar manualmente realizando la suma hexadecimal.
Luego se pide que se realicen las modificaciones a este programa para que sumes dos
números de 16 bits guardados en las localizaciones de memoria con offset de 0256h y
0258h. En este punto solamente es necesario sustituir las variables num1 y num2 por
las respectivas localizaciones de memoria, el programa entonces queda de la siguiente
manera:
mov ax, [0256h]; copia el sumando 5689h en AX
mov bx, [0258h]; copia el sumando 05FEh en BX
add bx,ax ; realiza la suma de los dos operandos y el resultado queda en bx.
hlt
[0256h] dw 5689h
[0258h] dw 05FEh

Se puede apreciar que realiza la misma operacion que con el codigo anterior,
brindando como resultado el numero hexadecimal 5C87 almacenado en Bx.
A continuación se muestra un programa que desplaza 1 bit a la izquierda 3 números de
8 bits que se encuentran en las localizaciones de memoria consecutivas a partir de la
memoria con offset 1033h. Los datos son los siguientes:

Localidad 1033h 1034h 1035h


de memoria
Dato 04h 05h 10h

Mov al,[1033h]; copia en al el primer dato


sal al,1; desplaza a la izquierda el dato
Mov [1033h],al; copia en la localización de memoria 1033h el nuevo valor
Mov dl,[1034h]; copia en dl el segundo dato
sal dl,1; rota a la izquierda el segundo dato
Mov [1034h],dl;copia en la localidad de memoria 1034h el nuevo valor
Mov al,[1035h]; copia en al el tercer dato
sal al,1; rota a la izquierda el tercer dato
Mov [1035h],al; copia en la localidad de memoria 1035h el nuevo valor
Hlt
[1033h] db 04h
[1034h] db 05h
[1035h] db 10h

Se pide que se corra paso a paso el programa y se observe como cambian los
registros. Observe los nuevos valores que calculó el programa que se encuentran
guardados en las mismas localizaciones de memoria de los datos originales. ¿A qué
operación aritmética es equivalente la instrucción lógica de desplazamiento a la
izquierda?
Al inicio todas las banderas se encuentran en 0 a excepción de IF
Luego en la instrucción Mov [1034h],dl;copia en la localidad de memoria 1034h el
nuevo valor
PF cambia a 1
Pero al terminar la emulación todas las banderas regresan a 0 a excepción de IF.

La operación es equivalente a multiplicar por 2 el valor del operando destino tantas


veces como indica el operando fuente.
SAL destino, fuente
Operación
destino = destino * 2N, donde N es el valor del operando fuente

Luego se pide que se modifique ahora el programa cambiando todas las instrucciones
de desplazamiento a la izquierda por desplazamientos a la derecha. Observe los
cambios en los valores e indique a que operación aritmética es equivalente la
instrucción de desplazamiento a la derecha.

Para realizar los desplazamientos hacia la derecha solo basta cambiar todas las
instrucciones sal por sar, como se muestra a continuación
Mov al,[1033h]; copia en al el primer dato
sar al,1; desplaza a la derecha el dato
Mov [1033h],al; copia en la localización de memoria 1033h el nuevo valor
Mov dl,[1034h]; copia en dl el segundo dato
sar dl,1; rota a la derecha el segundo dato
Mov [1034h],dl;copia en la localidad de memoria 1034h el nuevo valor
Mov al,[1035h]; copia en al el tercer dato
sar al,1; rota a la derecha el tercer dato
Mov [1035h],al; copia en la localidad de memoria 1035h el nuevo valor
Hlt
[1033h] db 04h
[1034h] db 05h
[1035h] db 10h

Observando las variables


La operación es equivalente a dividir por 2 el valor del operando destino tantas veces
como indica el operando fuente.
SAR destino, fuente
Operación
destino = destino/2N, donde N es el valor del operando fuente.
Por ultimo se solicita que se realice un programa que sume cuatro números de 16 bits y
la suma la divida entre 16 y el resultado lo guarde a partir de la localización de memoria
con offset de 1000h. Añada una instrucción lógica para invertir todos los bits del
resultado, que se guardaran en dos localizaciones de memoria consecutivas 10 bytes
después del último resultado guardado.
Dicho programa es:
Conclusión
Con esta practica de laboratorio se ha aprendido correctamente el uso de las
instrucciones sal, sar, y algunas operaciones aritméticas como add y div además de
adquirirse conocimientos del manejo de banderas y registros en el microprocesador
8086, reforzando de la misma manera los conocimientos aprendidos en el laboratorio
anterior sobretodo haciendo un mejor uso del software emu8086.

También podría gustarte