《汇编语言程序设计》上机实验指导书
MOV DL,79 ;行数由上至下从0递增到24,列数由左至右依次从0递增到79
MOV BH,07
INT 10H ;设置显示方式 CURS 0,0 ;初始化光标 READ_K:
MOV AH,0
INT 16H ;键入字符送AL
CMP JNZ MOV INT ARROW:
CMP JZ CMP JZ INST: JMP LEFT: JMP RIGHT: JMP INS_K: MOV MOV CMP JE LEA ADD MOV DEC SUB STD
REP KM:
AL,1BH ;is escape? 按esc键退出 ARROW AH ,4CH 21H AH,4BH ;is left arrow LEFT
AH,4DH ;is right arrow RIGHT INS_K LEFT_K RIGHT_K
;insert a character BX,BUFPT CX,BUFTL BX,CX
KM ;yes,char into buffer DI,KBD_BUF ;no,buffer move DI,CX ;a byte backward SI,DI SI CX,BX MOVSB - 26 -
《汇编语言程序设计》上机实验指导书
MOV KBD_BUF[BX],AL
INC BUFPT ;inc head pointer INC BUFTL ;inc tail pointer CMP AL,0DH ;insert a CR JNZ KN
LEA SI,CNTL ;yes,move the count ADD SI,ROWMX ;of each row INC SI ;backword MOV DI,SI INC DI
MOV CX,ROWMX SUB CL,ROWPT STD
REP MOVSB
MOV BL,ROWPT ;adjust the counts XOR BH,BH ;of current row MOV CL,COLPT ;and next row MOV CH,CNTL[BX] SUB CH,COLPT MOV CNTL[BX],CL MOV [CNTL+1],CH
MOV AX,ROWMX ;clear displaying row MOV BH,7 MOV CH,ROWPT MOV DH,24 MOV CL,0 MOV DL,79 MOV AH,6 INT 10H
INC ROWPT ;point to next INC ROWMX ;inc max row count MOV COLPT,0 ;point to 0 column JMP SHORT KP
- 27 -
《汇编语言程序设计》上机实验指导书
KN:
MOV BL,ROWPT XOR BH,BH
INC CNTL[BX] ;inc current row count INC COLPT ;point to next column KP: CALL DISPBF ;display input buffer CURS ROWPT,COLPT ;position the cursor JMP READ_K LEFT_K:
CMP JNZ CMP JZ DEC MOV LEA XLAT MOV JMP K2: DEC K3: DEC CURS LRET: JMP RIGHT_K:
MOV CMP JE INC CMP JNZ INC MOV K4: INC COLPT,0 ;is at 0 column K2 ;no
ROWPT,0 ;is at 0 row LRET ;yes,cursor is unmove ROWPT AL,ROWPT BX,CNTL CNTL COLPT,AL K3 COLPT BUFPT ROWPT,COLPT READ_K BX,BUFPT ;is at tail of file? BX,BUFTL
RRET ;yes,cursor unmoved COLPT ;point to next column KBD_BUF[BX],0DH ;is CR? K4 ;no
ROWPT ;yes,point to next row COLPT,0 ;and 0 column BUFPT ;adjust buffer pointer
- 28 -
《汇编语言程序设计》上机实验指导书
CURS ROWPT,COLPT ;position cursor RRET: JMP READ_K DISPBF PROC NEAR MOV BX,0 MOV CX, 96 CURS 0,0
DISP: MOV AL,KBD_BUF[BX] PUSH BX MOV MOV INT POP CMP JNZ MOV MOV INT KK: INC LOOP RET DISPBF ENDP MAIN ENDP CSEG ENDS
END BX,0700 AH,0EH 10H BX AL,0DH KK AL,0AH AH,0EH 10H BX DISP START
- 29 -