Programa de Operaciones Aritméticas Básicas en assembler

13
; 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

description

Programa de Operaciones Aritméticas Básicas en assembler

Transcript of Programa de Operaciones Aritméticas Básicas en assembler

Page 1: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 2: Programa de Operaciones Aritméticas Básicas en assembler

; 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’

Page 3: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 4: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 5: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 6: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 7: Programa de Operaciones Aritméticas Básicas en assembler

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

Page 8: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 9: Programa de Operaciones Aritméticas Básicas en assembler

; 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

Page 10: Programa de Operaciones Aritméticas Básicas en assembler

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