用C调用BIOS中断,读键函数帮忙解释一下
发布网友
发布时间:2023-07-15 05:22
我来回答
共1个回答
热心网友
时间:2024-11-19 05:34
int key()
{
union REGS rg;\\定义联合体-〉寄存器=rg
rg.h.ah=0;\\等同于汇编 mov ah 00h,赋值是为了初始化)
int86(0x16,&rg,&rg);\\等同于c语言int 16h)
return rg.h.ah;\\返回AX高字节的值
}
1. REGS是CPU的一个寄存器的集合,也就是寄存器集合(Registers)的缩写
2. 这句话的作用是进行寄存器的初始化(所有的I/O指令都使用AH&AL寄存器与外界设备传送数据),等同于mov ah 00h
数据寄存器分为:
AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.
BH&BL=BX(base):基址寄存器,常用于地址索引;
CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用
3.同上,AH寄存器置0,就是为了初始化寄存器
4.
0x16这个是标明进行键盘中断int 16h的调用,记住就行了。
第1个参数:intno=0x16; //调用键盘中断int 16h
第2个参数:inregs为调用时个寄存器的值;
第3个参数:oregs为调用后返回时各寄存器的状态值,
5.
int86() 函数的功能是提供通用的 8086 软中断接口(关于中断信息,请自行参考相关文档或书籍)。
其原型是: int86(int intno, union REGS* inregs, union REGS* outregs);
intno 参数指定中断号,inregs 与 outregs 分别是入口参数寄存器和出口参数寄存器。
入口参数提供信息,结果则从出口参数中获取——可能入口与出口是同一组寄存器,这是允许的。