int key()
創(chuàng)新互聯(lián)專(zhuān)注于沙縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。沙縣網(wǎng)站建設(shè)公司,為沙縣等地區(qū)提供建站服務(wù)。全流程按需定制,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
{
union REGS rg;\\定義聯(lián)合體-〉寄存器=rg
rg.h.ah=0;\\等同于匯編 mov ah 00h,賦值是為了初始化)
int86(0x16,rg,rg);\\等同于c語(yǔ)言int 16h)
return rg.h.ah;\\返回AX高字節(jié)的值
}
1. REGS是CPU的一個(gè)寄存器的集合,也就是寄存器集合(Registers)的縮寫(xiě)
2. 這句話(huà)的作用是進(jìn)行寄存器的初始化(所有的I/O指令都使用AHAL寄存器與外界設(shè)備傳送數(shù)據(jù)),等同于mov ah 00h
數(shù)據(jù)寄存器分為:
AHAL=AX(accumulator):累加寄存器,常用于運(yùn)算;在乘除等指令中指定用來(lái)存放操作數(shù),另外,所有的I/O指令都使用這一寄存器與外界設(shè)備傳送數(shù)據(jù).
BHBL=BX(base):基址寄存器,常用于地址索引;
CHCL=CX(count):計(jì)數(shù)寄存器,常用于計(jì)數(shù);常用于保存計(jì)算值,如在移位指令,循環(huán)(loop)和串處理指令中用作隱含的計(jì)數(shù)器.
DHDL=DX(data):數(shù)據(jù)寄存器,常用于數(shù)據(jù)傳遞。
他們的特點(diǎn)是,這4個(gè)16位的寄存器可以分為高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器可以分別尋址,并單獨(dú)使用
3.同上,AH寄存器置0,就是為了初始化寄存器
4.
0x16這個(gè)是標(biāo)明進(jìn)行鍵盤(pán)中斷int 16h的調(diào)用,記住就行了。
第1個(gè)參數(shù):intno=0x16; //調(diào)用鍵盤(pán)中斷int 16h
第2個(gè)參數(shù):inregs為調(diào)用時(shí)個(gè)寄存器的值;
第3個(gè)參數(shù):oregs為調(diào)用后返回時(shí)各寄存器的狀態(tài)值,
5.
int86() 函數(shù)的功能是提供通用的 8086 軟中斷接口(關(guān)于中斷信息,請(qǐng)自行參考相關(guān)文檔或書(shū)籍)。
其原型是: int86(int intno, union REGS* inregs, union REGS* outregs);
intno 參數(shù)指定中斷號(hào),inregs 與 outregs 分別是入口參數(shù)寄存器和出口參數(shù)寄存器。
入口參數(shù)提供信息,結(jié)果則從出口參數(shù)中獲取——可能入口與出口是同一組寄存器,這是允許的。
我估計(jì)你分?jǐn)?shù)給的在高也沒(méi)人回答。來(lái)個(gè)這樣的代碼太麻煩了。而且百度金幣用處也不大。
不過(guò),我可以寫(xiě)幾個(gè)鼠標(biāo)函數(shù)給你參考一下。
首先了解一下鼠標(biāo)的中斷。
_ax=0x01
表示顯示光標(biāo)
_ax=0x02
停止顯示光標(biāo)
_ax=0x03
讀取光標(biāo)位置與案件
_ax=0x04
設(shè)置光標(biāo)位置
所以啊。根據(jù)這四個(gè)中斷,有以下幾個(gè)函數(shù)
----------------------------------------------------
void
mouseon(void)//鼠標(biāo)光標(biāo)顯示
{
_ax
=
0x01;
geninterrupt(0x33);
}
----------------------------------------------------
void
mouseoff(void)//鼠標(biāo)光標(biāo)隱藏
{
_ax
=
0x02;
geninterrupt(0x33);
}
---------------------------------------------------
void
mousesetxy(int
x,int
y)//設(shè)置當(dāng)前位置
{
_cx
=
x,
_cd
=
y;
_ax
=
0x04;
geninterrupt(0x33);
}
---------------------------------------------------
int
leftpress(void)//鼠標(biāo)左鍵按下
{
_ax
=
0x33;
geninterrupt(0x33);
return(_bx1);
}
-----------------------------------------------------
鼠標(biāo)右鍵的應(yīng)該也會(huì)了吧。不過(guò)要return(_bx2);
-----------------------------------------------------
void
mousegetxy(void)//得到當(dāng)前位置
{
_ax
=
0x33;
geninterrupt(0x33);
mousex
=
_cx;
mousey
=
_dx;
}
---------------------------------------------------------------
最好要復(fù)制粘貼,打字打得手疼。
調(diào)用int86庫(kù)函數(shù)。調(diào)用時(shí)向它傳遞的第1個(gè)參數(shù)是16,第2、第3變量都是聯(lián)合體r的入口地址。
函數(shù)名: 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:通用寄存器
數(shù)據(jù)寄存器:AX,BX,CX,DX
AX(accumulator)用于累加器,所以它是算術(shù)運(yùn)算的主要寄存器。在乘,除等指令中用來(lái)存放操作數(shù)。
BX(base)可以作為通用寄存器使用。它經(jīng)常用作基址寄存器。
CX(count)可以作為通用寄存器使用。此外常用來(lái)保存計(jì)數(shù)值,如在移位指令,循環(huán)(LOOP)和串處理指令中用作隱含的計(jì)數(shù)器。
DX(data)可以作為通用寄存器使用。一般在作雙字長(zhǎng)運(yùn)算時(shí)把DX和AX組合在一起存放一個(gè)雙字長(zhǎng)數(shù),DX用來(lái)存放高位字。此外,DX可用來(lái)存放I|O的端口地址。
SP,BP,SI,DI可以像數(shù)據(jù)寄存器一樣在去處過(guò)程中存放操作數(shù)。
SP:stack pointer;堆棧指針寄存器
SI:source index;源變址寄存器
BP:base pointer;基址指針寄存器
DI:destination index;目的變址寄存器
2:專(zhuān)用寄存器
IP:instruction pointer;指令指針寄存器.用于存放代碼段的偏移地址,它與段寄存器SC聯(lián)用確定下一條指令的物理地址.
SP:用來(lái)存放棧頂?shù)钠频刂?
FLAGS:program status word,PSW).這是一個(gè)存放條件標(biāo)志,控制標(biāo)志和系統(tǒng)標(biāo)志的寄存器.
標(biāo)志寄存器:
條件碼標(biāo)志:溢出標(biāo)志(overflow flag,OF).符號(hào)標(biāo)志(sign flag.SF).零標(biāo)志(zero flag,ZF).進(jìn)位標(biāo)志(carry flag,CF).
系統(tǒng)內(nèi)核程序啊。?
偶看不懂。抱歉。不過(guò)我是來(lái)消滅零回復(fù)。