Post on 06-Dec-2015
description
; Programa que lleva a cabo las operaciones aritméticas básicas entre los números 1 y 2 en lenguaje asambler
; La mayoría de las instrucciones en ensamblador trabajan con dos operandos, aunque hay instrucciones que
; funcionan solo con uno. El primero normalmente es el operando destino, que es el depósito del resultado de
; alguna operación; y el segundo es el operando fuente, que lleva el dato que será procesado. Los operandos se
; separan uno del otro por medio de una coma ",".
; Se hacen uso de los registros de propósito general
; ax registro acumulador – contiene 16 bit (ah 8 bits parte alta y al 8 bits parte baja)
; bx registro base – contiene 16 bit (bh 8 bits parte alta y bl 8 bits parte baja)
; dx registro de datos – contiene 16 bit (dh 8 bits parte alta y dl 8 bits parte baja)
; Definición del tipo y segmentos de memoria tanto de datos como de programa
; La directiva .model define el tipo de memoria que se utilizará y en este caso se utilizara small
.model small
; La directiva .stack le pide al ensamblador que reserve un espacio de memoria para las operaciones de la pila de
; datos
.stack 64
; Definición del segmento de datos (variables) donde se almacenará la información
; La directiva .DATA le indica al ensamblador que lo que está escrito a continuación debe almacenarlo en él ;segmento de memoria destinado a los datos.
.data
; Declaración de variables o espacios o registro de propósito especial utilizados en la memoria de datos
; Directivas que nos permite declarar un espacio en la memoria de datos para almacenar los números y los ;resultados de las operaciones aritméticas
; La directiva db es utilizada para definir bytes ósea asignarle a este espacio de memoria cierto identificador o un
; valor, ya sea una constante o una cadena de caracteres.
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el numero 1
numero1 db 0
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el numero 2
numero2 db 0
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el valor del resultado de la ;suma
suma db 0
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el valor del resultado de la ;resta
resta db 0
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el valor del resultado de la ;multiplicación
multiplicacion db 0
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el valor del resultado de la ;división
division db 0
; Directiva que nos permite declarar un espacio en la memoria de datos para almacenar el valor del resultado del ;modulo
modulo db 0
; Declaración en memoria de datos de los mensajes que se mostrarán en la ejecución del programa
; Para los mensajes se separan de 10 a 13 espacios
; En la definición de los mensajes el 10,13 nos indica que el mensaje se lee de derecha a izquierda
; Declaración del mensaje para que el usuario ingrese el primer número para realizar las operaciones
msgn1 db 10,13, "Ingresa el primer valor: ",'S'
; Declaración del mensaje para ingresar el segundo numero para realizar las operaciones
msgn2 db 10,13, "Ingresa el segundo valor: ",'S'
; Declaración del mensaje mostrar al usuario el resultado de la suma entre el numero uno y dos
msg1 db 10,13, "Suma= ",'S'
; Declaración del mensaje mostrar al usuario el resultado de la resta entre el numero uno y dos
msg2 db 10,13, "Resta= ",’S’
; Declaración del mensaje mostrar al usuario el resultado de la multiplicacion entre el numero uno y dos
msg3 db 10,13, "Multiplicacion= ",’S’
; Declaración del mensaje mostrar al usuario el resultado de la division entre el numero uno y dos
msg4 db 10,13, "Division= ",'S'
; Declaración del mensaje mostrar al usuario el resultado del módulo entre el numero uno y dos
msg5 db 10,13, "Modulo= ",'S'
; Definición o inicio del segmento de código del programa
; La directiva .code nos indica que lo que está a continuación es el código del programa como tal
.code
; Directiva promedio de la que se direccionan los datos del Programa
; El segmento de código contiene el código ejecutable de un programa. También tiene uno o más procedimientos,
; definidos con la directiva PROC, el operando far en este caso está relacionado con la ejecución del programa
; cuando se solicita la ejecución de un programa, el cargador de programas del DOS utiliza este nombre de procedimiento como el punto de entrada para la primera instrucción a ejecutar.
begin proc far
; Se coloca @data en el registro ax para después pasarlo al registro ds, ya que no se puede copiar directamente
; una constante a un registro de segmento. El contenido de @data es el número del segmento que será utilizado
; para la entrada o salida de los datos.
mov ax, @data
mov ds, ax
; Solicitar al usuario el ingreso del primer número
; Se debe de realizar la conversión del valor ingresado por el usuario ya que está en código ascci a hexadecimal o
; binario para que se puedan realizar las operaciones aritméticas con los valores reales
; Se utiliza la opción 9 (almacenada en el registro ah) de la interrupción 21h para desplegar la cadena posicionada
; en la dirección que contiene dx.
operación para desplegar la cadena
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah, 09
; La instrucción toma el mensaje para solicitar el número 1 y lo almacena en el registro dx
lea dx, msgn1
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la bios
int 21h
; La instrucción se utiliza para desplegar la cadena posicionada en la dirección que contiene el registro dx.
mov ah, 01
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la bios
int 21h
; La instrucción resta el numero 30 hexadecimal y resultado lo almacena el registro al para quitarle la parte alta al
; número 1 ingresado por el usuario
sub al, 30h
; La instrucción mueve o almacena el valor contenido en el registro al, el cual ya se encuentra en binario o
; hexadecimal al registro numero1 con el cual se realizaran las operaciones aritméticas finalmente
mov numero1, al
; Solicitar ingreso del segundo número
; Se utiliza la opción 9 (almacenada en el registro ah) de la interrupción 21h para desplegar la cadena posicionada
; en la dirección que contiene dx.
operación para desplegar la cadena
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah,09
; La instrucción toma el mensaje para solicitar el número 2 y lo almacena en el registro dx
lea dx, msgn1
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la bios
int 21h
; La instrucción se utiliza para desplegar la cadena posicionada en la dirección que contiene el registro dx.
mov ah,01
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la bios
int 21h
; La instrucción resta el numero 30 hexadecimal y resultado lo almacena el registro al para quitarle la parte alta al
; número 1 ingresado por el usuario
sub al, 30h
; La instrucción mueve o almacena el valor contenido en el registro al, el cual ya se encuentra en binario o
; hexadecimal al registro numero1 con el cual se realizaran las operaciones aritméticas finalmente
mov numero2, al
; Comenzamos las operaciones aritméticas
; suma
; La instrucción mueve o almacena el valor contenido en el registro numero1 al registro al para almacenarlo
; temporalmente y no alterarlo pero si tomarlo
mov al, numero1
; La instrucción suma el valor del numero1 almacenado en el registro al con el valor del numero2 y el resultado se
; almacena temporalmente en el registro al para no alterar el valor del numero2
add al, numero2
; La instrucción mueve o almacena el valor contenido en el registro al finalmente en el registro suma destinado para
; esto
mov suma, al
; resta
; La instrucción mueve o almacena el valor contenido en el registro numero1 al registro al para almacenarlo
; temporalmente y no alterarlo pero si tomarlo
mov al, numero1
; La instrucción resta el valor del numero1 almacenado en el registro al con el valor del numero2 y el resultado se
; almacena temporalmente en el registro al para no alterar el valor del numero2
sub al, numero2
; La instrucción mueve o almacena el valor contenido en el registro al finalmente en el registro resta destinado para
; esto
mov resta, al
; multiplicacion
; La instrucción mueve o almacena el valor contenido en el registro numero1 al registro al para almacenarlo
; temporalmente y no alterarlo pero si tomarlo
mov al, numero1
; La instrucción multiplica el valor del numero1 almacenado en el registro al con el valor del numero2 y el resultado
; se almacena temporalmente en el registro al para no alterar el valor del numero2
mul al, numero2
; La instrucción mueve o almacena el valor contenido en el registro al finalmente en el registro multiplicacion
; destinado para esto
mov multiplicacion, al
; division
; La instrucción mueve o almacena el valor contenido en el registro numero1 al registro al para almacenarlo
; temporalmente y no alterarlo pero si tomarlo
mov al, numero1
; La instrucción divide el valor del numero1 almacenado en el registro al con el valor del numero2 y el resultado
; se almacena temporalmente en el registro al para no alterar el valor del numero2
div al, numero2
; La instrucción mueve o almacena el valor contenido en el registro al finalmente en el registro division
; destinado para esto
mov division, al
; modulo
; La instrucción mueve o almacena el valor contenido en el registro numero1 al registro al para almacenarlo
; temporalmente y no alterarlo pero si tomarlo
mov al, numero1
; La instrucción divide el valor del numero2 y el numero1 almacenado en el registro al y el resultado
; se almacena en el registro numero2 para obtener el modulo
div numero2, ah
; La instrucción mueve o almacena el valor contenido en el registro al finalmente en el registro division
; destinado para esto
mov modulo, ah
; Instrucciones para mostrar los valores obtenidos de las operaciones aritméticas
; Se debe de realizar la conversión del valor obtenido en cada operación de binario o hexadecimal a ascci para poder mostrarla al usuario como caracteres numéricos
; Instrucciones para mostrar los mensajes en pantalla con el resultado de las operaciones suma, resta, multiplicación
; división y módulo
; Mensaje el resultado de la suma entre numero1 y numero2
; Se utiliza la opción 9 (almacenada en el registro ah) de la interrupción 21h para desplegar la cadena posicionada
; en la dirección que contiene dx.
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah, 09
; La instrucción toma el mensaje para mostrar el resultado de la suma y lo almacena en el registro dx
lea dx, msg1
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; La instrucción mueve o almacena el valor contenido en el registro suma al registro dl o parte baja de dx
mov dl, suma
; La instrucción le suma el valor hexadecimal 30 al registro dl para convertirlo a ASCII y el resultado de nuevo se
; almacena en dl
add dl, 30h
; La instrucción se utiliza para desplegar la cadena posicionada en la dirección que contiene el registro dl.
mov ah, 02
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; Mensaje el resultado de la resta entre numero1 y numero2
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah, 09
; La instrucción toma el mensaje para mostrar el resultado de la resta y lo almacena en el registro dx
lea dx, msg2
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; La instrucción mueve o almacena el valor contenido en el registro resta al registro dl o parte baja de dx
mov dl, resta
; La instrucción le suma el valor hexadecimal 30 al registro dl para convertirlo a ASCII y el resultado de nuevo se
; almacena en dl
add dl, 30h
; La instrucción se utiliza para desplegar la cadena posicionada en la dirección que contiene el registro dl.
mov ah, 02
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; Mensaje el resultado de la multiplicación entre numero1 y numero2
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah, 09
; La instrucción toma el mensaje para mostrar el resultado de la multiplicacion y lo almacena en el registro dx
lea dx, msg3
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; La instrucción mueve o almacena el valor contenido en el registro multiplicación al registro dl o parte baja de dx
mov dl, multiplicacion
; La instrucción le suma el valor hexadecimal 30 al registro dl para convertirlo a ASCII y el resultado de nuevo se
; almacena en dl
add dl, 30h
; La instrucción se utiliza para desplegar la cadena posicionada en la dirección que contiene el registro dl.
mov ah, 02
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; Mensaje el resultado de la división entre numero1 y numero2
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah, 09
; La instrucción toma el mensaje para mostrar el resultado de la división y lo almacena en el registro dx
lea dx, msg4
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; La instrucción mueve o almacena el valor contenido en el registro division al registro dl o parte baja de dx
mov dl, division
; La instrucción le suma el valor hexadecimal 30 al registro dl para convertirlo a ASCII y el resultado de nuevo se
; almacena en dl
add dl, 30h
; La instrucción se utiliza para desplegar la cadena posicionada en la dirección que contiene el registro dl.
mov ah, 02
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; Mensaje el resultado del módulo entre numero1 y numero2
; Instrucción utilizada para desplegar una cadena de caracteres
mov ah, 09
; La instrucción toma el mensaje para mostrar el resultado del módulo y lo almacena en el registro dx
lea dx, msg5
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; La instrucción mueve o almacena el valor contenido en el registro modulo al registro dl o parte baja de dx
mov dl, modulo
; La instrucción le suma el valor hexadecimal 30 al registro dl para convertirlo a ASCII y el resultado de nuevo se
; almacena en dl
add dl, 30h
; La instrucción se utiliza para desplegar la cadena al posicionar el cursor en la dirección que contiene el registro dl.
mov ah, 02
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; Instrucción utilizada para indicar finalización de las operaciones
mov ah, 4ch
; La instrucción se utiliza para la interrupción 21h que indica la realización del comando a la BIOS
int 21h
; La directiva ENDP indica el fin de un procedimiento y contiene el mismo nombre que el enunciado PROC para
; permitir que el ensamblador relacione a los dos. Ya que los procedimientos deben estar por completo dentro de
; un segmento, ENDP define el final de un procedimiento antes que ENDS defina el final de un segmento.
begin endp
; La instrucción end marca el final del programa.
end