HsMod:炉石传说55项功能全能插件,彻底改变你的游戏体验 [特殊字符]
2026/6/16 0:33:54
CPU 通过地址总线、数据总线、控制总线与外设交互,核心方式有两种:
IN/OUT指令访问;MOV)操作。8086 中主流采用端口映射,例如:
IN AL, 端口号(8 位端口)、IN AX, 端口号(16 位端口);OUT 端口号, AL(8 位)、OUT 端口号, AX(16 位)。| 编址方式 | 特点 | 指令 |
|---|---|---|
| 独立编址(I/O 映射) | 地址空间与内存分离,专用指令 | IN/OUT |
| 统一编址(内存映射) | 外设 = 内存单元,通用内存指令 | MOV |
中断是外设主动向 CPU 发起的 “请求”,让 CPU 暂停当前程序,优先处理外设任务(如键盘输入、串口数据接收)。
| 类型 | 触发方式 | 例子 |
|---|---|---|
| 内部中断(软中断) | 指令触发(如 INT n)或 CPU 异常 | 除法错误(0 号)、INT 21H(DOS 功能调用) |
| 外部中断(硬中断) | 外设硬件信号触发 | 键盘中断(IRQ1)、定时器中断(IRQ0) |
8086 在内存 00000H~003FFH(共 1KB)建立中断向量表,每个中断占 4 字节(2 字节偏移 + 2 字节段地址),对应中断号 0~255。
中断号 n 的向量地址:n × 4(偏移)、n × 4 + 2(段地址)。
INTR(可屏蔽中断)或NMI(不可屏蔽中断)信号;INTR需满足:IF=1(开中断)、当前指令执行完毕;IRET(恢复 FLAGS、CS、IP),返回原程序。8086CPU 对 PC 机键盘的处理是一个从硬件触发到软件解析的分层过程,核心依赖扫描码生成、9 号硬件中断响应、BIOS 中断处理和缓冲区管理四大环节,最终将键盘输入转化为程序可识别的 ASCII 码或控制信号。
键盘内部的扫描芯片会实时检测按键的按下 / 松开状态,生成扫描码(1 字节)并通过 I/O 端口60H传输给 8086CPU。
A键的通码是1EH)。A键的断码是9EH,由通码1EH | 0x80得到)。60H端口后,键盘会向 CPU 发送9 号可屏蔽中断请求,触发后续处理。8086CPU 通过中断向量表找到 9 号中断的服务程序入口,执行键盘中断处理逻辑,步骤如下:
IF=1(开中断),否则忽略中断请求。CS、IP、FLAGS寄存器值到栈中,保护程序执行上下文。60H端口读取扫描码,区分通码 / 断码。61H端口写入控制信号,告知键盘已接收扫描码(先置最高位为 1,再复位为 0)。scantab),将字符键的扫描码转换为 ASCII 码;功能键(如 Shift、Ctrl)则更新键盘状态字(存储在40:17H内存单元)。8086 将处理后的键盘数据存入BIOS 键盘缓冲区(位于40:1EH,共 15 个输入项,每项 2 字节):
bufpt1(读指针)和bufpt2(写指针)管理读写,满时丢弃新输入,空时等待按键。程序通过BIOS 16H 中断或DOS 21H 中断从缓冲区读取输入,常见方式:
AL=ASCII码,AH=扫描码。asm
mov ah, 00H int 16H ; AL=字符,AH=扫描码40:1EH的缓冲区指针,直接读取未处理的键盘数据。