⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 112.asm

📁 改变键盘中断
💻 ASM
字号:
data SEGMENT
data ENDS

stack1 SEGMENT para stack
stack1 ENDS

code SEGMENT
ASSUME CS:code,DS:data,ES:data,SS:stack1

ORG 100h
start:

PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI

MOV CL,74h      ;设成灰底白字
MOV DI,0
MOV BX,0
MOV DX,0b800h     ;显示缓冲区启始段地址b800h
MOV DS,DX
qingping:      ;清屏幕
MOV AL,20h
MOV DS:[BX],AL
ADD BX,1
MOV AL,CL
MOV DS:[BX],AL
;add cl,1     ;此语句可实现16色背景
ADD BX,1
CMP BX,1000h
JZ beifenkeyint
;JMP tianchong

beifenkeyint:    ;备份键盘中断转向(向量)地址
MOV AX,0
MOV DS,AX
MOV AX,WORD PTR DS:[24h]
MOV WORD PTR CS:[1a0h],AX
MOV AX,WORD PTR DS:[26h]
MOV WORD PTR CS:[1a2h],AX
              
           ;重新设置键盘中断转向(向量)地址
CLI
MOV AX,0adh
OUT 64h,AX
MOV AX,200h
MOV WORD PTR DS:[24h],AX 
MOV AX,CS
MOV WORD PTR DS:[26h],AX 
MOV AX,ES
MOV DS,AX
MOV AX,0aeh
OUT 64h,AX
STI

keyWAIT:     ;等待键盘输入
NOP
STI
NOP
MOV AL,ES:[1a4h]       ;检测ESC键
CMP AL,1
JZ exit       ;ESC键按下则退出
NOP
NOP
mov al,20h
out 20h,al
JMP keyWAIT

EXIT:        ;准备退出程序并恢复键盘中断转向(向量)地址
CLI
MOV AX,0adh
OUT 64h,AX
MOV AX,0
MOV DS,AX
MOV AX,WORD PTR ES:[1a0h]
MOV WORD PTR DS:[24h],AX 
MOV AX,WORD PTR ES:[1a2h]
MOV WORD PTR DS:[26h],AX 
MOV AX,ES
MOV DS,AX
MOV AX,0aeh
OUT 64h,AX
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
STI
INT 20h

ORG start+0a0h
c1 DB 10h DUP(?)     ;建立临时数据存储区


ORG start+100h

keyint9:   ;键盘中断9处理程序
             ; 取键盘缓冲区状态
CLI
MOV AL,0
MOV ES:[1a4h],AL
IN AL,64h
AND AL,3
ADD AL,30h
MOV DL,AL
CALL xianshi

              ;读取键盘扫描码
IN AL,60h
MOV ES:[1a4h],AL

              ;显示AL的高4位16进制代码
MOV BL,AL
MOV CL,4
ROR AL,CL
AND AL,0fh
CALL bijiao
CALL xianshi     
              ;显示AL的低4位16进制代码
MOV AL,BL
AND AL,0fh
CALL bijiao
CALL xianshi              

              ; 再次读取键盘缓冲区状态
IN AL,64h
AND AL,3
ADD AL,30h
CALL xianshi
              
IRET      ;键盘中断返回

bijiao:
CMP AL,9
JG jia41h
ADD AL,30H
RET

jia41h:
SUB AL,0ah
ADD AL,41h
RET

xianshi:
PUSH DS
PUSH AX
MOV AX,0b800h
MOV DS,AX
CMP DI,1000h
;JZ exitxianshi
POP AX
MOV DS:[DI],AL
ADD DI,2
POP DS
RET

code ENDS
END  start 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -