es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo crear una barra de menú como la del comando EDIT de TASM?

Quiero crear un archivo de editor de texto utilizando TASM. (Para aquellos que preguntan por qué quiero crear esto es porque es para fines académicos). Lo que he hecho hasta ahora es hacer un texto editable. Lo que quiero hacer es cómo puedo hacer una barra de menú que sea como en el comando EDIT de TASM. Aprecio si agregas algunas referencias.

Este es el código que he hecho hasta ahora:

.MODEL SMALL
.STACK

.DATA
CURSOR_X DB 0
CURSOR_Y DB 0

.CODE 
START: 
MOV AX,@DATA ;CONFIGURAR DS PARA PODER ACCEDER A NUESTROS DATOS
MOV DS,AX
;UTILIZAR LA INTERRUPCIÓN 10H DEL BIOS, SERVICIO 06H PARA DESPLAZAR LA VENTANA HACIA ARRIBA
;ESTO CREA UN EFECTO DE PANTALLA CLARA
;TAMBIÉN CONFIGURA LOS COLORES (FONDO AZUL Y TEXTO ROJO)
MOV AX,0600H
MOV BH,1CH
MOV CX,0
MOV DX,184FH
INT 10H

SET_CURSOR: 
;UTILIZAR LA INTERRUPCIÓN 10H DEL BIOS, SERVICIO 02H PARA POSICIONAR EL CURSOR
MOV AH,02H
MOV DL,CURSOR_X
MOV DH,CURSOR_Y
MOV BH,0
INT 10H

READ_KEY: 
;UTILIZAR LA INTERRUPCIÓN 16H DEL BIOS, SERVICIO 00H PARA LEER EL TECLADO
;(RETORNA EL CÓDIGO ASCII EN AL)
MOV AH,0
INT 16H

CMP AL, 1BH
JE EXIT

CMP AL, 08H
JE BACKSPACE 

;UTILIZAR LA INTERRUPCIÓN 10H DEL BIOS, SERVICIO 0AH PARA IMPRIMIR UN CARACTER
;EN LA POSICIÓN ACTUAL DEL CURSOR
MOV AH,0AH
MOV CX,1
MOV BH,0
INT 10H

CMP DL, 39
JE MOVE_DOWN

INC CURSOR_X
CMP DL, 39
JL SET_CURSOR

MOVE_DOWN: 

CMP DH, 9
JE READ_KEY

MOV CURSOR_X, 0
INC CURSOR_Y
CMP DH, 9
JL SET_CURSOR

BACKSPACE: 

CMP CURSOR_X, 0
JE MOVE_UP

DEC CURSOR_X
JMP ERASE

MOVE_UP: 

CMP CURSOR_Y, 0
JE READ_KEY

MOV CURSOR_X, 39
DEC CURSOR_Y
JMP ERASE
ERASE: 
;UTILIZAR LA INTERRUPCIÓN 10H DEL BIOS, SERVICIO 02H PARA POSICIONAR EL CURSOR
MOV AH,02H
MOV DL,CURSOR_X
MOV DH,CURSOR_Y
MOV BH,0
INT 10H
;UTILIZAR LA INTERRUPCIÓN 10H DEL BIOS, SERVICIO 0AH PARA IMPRIMIR ESPACIOS EN BLANCO
;EN LA POSICIÓN ACTUAL DEL CURSOR (BORRAR)
MOV AH,0AH
MOV AL,WS
MOV CX,1
INT 10H
JMP READ_KEY 
EXIT: 
;UTILIZAR LA INTERRUPCIÓN 21H DEL DOS, SERVICIO 4CH PARA SALIR DEL PROGRAMA
MOV AX,4C00H
INT 21H

END START ;INDICAR AL ENSAMBLADOR QUE FINALICE

Ahora esto es lo que quiero hacer:
Imagen del menú

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una barra de menú similar al comando EDIT de TASM, necesitarás usar la interrupción de BIOS 10H, servicio 0BH para imprimir los caracteres necesarios para crear el menú y las opciones de submenú. Esta interrupción te permite imprimir una cadena de caracteres con un atributo especificado (colores de fondo y primer plano). Aquí tienes un ejemplo de cómo puedes imprimir los menús File, Edit y Help:

    PRINT_MENU:
        ; Imprimir opción de menú File
        MOV AH, 0BH
        MOV CX, 4 ; longitud de la cadena
        MOV BL, 00110000B ; atributo (fondo azul, primer plano blanco)
        MOV DX, OFFSET FILE_MENU
        INT 10H
    
        ; Imprimir opción de menú Edit
        MOV AH, 0BH
        MOV CX, 4 ; longitud de la cadena
        MOV BL, 00110000B ; atributo (fondo azul, primer plano blanco)
        MOV DX, OFFSET EDIT_MENU
        INT 10H
    
        ; Imprimir opción de menú Help
        MOV AH, 0BH
        MOV CX, 4 ; longitud de la cadena
        MOV BL, 00110000B ; atributo (fondo azul, primer plano blanco)
        MOV DX, OFFSET HELP_MENU
        INT 10H
    
        RET
    
    FILE_MENU DB 'Archivo', 0
    EDIT_MENU DB 'Editar', 0
    HELP_MENU DB 'Ayuda', 0
    

    Puedes ajustar la longitud de la cadena y el atributo para que coincida con el estilo de menú deseado. Además, deberás manejar la selección del usuario de las opciones de menú utilizando la entrada del teclado y el flujo condicional. ¡Buena suerte con tu proyecto académico!

Comments are closed.