MrDoomMaster
March 29th, 2004, 09:53 AM
Hey guys, for some reason I'm having trouble out of the Scroll Screen (For clearing the screen) function. After the first coding of the scroll screen, the other two crash the program mysteriously. The first one works though.
I have run this executable through DEBUG, yet I found nothing that looked abnormal. If someone could be patient enough to flip through this code and maybe find a problem, I would appreciate it. Thanks guys!
The following code is in 16BIT Conventional assembly format.
PAGE 60,132
TITLE L11RCD (EXE) LAB 11 PROG
;---------------------------------------------------------------------
STACK SEGMENT PARA STACK 'Stack'
DB 32 DUP (0)
STACK ENDS
;---------------------------------------------------------------------
DATASEG SEGMENT PARA 'Data'
INST DB ' THIS IS A TYPING TEST. ON THE NEXT SCREEN THERE WILL BE A SENTENCE',0DH,0AH
DB ' DISPLAYED AT THE TOP. YOU ARE TO TYPE THE SENTENCE EXACTLY AS IT IS',0DH,0AH
DB ' SHOWN, IN ITS ENTIRETY. IF YOU MAKE A MISTAKE YOUR TEST WILL BE',0DH,0AH
DB ' TERMINATED AND YOU WILL FAIL.',0DH,0AH,0AH
DB ' GOOD LUCK',0DH,0AH,0AH
DB ' PRESS ',027H,'ENTER',027H,' WHEN YOU ARE READY TO BEGIN THE TEST.$'
FAIL DB ' YOU HAVE FAILED THE TYPING TEST! PRESS ENTER TO TRY AGAIN, OR ESC TO EXIT$'
SUCES DB ' CONGRATULATIONS! YOU HAVE PASSED THE TEST!',0DH,0AH
DB ' PRESS ENTER TO TRY AGAIN, OR ESC TO EXIT$'
SENT DB 15 DUP (020H),0DAH,44 DUP (0C4H),0BFH,0DH,0AH
DB 15 DUP (020H),0B3H,'The quick brown fox jumps over the lazy dog.',0B3H,0DH,0AH
DB 15 DUP (020H),0C0H,44 DUP (0C4H),0D9H,'$'
ANSW DB 'The quick brown fox jumps over the lazy dog.'
ANSC DB 0H
TEMP DB ?
DATASEG ENDS
;---------------------------------------------------------------------
;---------------------------------------------------------------------
CODESEG SEGMENT PARA 'Code'
MAIN PROC FAR
ASSUME SS:STACK,DS:DATASEG,CS:CODESEG
MOV AX,DATASEG
MOV DS,AX
MOV ES,AX
MOV AX,0003H
INT 10H ;SET RESOLUTION
MOV AH,02H
MOV BH,00H
MOV DH,08H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR PROGRAM INSTRUCTIONS
MOV AH,09H
LEA DX,[INST]
INT 21H ;DISPLAY INSTRUCTIONS
;---------------
ENTERK: MOV AH,10H
INT 16H ;REQUEST SINGLE INPUT
CMP AL,0DH ;CHECK IF ENTER WAS PRESSED
JNE ENTERK ;IF NOT, REQUEST INPUT UNTIL TRUE
;---------------
MOV AX,0700H
MOV CX,0000H
MOV BH,07H
MOV DX,184FH
INT 10H ;SCROLL SCREEN::CLEAR
MOV AH,02H
MOV BH,00H
MOV DH,05H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR SENTENCE
MOV AH,09H
LEA DX,[SENT]
INT 21H ;DISPLAY SENTENCE TO TYPE
MOV AH,02H
MOV BH,00H
MOV DH,09H
MOV DL,10H
INT 10H ;POSITION CURSOR FOR INPUT
MOV BX,0H ;SET STRING OFFSET COUNTER TO 0
CALL ILOOP
MOV AX,4C00H
INT 21H
MAIN ENDP
;---------------------------------------------------------------------
; INPUT LOOP FOR SENTENCE
;---------------------------------------------------------------------
ILOOP PROC NEAR
MOV AH,0CH
MOV AL,01H
INT 21H ;REQUEST INPUT OF SINGLE CHARACTER
MOV TEMP,AL
LEA DI,[TEMP]
LEA SI,[ANSW+BX] ;CHECK IF INPUT CHARACTER MATCHES THAT IN THE CORRECT SENTENCE
CMPSB
JNE IERROR ;IF NOT, THEN JUMP TO IERROR PROCEEDURE
INC BX ;INCREMENT STRING OFFSET
CMP BX,02CH ;CHECK IF END OF INPUT STRING
JNE ILOOP ;IF NOT, THEN REPEAT THIS PROCEEDURE
MOV AX,0700H
MOV CX,0000H
MOV BH,07H
MOV DX,184FH
INT 10H ;SCROLL SCREEN::CLEAR
MOV AH,02H
MOV BH,00H
MOV DH,08H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR SENTENCE
MOV AH,09H
LEA DX,[SUCES]
INT 21H ;DISPLAY SUCCESS MESSAGE
MOV AH,01H
MOV CX,0100H
INT 10H ;HIDE CURSOR
EXIT3: MOV AH,10H
INT 16H ;REQUEST SINGLE INPUT
CMP AL,0DH ;CHECK IF ENTER WAS PRESSED
JE MAIN ;IF TRUE, REPEAT ENTIRE PROGRAM
CMP AH,01BH ;CHECK IF ESC KEY PRESSED
JNE EXIT3 ;IF FALSE, INPUT AGAIN UNTIL ENTER/ESC PRESSED
MOV AX,4C00H
INT 21H ;PROGRAM TERMINATION
ILOOP ENDP
;---------------------------------------------------------------------
; IF INPUT INCORRECT, THIS PROCEEDURE IS EXECUTED
;---------------------------------------------------------------------
IERROR PROC NEAR
MOV AX,0700H
MOV CX,0000H
MOV BH,07H
MOV DX,184FH
INT 10H ;SCROLL SCREEN::CLEAR
MOV AH,02H
MOV BH,00H
MOV DH,08H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR SENTENCE
MOV AH,09H
LEA DX,[FAIL]
INT 21H ;DISPLAY FAILURE MESSAGE
MOV AH,01H
MOV CX,0100H
INT 10H ;HIDE CURSOR
EXIT1: MOV AH,10H
INT 16H ;REQUEST SINGLE INPUT
CMP AL,0DH ;CHECK IF ENTER WAS PRESSED
JE MAIN ;IF TRUE, REPEAT ENTIRE PROGRAM
CMP AH,01BH ;CHECK IF ESC KEY WAS PRESSED
JNE EXIT1 ;IF NOT, REQUEST INPUT UNTIL ENTER OR ESC PRESSED
MOV AX,4C00H
INT 21H ;PROGRAM TERMINATION
IERROR ENDP
;---------------------------------------------------------------------
CODESEG ENDS
END MAIN
I have run this executable through DEBUG, yet I found nothing that looked abnormal. If someone could be patient enough to flip through this code and maybe find a problem, I would appreciate it. Thanks guys!
The following code is in 16BIT Conventional assembly format.
PAGE 60,132
TITLE L11RCD (EXE) LAB 11 PROG
;---------------------------------------------------------------------
STACK SEGMENT PARA STACK 'Stack'
DB 32 DUP (0)
STACK ENDS
;---------------------------------------------------------------------
DATASEG SEGMENT PARA 'Data'
INST DB ' THIS IS A TYPING TEST. ON THE NEXT SCREEN THERE WILL BE A SENTENCE',0DH,0AH
DB ' DISPLAYED AT THE TOP. YOU ARE TO TYPE THE SENTENCE EXACTLY AS IT IS',0DH,0AH
DB ' SHOWN, IN ITS ENTIRETY. IF YOU MAKE A MISTAKE YOUR TEST WILL BE',0DH,0AH
DB ' TERMINATED AND YOU WILL FAIL.',0DH,0AH,0AH
DB ' GOOD LUCK',0DH,0AH,0AH
DB ' PRESS ',027H,'ENTER',027H,' WHEN YOU ARE READY TO BEGIN THE TEST.$'
FAIL DB ' YOU HAVE FAILED THE TYPING TEST! PRESS ENTER TO TRY AGAIN, OR ESC TO EXIT$'
SUCES DB ' CONGRATULATIONS! YOU HAVE PASSED THE TEST!',0DH,0AH
DB ' PRESS ENTER TO TRY AGAIN, OR ESC TO EXIT$'
SENT DB 15 DUP (020H),0DAH,44 DUP (0C4H),0BFH,0DH,0AH
DB 15 DUP (020H),0B3H,'The quick brown fox jumps over the lazy dog.',0B3H,0DH,0AH
DB 15 DUP (020H),0C0H,44 DUP (0C4H),0D9H,'$'
ANSW DB 'The quick brown fox jumps over the lazy dog.'
ANSC DB 0H
TEMP DB ?
DATASEG ENDS
;---------------------------------------------------------------------
;---------------------------------------------------------------------
CODESEG SEGMENT PARA 'Code'
MAIN PROC FAR
ASSUME SS:STACK,DS:DATASEG,CS:CODESEG
MOV AX,DATASEG
MOV DS,AX
MOV ES,AX
MOV AX,0003H
INT 10H ;SET RESOLUTION
MOV AH,02H
MOV BH,00H
MOV DH,08H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR PROGRAM INSTRUCTIONS
MOV AH,09H
LEA DX,[INST]
INT 21H ;DISPLAY INSTRUCTIONS
;---------------
ENTERK: MOV AH,10H
INT 16H ;REQUEST SINGLE INPUT
CMP AL,0DH ;CHECK IF ENTER WAS PRESSED
JNE ENTERK ;IF NOT, REQUEST INPUT UNTIL TRUE
;---------------
MOV AX,0700H
MOV CX,0000H
MOV BH,07H
MOV DX,184FH
INT 10H ;SCROLL SCREEN::CLEAR
MOV AH,02H
MOV BH,00H
MOV DH,05H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR SENTENCE
MOV AH,09H
LEA DX,[SENT]
INT 21H ;DISPLAY SENTENCE TO TYPE
MOV AH,02H
MOV BH,00H
MOV DH,09H
MOV DL,10H
INT 10H ;POSITION CURSOR FOR INPUT
MOV BX,0H ;SET STRING OFFSET COUNTER TO 0
CALL ILOOP
MOV AX,4C00H
INT 21H
MAIN ENDP
;---------------------------------------------------------------------
; INPUT LOOP FOR SENTENCE
;---------------------------------------------------------------------
ILOOP PROC NEAR
MOV AH,0CH
MOV AL,01H
INT 21H ;REQUEST INPUT OF SINGLE CHARACTER
MOV TEMP,AL
LEA DI,[TEMP]
LEA SI,[ANSW+BX] ;CHECK IF INPUT CHARACTER MATCHES THAT IN THE CORRECT SENTENCE
CMPSB
JNE IERROR ;IF NOT, THEN JUMP TO IERROR PROCEEDURE
INC BX ;INCREMENT STRING OFFSET
CMP BX,02CH ;CHECK IF END OF INPUT STRING
JNE ILOOP ;IF NOT, THEN REPEAT THIS PROCEEDURE
MOV AX,0700H
MOV CX,0000H
MOV BH,07H
MOV DX,184FH
INT 10H ;SCROLL SCREEN::CLEAR
MOV AH,02H
MOV BH,00H
MOV DH,08H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR SENTENCE
MOV AH,09H
LEA DX,[SUCES]
INT 21H ;DISPLAY SUCCESS MESSAGE
MOV AH,01H
MOV CX,0100H
INT 10H ;HIDE CURSOR
EXIT3: MOV AH,10H
INT 16H ;REQUEST SINGLE INPUT
CMP AL,0DH ;CHECK IF ENTER WAS PRESSED
JE MAIN ;IF TRUE, REPEAT ENTIRE PROGRAM
CMP AH,01BH ;CHECK IF ESC KEY PRESSED
JNE EXIT3 ;IF FALSE, INPUT AGAIN UNTIL ENTER/ESC PRESSED
MOV AX,4C00H
INT 21H ;PROGRAM TERMINATION
ILOOP ENDP
;---------------------------------------------------------------------
; IF INPUT INCORRECT, THIS PROCEEDURE IS EXECUTED
;---------------------------------------------------------------------
IERROR PROC NEAR
MOV AX,0700H
MOV CX,0000H
MOV BH,07H
MOV DX,184FH
INT 10H ;SCROLL SCREEN::CLEAR
MOV AH,02H
MOV BH,00H
MOV DH,08H
MOV DL,00H
INT 10H ;POSITION CURSOR FOR SENTENCE
MOV AH,09H
LEA DX,[FAIL]
INT 21H ;DISPLAY FAILURE MESSAGE
MOV AH,01H
MOV CX,0100H
INT 10H ;HIDE CURSOR
EXIT1: MOV AH,10H
INT 16H ;REQUEST SINGLE INPUT
CMP AL,0DH ;CHECK IF ENTER WAS PRESSED
JE MAIN ;IF TRUE, REPEAT ENTIRE PROGRAM
CMP AH,01BH ;CHECK IF ESC KEY WAS PRESSED
JNE EXIT1 ;IF NOT, REQUEST INPUT UNTIL ENTER OR ESC PRESSED
MOV AX,4C00H
INT 21H ;PROGRAM TERMINATION
IERROR ENDP
;---------------------------------------------------------------------
CODESEG ENDS
END MAIN