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

📄 int_keyboard.asm

📁 国内的一个小型操作系统
💻 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 + -