国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

I/O端口讀寫(xiě)的實(shí)現(xiàn)

2019-11-17 05:41:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  細(xì)心的讀者會(huì)發(fā)現(xiàn),C++Builder不再支持如inportb()、outportb()一類(lèi)I/O端口讀寫(xiě)指令了。準(zhǔn)確地說(shuō),在Windows環(huán)境下,BorlandC++僅支持16位應(yīng)用程序的端口操作,對(duì)32位應(yīng)用程序的端口操作不再支持,而C++Builder開(kāi)發(fā)出來(lái)的程序是32位的。我個(gè)人以為,這是C++Builder設(shè)計(jì)者的敗筆。因?yàn)镻C機(jī)中,I/O地址空間與內(nèi)存地址空間從來(lái)都是各自獨(dú)立的。看看Delphi,不就通過(guò)Port數(shù)組實(shí)現(xiàn)了對(duì)I/O端口的訪(fǎng)問(wèn)了嗎?搞不清楚為什么C++Builder就沒(méi)有提供類(lèi)似的機(jī)制?下面這幾個(gè)函數(shù)是筆者從網(wǎng)上淘下來(lái)的,經(jīng)過(guò)驗(yàn)證,在Windows95環(huán)境下,的確可實(shí)現(xiàn)對(duì)I/O端口的讀寫(xiě)。讀者可以借鑒使用。

void outportb(unsigned short int port,unsigned char value)
{
//move dx,*(&port);
__emit__(0x8b,0x95,&port);
//mov al,*(&value);
__emit__(0x8a,0x85,&value);
//out dx,al;
__emit__(0x66,0xee);
}

void outportw(unsigned short int port,unsigned short int value)

{
//move dx,*(&port);
__emit__(0x8b,0x95,&port);
//mov ax,*(&value);
__emit__(0x66,0x8b,0x85,&value);
//out dx,ax;
__emit__(0xef);
}

unsigned char inportb(unsigned short int port)

{
unsigned char value;
//move dx,*(&port);
__emit__(0x8b,0x95,&port);
//in al,dx;
__emit__(0x66,0xec);
//mov *(&value),al;
__emit__(0x88,0x85,&value);
return value;
}

unsigned short int inportw(unsigned short int port)
{
unsigned short int value;
//move dx,*(&port);
__emit__(0x8b,0x95,&port);
//in ax,dx
__emit__(0xed);
//mov *(&value),ax
__emit__(0x66,0x89,0x85,&value);
return value;
}

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南安市| 乌鲁木齐市| 惠安县| 巴林右旗| 宝清县| 勃利县| 长岛县| 弥渡县| 揭西县| 津市市| 岳阳市| 宜兴市| 平阳县| 海晏县| 洪湖市| 石景山区| 东阳市| 前郭尔| 新化县| 察哈| 鸡西市| 鹤壁市| 改则县| 山西省| 富民县| 本溪| 四平市| 新郑市| 翁源县| 曲沃县| 阿拉善盟| 迭部县| 察雅县| 平顶山市| 双柏县| 彭泽县| 南皮县| 武定县| 泾川县| 达拉特旗| 河北区|