📄 97_editerindos_v0.1.asm
字号:
.model small
stack segment stack
WORD 100 DUP(?)
STACK ENDS
DATA SEGMENT PARA
LEFT_INDENT EQU 1
UP_INDENT EQU 2
DOWN_INDENT EQU 29
RIGHT_INDENT EQU 79
DATALEN WORD 205
ROW BYTE 2
COL BYTE 0
DATA_BUFFER BYTE 'You have a multitude of source files spread out all over the place. You have to deal with functions that somebody else wrote. You have to figure out how some piece of code works and see all of its clients!','$' ;,1024 DUP(?),'$'
;DATA_TEMP BYTE 0DH,0AH,' You didn’t write the code, or you wrote it in a past life.','$'
data ENDS
CODE SEGMENT PARA
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
MOV AX,DATA ;初始化DS,ES
MOV DS,AX
MOV ES,AX
CALL CLEAR_SCREEN
CALL SET_CURSOR
CALL DISP_DATA
NEXT:
CALL SET_CURSOR
CALL DEAL_KEYBRD
CMP AH,01H
JNE NEXT
CALL CLEAR_SCREEN
CALL RETURN
MAIN ENDP
;********************************************************
CLEAR_SCREEN PROC NEAR
MOV AX,0600H
MOV BH,10H
MOV CX,0201H
MOV DX,1A4EH ;30*80
INT 10H
RET
CLEAR_SCREEN ENDP
;********************************************************
SET_CURSOR PROC NEAR
MOV AH,2H
XOR BH,BH
MOV DH,ROW
MOV DL,COL
;ADD DL,INDENT ;可用来设置左缩进
INT 10H
RET
SET_CURSOR ENDP
;*******************************************************
DISP_DATA PROC NEAR
MOV AX,1301H ;
MOV BX,0016H
LEA BP,DATA_BUFFER
MOV CX,DATALEN
MOV DH,ROW
MOV DL,COL
;ADD DL,LEFT_INDENT
INT 10H
RET
DISP_DATA ENDP
;*******************************************************
DISP_CHAR PROC NEAR
LEA BP,DATA_BUFFER
ADD BP,BX
MOV CX,DATALEN
SUB CX,BX
MOV AX,1301H ;
MOV BX,0016H
MOV DH,ROW
MOV DL,COL
;ADD DL,LEFT_INDENT
INT 10H
RET
DISP_CHAR ENDP
;********************************************************
DEAL_KEYBRD PROC FAR
MOV AH,10H
INT 16H
CMP AL,00H
JE LEFT
CMP AL,0E0H
JE LEFT
;CALL ASCIICHAR
JMP DEALOK
LEFT:
CMP AH,4BH ;左箭头
JNE RIGHT
CALL DEAL_KEY_LEFT
JMP DEALOK
RIGHT:
CMP AH,4DH ;右箭头
JNE UP
CALL DEAL_KEY_RIGHT
JMP DEALOK
UP:
CMP AH,48H
JNE DOWN
CALL DEAL_KEY_UP
JMP DEALOK
DOWN:
CMP AH,50H
JNE DELETE
CALL DEAL_KEY_DOWN
JMP DEALOK
DELETE:
CMP AH,53H
JNE BACK
CALL DEAL_KEY_DELETE
JMP DEALOK
BACK:
CMP AH,0EH
JNE HOME
CALL DEAL_KEY_BACK
JMP DEALOK
HOME:
CMP AH,47H
JNE ENDER
CALL DEAL_KEY_HOME
JMP DEALOK
ENDER:
CMP AH,4FH
JNE DEALOK
CALL DEAL_KEY_END
JMP DEALOK
DEALOK:
RET
DEAL_KEYBRD ENDP
;********************************************************
DEAL_KEY_LEFT PROC NEAR
CMP COL,LEFT_INDENT
JBE OUTLINE
DEC COL
JMP DEALOK
OUTLINE:
CALL DEAL_KEY_UP
CALL DEAL_KEY_END
DEALOK:
RET
DEAL_KEY_LEFT ENDP
;********************************************************
DEAL_KEY_RIGHT PROC NEAR
CMP COL,RIGHT_INDENT
JAE OUTLINE
INC COL
JMP DEALOK
OUTLINE:
CALL DEAL_KEY_DOWN
CALL DEAL_KEY_HOME
DEALOK:
RET
DEAL_KEY_RIGHT ENDP
;********************************************************
DEAL_KEY_UP PROC NEAR
CMP ROW,UP_INDENT
JBE OUTLINE
DEC ROW
JMP DEALOK
OUTLINE:
DEALOK:
RET
DEAL_KEY_UP ENDP
;********************************************************
DEAL_KEY_DOWN PROC NEAR
CMP ROW,DOWN_INDENT
JAE OUTLINE
INC ROW
JMP DEALOK
OUTLINE:
DEALOK:
RET
DEAL_KEY_DOWN ENDP
;********************************************************
DEAL_KEY_DELETE PROC NEAR
MOV BL,COL
XOR BH,BH
PUSH BX
MOV BL,ROW
PUSH BX
;--------------
MOV AL,ROW
SUB AL,2H
MOV BL,4FH
MUL BL
MOV BL,COL
ADD BX,AX
DEC DATALEN
MOV CX,DATALEN
SUB CX,BX
LEA DI,[DATA_BUFFER+BX]
LEA SI,[DATA_BUFFER+BX+1]
NEXT:
LODSB
STOSB
LOOP NEXT
MOV ROW,2
MOV COL,0
CALL DISP_DATA
;INC COL
;CALL SET_CURSOR
;---------------------
POP BX
MOV ROW,BL
POP BX
MOV COL,BL
CALL SET_CURSOR
RET
DEAL_KEY_DELETE ENDP
;*******************************************************
DEAL_KEY_BACK PROC NEAR
RET
DEAL_KEY_BACK ENDP
;*******************************************************
DEAL_KEY_HOME PROC NEAR
MOV COL,LEFT_INDENT
CALL SET_CURSOR
RET
DEAL_KEY_HOME ENDP
;*******************************************************
DEAL_KEY_END PROC NEAR
MOV COL,RIGHT_INDENT
CALL SET_CURSOR
RET
DEAL_KEY_END ENDP
;*******************************************************
;********************************************************
RETURN PROC NEAR
MOV AX,4C00H
INT 21H
RET
RETURN ENDP
;*******************************************************
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -