📄 ck.asm
字号:
HEAD EQU 41AH
TAIL EQU 41CH
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START: JMP GO
OLD_OFF DW 0
OLD_SEG DW 0
KEYTABLE DW 100 DUP(0)
TABLETAIL LABEL NEAR
NEW_INT9:
PUSHF
CALL DWORD PTR CS:OLD_OFF
PUSH ES
PUSH DI
PUSH DS
PUSH SI
PUSH BX
PUSH AX
XOR AX,AX
MOV DS,AX
MOV SI,HEAD
MOV AX,[SI]
MOV SI,TAIL
MOV BX,[SI]
CMP AX,BX
JNZ CHECK
POP AX
POP BX
POP SI
POP DS
POP DI
POP ES
IRET
CHECK: MOV DI,AX
MOV AX,40H
MOV ES,AX
MOV AX,CS
MOV DS,AX
NEXT:
MOV SI,OFFSET KEYTABLE
MOV AX,ES:[DI]
FIND:
CMP WORD PTR [SI],0
JZ SKIP
CMP AX,[SI]
JZ FOUNDIT
SKIP: ADD SI,4
CMP SI,OFFSET TABLETAIL
JZ OVER
JMP FIND
FOUNDIT:
ADD SI,2 ; FOUND IT! CHANGE THE KEY.
MOV AX,[SI]
MOV ES:[DI],AX
FINDOVER:
ADD DI,2
CMP DI,3EH
JNZ NORMAL
MOV DI,1EH
NORMAL: CMP DI,BX
JNZ NEXT
OVER: POP AX
POP BX
POP SI
POP DS
POP DI
POP ES
IRET
intover:
GETKEY PROC NEAR
PUSH DS
PUSH SI
PUSH BX
MOV AX,40H
MOV DS,AX
WAITKEY:
MOV SI,1AH
MOV AX,[SI]
MOV SI,1CH
CMP AX,[SI]
JZ WAITKEY
MOV SI,1AH
MOV BX,[SI]
MOV AX,[BX]
ADD BX,2
CMP BX,3EH
JNZ SKIP2
MOV BX,1EH
SKIP2: MOV [SI],BX
POP BX
POP SI
POP DS
RET
GETKEY ENDP
GO:
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
MOV AX,CS
MOV ES,AX
MOV DI,OFFSET KEYTABLE
MOV CX,50
;NOW , START TO GET KEY.
READKEY:
MOV DX,OFFSET MESS1
MOV AH,09H
INT 21H
CALL GETKEY
CMP AX,11BH
JZ OK
STOSW
MOV DX,OFFSET MESS2
MOV AH,09H
INT 21H
CALL GETKEY
STOSW
LOOP READKEY
OK:
MOV AX,CS
MOV ES,AX
XOR AX,AX
MOV DS,AX
MOV DI,OFFSET OLD_OFF
MOV SI,4*9
CLD
LODSW
STOSW
LODSW
STOSW
CLI
MOV SI,4*9
MOV AX,OFFSET NEW_INT9
MOV [SI],AX
INC SI
INC SI
MOV AX,SEG NEW_INT9
MOV [SI],AX
STI
MOV AX,OFFSET INTOVER
SUB AX,OFFSET START
MOV CL,4
SHR AX,CL
ADD AX,12H
MOV DX,AX
MOV AX,3101H
INT 21H
string db 'Please input the key you want to change(press ESC to over):','$'
mess1 db 0dh,0ah,'Change key: ','$'
mess2 db 'to key:','$'
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -