Este sencillo ejemplo se trata de:
Ingresar dos números cualesquiera a la consola y la operación lógica que se desea realizar con ellos (<, = , >), por ejemplo: 3 > 2 y éste imprimirá como resultado un mensaje diciendo que la operación es verdadera en caso de serla, o falsa en caso de no serla. Esto se logra utilizando la instrucción CMP, que permite comparar dos operandos.
Veamos:
.MODEL Small ;modelo pequeño de compilación
.Stack 100h ;Segmento de pila: Pila 256 posiciones
cr equ 13 ;Declaración de Constante
lf equ 10 ;Declaración de constante
.DATA ;Comienzo del segmento de datos
titulo DB 10,13,'Operaciones logicas utilizando <,>,=',cr,lf,'$'
Descripcion DB 'comparaciones con dos numeros',cr,lf,'$'
line DB '------------',cr,lf,'$'
msg1 db "Ingresar primer numero ",10,13,"$"
msg db 10,13,"Ingresar operacion logica a realizar (<, >, = ) ",10,13,"$"
msg2 db 10,13,"Ingresar segundo numero ",10,13,"$"
msg3 db 10,13,"-----------------",10,13,"$"
msg4 db 10,13,"La Operacion es falsa ",10,13,"$"
msg5 db 10,13,"La Operacion es verdadera!!",10,13,"$"
msg6 db 10,13,"La operacion erronea",10,13,"$"
menor equ 12 ; 0C - 12 equivalente al signo '<'
igual equ 13 ; 0D - 13 equivalente al signo '='
mayor equ 14 ; 0E - 14 equivalente al signo '>'
n1 db 0
n2 db 0
opr db 0
.CODE
Inicio:
;... nombre y descripcion ...
mov ax,@data
mov ds,ax ; DS ahora apunta al segmento de datos.
mov ah,9 ; Función del DOS para impresión de cadenas.
mov dx,OFFSET titulo ; Apuntador al Nombre
int 21h ;Llamada a DOS por medio de la interrupción
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET Descripcion
int 21h
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET line
int 21h
Operacion:
mov ax, @data
mov ds, ax ;referenciamos el segmento de datos
;primer numero
mov ah, 9
lea dx, msg1
int 21h
mov ah, 01
int 21h
sub al, 30h
mov n1, al
;operacion logica
mov ah, 9
lea dx, msg
int 21h
mov ah, 01
int 21h
sub al, 30h
mov opr, al
;segundo numero
mov ah, 9
lea dx, msg2
int 21h
mov ah, 01
int 21h
sub al, 30h
mov n2, al
;imprimiendo lineas
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET msg3
int 21h
;..iniciando opr logica..
mov al, n1
cmp al, n2 ;compara n1 con n2
jg es_mayor ;si n1 es mayor a n2 salta a la etiq. es_mayor
je es_igual ;si n1 es igual a n2 salta a la etiq. es_igual
jmp es_menor ;si n1 es menor a n2 salta a la etiq. es_menor
es_mayor:
mov al, opr
cmp al, menor
je falso
cmp al, igual
je falso
cmp al, mayor
je verdadero
jmp error
es_menor:
mov al, opr
cmp al, mayor
je falso
cmp al, igual
je falso
cmp al, menor
je verdadero
jmp error
es_igual:
mov al, opr
cmp al, mayor
je falso
cmp al, menor
je falso
cmp al, igual
je verdadero
jmp error
falso:
mov ah, 9
lea dx, msg4
int 21h
jmp fin
verdadero:
mov ah, 9
lea dx, msg5
int 21h
jmp fin
error:
mov ah, 9
lea dx, msg6
int 21h
jmp fin
;..fin opr..
; --------------------- fin del programa --------------------------
fin:
mov ah,4Ch ; Transferencia del control al DOS. Función
;“Retornar a DOS”
int 21h ;Interrupción que llama a DOS para terminar el
;programa
END Inicio
cr equ 13 ;Declaración de Constante
lf equ 10 ;Declaración de constante
.DATA ;Comienzo del segmento de datos
titulo DB 10,13,'Operaciones logicas utilizando <,>,=',cr,lf,'$'
Descripcion DB 'comparaciones con dos numeros',cr,lf,'$'
line DB '------------',cr,lf,'$'
msg1 db "Ingresar primer numero ",10,13,"$"
msg db 10,13,"Ingresar operacion logica a realizar (<, >, = ) ",10,13,"$"
msg2 db 10,13,"Ingresar segundo numero ",10,13,"$"
msg3 db 10,13,"-----------------",10,13,"$"
msg4 db 10,13,"La Operacion es falsa ",10,13,"$"
msg5 db 10,13,"La Operacion es verdadera!!",10,13,"$"
msg6 db 10,13,"La operacion erronea",10,13,"$"
menor equ 12 ; 0C - 12 equivalente al signo '<'
igual equ 13 ; 0D - 13 equivalente al signo '='
mayor equ 14 ; 0E - 14 equivalente al signo '>'
n1 db 0
n2 db 0
opr db 0
.CODE
Inicio:
;... nombre y descripcion ...
mov ax,@data
mov ds,ax ; DS ahora apunta al segmento de datos.
mov ah,9 ; Función del DOS para impresión de cadenas.
mov dx,OFFSET titulo ; Apuntador al Nombre
int 21h ;Llamada a DOS por medio de la interrupción
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET Descripcion
int 21h
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET line
int 21h
Operacion:
mov ax, @data
mov ds, ax ;referenciamos el segmento de datos
;primer numero
mov ah, 9
lea dx, msg1
int 21h
mov ah, 01
int 21h
sub al, 30h
mov n1, al
;operacion logica
mov ah, 9
lea dx, msg
int 21h
mov ah, 01
int 21h
sub al, 30h
mov opr, al
;segundo numero
mov ah, 9
lea dx, msg2
int 21h
mov ah, 01
int 21h
sub al, 30h
mov n2, al
;imprimiendo lineas
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET msg3
int 21h
;..iniciando opr logica..
mov al, n1
cmp al, n2 ;compara n1 con n2
jg es_mayor ;si n1 es mayor a n2 salta a la etiq. es_mayor
je es_igual ;si n1 es igual a n2 salta a la etiq. es_igual
jmp es_menor ;si n1 es menor a n2 salta a la etiq. es_menor
es_mayor:
mov al, opr
cmp al, menor
je falso
cmp al, igual
je falso
cmp al, mayor
je verdadero
jmp error
es_menor:
mov al, opr
cmp al, mayor
je falso
cmp al, igual
je falso
cmp al, menor
je verdadero
jmp error
es_igual:
mov al, opr
cmp al, mayor
je falso
cmp al, menor
je falso
cmp al, igual
je verdadero
jmp error
falso:
mov ah, 9
lea dx, msg4
int 21h
jmp fin
verdadero:
mov ah, 9
lea dx, msg5
int 21h
jmp fin
error:
mov ah, 9
lea dx, msg6
int 21h
jmp fin
;..fin opr..
; --------------------- fin del programa --------------------------
fin:
mov ah,4Ch ; Transferencia del control al DOS. Función
;“Retornar a DOS”
int 21h ;Interrupción que llama a DOS para terminar el
;programa
END Inicio
1 comentarios :
Primer comentario por mí
Publicar un comentario