Menú en lenguaje ensamblador

;Autor: John J Martinez CC. 80.170.712
   2 
;Descripción: Programa para realizar diferentes actividades
   3 
;tales como; sumar, restar, multiplicar, dividir, determinar
   4 
;si y un numero es positivo o negativo.
   5 
.model small
   6 
.stack 100h
   7 
;Definición de constantes
   8 
CR EQU 13 ;Define la constante CR que contiene el caracter 13 que es retorno de carro
   9 
LF EQU 10 ;Define la constante LF que contiene el caracter 10 que es salto de linea
  10 
.data
  11 
;Definición de textos para imprimir en pantalla
  12 
;Items del menu
  13 
txtTituloMenu db "MENU:$"
  14 
txtItemDatosAutor db "  1. Datos del autor.$"
  15 
txtItemSuma db "  2. Suma de dos numeros.$"
  16 
txtItemResta db "  3. Resta de dos numeros.$"
  17 
txtItemMultiplicacion db "  4. Multiplicacion de dos numeros.$"
  18 
txtItemDivision db "  5. Division de dos numeros.$"
  19 
txtItemValidar db "  6. Validar numero positivo o negativo.$"
  20 
txtItemSalir db "  7. Salir.$"
  21 
txtTeclaContinuar db "Oprima cualquier tecla para continuar...$"
  22 
txtGracias db "!!!Gracias!!!$"
  23 
txtDigiteNumero db "Ingrese un digito del 0 al 9:",CR,LF,"$"
  24 
opcionSeleccionada db 0
  25 
saltoLinea db CR,LF,'$'
  26 
 
  27 
.code
  28 
programa: ;Inicia el programa
  29 
;la función call, llama las diferentes sub rutinas definidas
  30 
call muestraMenu
  31 
call imprimeSolicitud
  32 
call leerOpcionMenu
  33 
call analizarOpcion
  34 
loop programa
  35 
 
  36 
 
  37 
muestramenu proc
  38 
call limpiaPantalla
  39 
call imprimeTituloMenu
  40 
call saltarLinea
  41 
call imprimeItemDatosAutor
  42 
call saltarLinea
  43 
call imprimeItemSuma
  44 
call saltarLinea
  45 
call imprimeItemResta
  46 
call saltarLinea
  47 
call imprimeItemMultiplicacion
  48 
call saltarLinea
  49 
call imprimeItemDivision
  50 
call saltarLinea
  51 
call imprimeItemValidar
  52 
call saltarLinea
  53 
call imprimeItemSalir
  54 
call saltarLinea
  55 
ret
  56 
 
  57 
limpiaPantalla proc
  58 
mov ax,00 ;Establece el modo de video
  59 
mov al,03h ;Modo 80x25
  60 
int 10h ;Ejecuta el modo de video
  61 
ret ;Termina rutina
  62 
 
  63 
imprimeTituloMenu proc
  64 
mov ax,seg txtTituloMenu ;Coloca en el registro ax el valor del segmento de la definicion
  65 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
  66 
lea dx,txtTituloMenu ;Coloca el texto en el registro dx
  67 
mov ah,09 ;Imprime en la salida estandar
  68 
int 21h ;Llama a la funcion que se encuentra en el registro AH
  69 
ret ;Termina rutina
  70 
 
  71 
imprimeItemDatosAutor proc
  72 
mov ax,seg txtItemDatosAutor ;Coloca en el registro ax el valor del segmento de la definicion
  73 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
  74 
lea dx,txtItemDatosAutor ;Coloca el texto en el registro dx
  75 
mov ah,09 ;Imprime en la salida estandar
  76 
int 21h ;Llama a la funcion que se encuentra en el registro AH
  77 
ret ;Termina rutina
  78 
 
  79 
 
  80 
imprimeItemSuma proc
  81 
mov ax,seg txtItemSuma ;Coloca en el registro ax el valor del segmento de la definicion
  82 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
  83 
lea dx,txtItemSuma ;Coloca el texto en el registro dx
  84 
mov ah,09 ;Imprime en la salida estandar
  85 
int 21h ;Llama a la funcion que se encuentra en el registro AH
  86 
ret ;Termina rutina
  87 
 
  88 
imprimeItemResta proc
  89 
mov ax,seg txtItemResta ;Coloca en el registro ax el valor del segmento de la definicion
  90 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
  91 
lea dx,txtItemResta ;Coloca el texto en el registro dx
  92 
mov ah,09 ;Imprime en la salida estandar
  93 
int 21h ;Llama a la funcion que se encuentra en el registro AH
  94 
ret ;Termina rutina
  95 
 
  96 
imprimeItemMultiplicacion proc
  97 
mov ax,seg txtItemMultiplicacion ;Coloca en el registro ax el valor del segmento de la definicion
  98 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
  99 
lea dx,txtItemMultiplicacion ;Coloca el texto en el registro dx
 100 
mov ah,09 ;Imprime en la salida estandar
 101 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 102 
ret ;Termina rutina
 103 
 
 104 
imprimeItemDivision proc
 105 
mov ax,seg txtItemDivision ;Coloca en el registro ax el valor del segmento de la definicion
 106 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
 107 
lea dx,txtItemDivision ;Coloca el texto en el registro dx
 108 
mov ah,09 ;Imprime en la salida estandar
 109 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 110 
ret ;Termina rutina
 111 
 
 112 
imprimeItemValidar proc
 113 
mov ax,seg txtItemValidar ;Coloca en el registro ax el valor del segmento de la definicion
 114 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
 115 
lea dx,txtItemValidar ;Coloca el texto en el registro dx
 116 
mov ah,09 ;Imprime en la salida estandar
 117 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 118 
ret ;Termina rutina
 119 
 
 120 
imprimeItemSalir proc
 121 
mov ax,seg txtItemSalir ;Coloca en el registro ax el valor del segmento de la definicion
 122 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
 123 
lea dx,txtItemSalir ;Coloca el texto en el registro dx
 124 
mov ah,09 ;Imprime en la salida estandar
 125 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 126 
ret ;Termina rutina
 127 
 
 128 
imprimeSolicitud proc
 129 
lea dx,txtDigiteNumero ;Coloca el texto en el registro dx
 130 
mov ah,09 ;Imprime en la salida estandar
 131 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 132 
ret ;Termina rutina
 133 
 
 134 
leerOpcionMenu proc
 135 
mov ah,01 ;Se prepara para leer caracter del teclado
 136 
int 21h ;Ejecuta la función que se encuentra en el registro ah
 137 
sub al,30h ;Resta 30 al número leido para poder realizar operaciones con él
 138 
mov opcionSeleccionada,al ;Almacena el número leido en la variable
 139 
ret ;Termina rutina
 140 
 
 141 
finalizaEjecucion proc
 142 
call limpiaPantalla
 143 
call saltarLinea
 144 
call saltarLinea
 145 
mov ax,seg txtGracias ;Coloca en el registro ax el valor del segmento de la definicion
 146 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
 147 
lea dx,txtGracias ;Coloca el texto en el registro dx
 148 
mov ah,09 ;Imprime en la salida estandar
 149 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 150 
mov AH,4CH ;4CH = Termina el programa
 151 
int 21H ;Llama a la funcion que se encuentra en el registro AH
 152 
ret ;Termina rutina
 153 
 
 154 
saltarLinea proc
 155 
mov ax,seg saltoLinea ;Coloca en el registro ax el valor del segmento de la definicion saltoLinea
 156 
mov ds,ax ;Coloca el contenido del registro ax en el registro ds
 157 
lea dx,saltoLinea ;Coloca el texto en el registro dx
 158 
mov ah,09 ;Imprime en la salida estandar
 159 
int 21h ;Llama a la funcion que se encuentra en el registro AH
 160 
ret ;Termina rutina
 161 
 
 162 
analizarOpcion proc
 163 
mov al,opcionSeleccionada
 164 
cmp al,1
 165 
;je opcionAutores
 166 
cmp al,2
 167 
;je opcionSumar
 168 
cmp al,3
 169 
;je opcionRestar
 170 
cmp al,4
 171 
;je opcionMultiplicar
 172 
cmp al,5
 173 
;je opcionDividir
 174 
cmp al,6
 175 
;je opcionValidar
 176 
cmp al,7
 177 
je finalizaEjecucion
 178 
 
 179 
ret
 180 
 
 181 
end programa ;Termina programa principal