📄 int_keyboard.asm
字号:
[BITS 32]
[GLOBAL _keyboard_interrupt]
[SECTION .text]
_keyboard_interrupt:
pusha
in al,0x60 ; 从 0x60 端口获得键盘输入(扫描码)
cmp al,10 ; 看是否是数字键
jg .return
cmp al,2
jl .return
add al,47 ; 转换成 ASCII 码
mov bl,al ; 保存
; 得到光标位置
mov dx,0x3d4
mov al,14
out dx,al
mov dx,0x3d5
in al,dx
mov ch,al ; ch 存放高八位
mov dx,0x3d4
mov al,15
out dx,al
mov dx,0x3d5
in al,dx
mov cl,al ; cl 存放低八位
mov ax,cx ; 保存当前光标位置
shl ax,1 ; 计算偏移量
add eax,0xb8000
mov esi,eax
mov [esi],bl ; 显示此输入
; 设置新光标位置
inc cx
mov ax,cx
mov dx,0x3d5
out dx,al
mov dx,0x3d4
mov cx,ax
mov al,14
out dx,al
mov al,ch
mov dx,0x3d5
out dx,al
.return
mov al,0x20 ; 告诉硬件中断处理完毕
out 0x20,al
popa
iret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -