扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
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指令都使用AHAL寄存器与外界设备传送数据),等同于mov ah 00h
数据寄存器分为:
AHAL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.
BHBL=BX(base):基址寄存器,常用于地址索引;
CHCL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
DHDL=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 分别是入口参数寄存器和出口参数寄存器。
入口参数提供信息,结果则从出口参数中获取——可能入口与出口是同一组寄存器,这是允许的。
我估计你分数给的在高也没人回答。来个这样的代码太麻烦了。而且百度金币用处也不大。
不过,我可以写几个鼠标函数给你参考一下。
首先了解一下鼠标的中断。
_ax=0x01
表示显示光标
_ax=0x02
停止显示光标
_ax=0x03
读取光标位置与案件
_ax=0x04
设置光标位置
所以啊。根据这四个中断,有以下几个函数
----------------------------------------------------
void
mouseon(void)//鼠标光标显示
{
_ax
=
0x01;
geninterrupt(0x33);
}
----------------------------------------------------
void
mouseoff(void)//鼠标光标隐藏
{
_ax
=
0x02;
geninterrupt(0x33);
}
---------------------------------------------------
void
mousesetxy(int
x,int
y)//设置当前位置
{
_cx
=
x,
_cd
=
y;
_ax
=
0x04;
geninterrupt(0x33);
}
---------------------------------------------------
int
leftpress(void)//鼠标左键按下
{
_ax
=
0x33;
geninterrupt(0x33);
return(_bx1);
}
-----------------------------------------------------
鼠标右键的应该也会了吧。不过要return(_bx2);
-----------------------------------------------------
void
mousegetxy(void)//得到当前位置
{
_ax
=
0x33;
geninterrupt(0x33);
mousex
=
_cx;
mousey
=
_dx;
}
---------------------------------------------------------------
最好要复制粘贴,打字打得手疼。
调用int86库函数。调用时向它传递的第1个参数是16,第2、第3变量都是联合体r的入口地址。
函数名: int86
功 能: 通用8086软中断接口
用 法: int int86(int intr_num, union REGS *inregs, union REGS *outregs);
程序例:
#include stdio.h
#include conio.h
#include dos.h
#define VIDEO 0x10
void movetoxy(int x, int y)
{
union REGS regs;
regs.h.ah = 2; /* set cursor postion */
regs.h.dh = y;
regs.h.dl = x;
regs.h.bh = 0; /* video page 0 */
int86(VIDEO, regs, regs);
}
int main(void)
{
clrscr();
movetoxy(35, 10);
printf("Hello/n");
return 0;
}
他们是80X86寄存器组
1:通用寄存器
数据寄存器:AX,BX,CX,DX
AX(accumulator)用于累加器,所以它是算术运算的主要寄存器。在乘,除等指令中用来存放操作数。
BX(base)可以作为通用寄存器使用。它经常用作基址寄存器。
CX(count)可以作为通用寄存器使用。此外常用来保存计数值,如在移位指令,循环(LOOP)和串处理指令中用作隐含的计数器。
DX(data)可以作为通用寄存器使用。一般在作双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。此外,DX可用来存放I|O的端口地址。
SP,BP,SI,DI可以像数据寄存器一样在去处过程中存放操作数。
SP:stack pointer;堆栈指针寄存器
SI:source index;源变址寄存器
BP:base pointer;基址指针寄存器
DI:destination index;目的变址寄存器
2:专用寄存器
IP:instruction pointer;指令指针寄存器.用于存放代码段的偏移地址,它与段寄存器SC联用确定下一条指令的物理地址.
SP:用来存放栈顶的偏移地址.
FLAGS:program status word,PSW).这是一个存放条件标志,控制标志和系统标志的寄存器.
标志寄存器:
条件码标志:溢出标志(overflow flag,OF).符号标志(sign flag.SF).零标志(zero flag,ZF).进位标志(carry flag,CF).
系统内核程序啊。?
偶看不懂。抱歉。不过我是来消灭零回复。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流