menu funcioanl en assembler

tamayo
24 de Noviembre del 2004
hey hola, necesito hacer funcionar un menu en assembler, pero no lo he logrado, las opciones no me salen una debajo de otra y cuando hago el scroll se me va regenerando la fila 1 asi que al final del menu solo tengo "filas 1" borrando el resto; agradeceria ayuda; aca les mando el codigo:

TITLE ASSEMBLER

.MODEL SMALL
.STACK 64
.DATA
TOPROW EQU 00
BOTROW EQU 40
LEFCOL EQU 10
COL DB 00
ROW DB 00
COUNT DB ?
LINES DB ?
ATTRIB DB ?
NINTEEN DB 1
MENU DB 0C9H, 50 DUP(0CDH), 0BBH
DB 0BAH, 'Op 1', 0BAH
DB 0BAH, 'Op 2', 0BAH
DB 0BAH, 'Op 3', 0BAH
DB 0BAH, 'Op 4', 0BAH
DB 0BAH, 'Op 5', 0BAH
DB 0BAH, 'Op 6', 0BAH
DB 0C8H, 50 DUP(0CDH), 0BcH

PROMPT DB 09, 'Seleccione dando ENTER'
DB 13, 10, 09, 'Presione Esc para salir'
.CODE
BEGIN PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
CALL Q10CLR
MOV ROW,BOTROW+4
MOV COL,00
CALL Q20CURS
MOV AH,40H
MOV BX,01
MOV CX,75
LEA DX,PROMPT
INT 21H
A10LOOP:
CALL B10MENU
MOV COL,LEFCOL+1
CALL Q20CURS
MOV ROW,TOPROW+1
MOV ATTRIB,16H
CALL H10DISP
CALL D10INPT
CMP AL,0DH
JE A10LOOP
MOV AX,0600H
CALL Q10CLR
MOV AX,4C00H
INT 21H
BEGIN ENDP

B10MENU PROC NEAR
MOV ROW,TOPROW
MOV LINES,12
LEA SI,MENU
MOV ATTRIB,71H
B20:
MOV COL,LEFCOL
MOV COUNT,15
B30:
CALL Q20CURS
MOV AH,09H
MOV AL,[SI]
MOV BH,00
MOV BL,71H
MOV CX,01
INT 10H
INC COL
INC SI
DEC COUNT
JNZ B30
INC ROW
DEC LINES
JNZ B20
RET
B10MENU ENDP
D10INPT PROC NEAR
MOV AH,10H
INT 16H
CMP AH,50H
JE D20
CMP AH,48H
JE D30
CMP AL,0DH
JE D90
CMP AL,1BH
JE D90
JMP D10INPT
D20: MOV ATTRIB,71H
CALL H10DISP
INC ROW
CMP ROW,BOTROW-1
JBE D40
MOV ROW,TOPROW+1
JMP D40
D30: MOV ATTRIB,71H
CALL H10DISP
DEC ROW
CMP ROW,TOPROW+1
JAE D40
MOV ROW,BOTROW-1
D40: CALL Q20CURS
MOV ATTRIB,16H
CALL H10DISP
JMP D10INPT
D90: RET
D10INPT ENDP

H10DISP PROC NEAR
MOV AH,00
MOV AL,ROW
MUL NINTEEN
LEA SI,MENU+1
ADD SI,AX
MOV COUNT,17
H20:
CALL Q20CURS
MOV AH,09H
MOV AL,[SI]
MOV BH,00
MOV BL,ATTRIB
MOV CX,01
INT 10H
INC COL
INC SI
DEC COUNT
JNZ H20
MOV COL,LEFCOL+1
CALL Q20CURS
RET
H10DISP ENDP
Q10CLR PROC NEAR
MOV AX,0600H
MOV BH,61H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
Q10CLR ENDP
Q20CURS PROC NEAR
MOV AH,02H
MOV BH,00
MOV DH,ROW
MOV DL,COL
INT 10H
RET
Q20CURS ENDP
END BEGIN