C++Builder下實現埠讀寫 (轉)
C++Builder下實現埠讀寫
轉載自《世界日報》(文/魯軍張民國張劍)
----本文介紹怎樣在C++Builder下實現埠讀寫,並舉出一個具體例子。
__emit__介紹
__emit__函式一般極少用到,透過使用C++Builder的Help選單,可得到該函式的聯機幫助資訊。
----__emit__函式用法為:
void __emit__(argument,...);
----該函式為C++Builder一個內部函式,
的引數為機器語言指令。它在編譯的時侯,將機器語言指令直接嵌入目標碼
中,不必藉助於語言和彙編編譯。在Borland C++中,它的原型
在頭中說明,而C++Builder的能自動認識它,不必加入標頭檔案。
----該函式無返回值。
----下面利用該函式定義一個inportb和outportb函式,使之具有Borland C++中inportb和outportb函式的功能。
void outportb(unsigned short int port, unsigned char value)
//port引數為輸出埠地址,
//value引數為輸出值
{
__emit__(0x8b, 0x95,&port);
//把埠地址送到32位EDX暫存器中
__emit__(0x8a, 0x85,&value);
//把value送到處理器8位AL暫存器中
__emit__(0x66, 0xee);
//把AL暫存器中的值送到埠
}
----這個outportb函式呼叫後,把value引數指定的值送到port引數指定的埠。
unsigned char inportb(unsigned short int port)
//port引數為輸入埠地址
{
unsigned char value;
//指定變數value為無符號字元型
__emit__(0x8b, 0x95,&port);
//把埠地址送到處理器32位EDX暫存器中
__emit__(0x66, 0xec);
//從指定埠中將一資料位元組送到8位AL暫存器中
__emit__(0x88, 0x85,&value);
//把AL暫存器中的值賦給value
return value;//返回函式值
}
----這個inportb函式呼叫後,從port引數指定的埠讀入並返回一個位元組。
----如果想使用__emit__函式,必須熟悉80x86處理器族的機器語言指令。如果呼叫的引數是錯誤機器語言指令,則程式將非正常執行,並很容易導致當機。
應用舉例
----本程式的環境是操作和C++Builder 4.0程式語言。
----啟動C++Builder4.0,啟用選單File/New Application,建立一個工程。在表單上新增兩個Button。各
屬性設定如下: 構件名稱 屬性 屬性值
表單構件 Name Form1
Caption 讀寫埠
命令按鈕 Name Button1
Caption 寫埠
命令按鈕 Name Button2
Caption 讀埠
----在單元檔案的.h檔案新增如下程式碼:
public:
//宣告inportb和outportb
函式為公有成員函式
void __fastcall outportb(unsigned short int port, unsigned char value)
{
__emit__(0x8b,0x95,&port);
__emit__(0x8a,0x85,&value);
__emit__(0x66, 0xee);
}
//------------
unsigned char inportb(unsigned short int port)
{
unsigned char value;
__emit__(0x8b, 0x95,&port);
__emit__(0x66, 0xec);
__emit__(0x88, 0x85,&value);
return value;
}
----也可將inportb和outportb函式的實現
放在單元檔案的.cpp檔案中。C++Builder支援成員函式的實現放在類體內或
類體外的C++標準。
----分別雙擊兩個Button控制元件,產生OnClick
事件函式。在單元檔案的.cpp檔案新增如下程式碼:
void __fastcall TForm1::Button1Click(T*Sender)
{
outportb(0x2c0,0x00);
//向地址為2c0H的埠輸出資料
outportb(0x2c1,0x00);
//向地址為2c1H的埠輸出資料
}
//-------------
void __fastcall TForm1::Button2Click(TObject*Sender)
{
int i;
i=inportb(0x2c2);
//從地址為2c2H的埠讀入資料
}
----上面是一個對I/O埠進行讀寫操作的簡單例子,只要將定義inportb和outportb函式的程式碼如上所述包含到單元檔案中,透過呼叫可方便地實現I/O埠讀寫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988867/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- 實現埠對埠的聊天 (轉)
- Java Thread實現讀寫同步 (轉)Javathread
- 用 C++Builder 編寫 Tray 程式 (轉)C++UI
- 用C++Builder實現Word 97自動化 (轉)UI
- Linux環境下實現NTFS分割槽完全讀寫的方法(轉)Linux
- 用C++Builder實現工作列圖示動畫效果 (轉)C++UI動畫
- Win95/98/NT 下對記憶體、埠、中斷的直接控制和讀寫 (轉)記憶體
- Amoeba實現讀寫分離
- (11.1)iic串列埠讀寫EEPROM實驗:EEPROM介紹串列埠
- 用 C++BUILDER 實現 POP3 電子郵件的接收 (轉)C++UI
- 用C++Builder 5開發Windows下的屏保 (轉)C++UIWindows
- ProxySQL實現MySQL讀寫分離MySql
- Java實現Kafka讀寫筆記JavaKafka筆記
- Amoeba 實現 MySQL 讀寫分離MySql
- 讀寫者問題-java實現Java
- CQRS如何實現讀寫分離
- 3、使用Windows命令來實現埠轉發Windows
- 也說說c++builder中的不規則窗體的實現 (轉)C++UI
- ShardingSphere(七) 讀寫分離配置,實現分庫讀寫操作
- Python實現TCP/IP協議下的埠轉發及重定向示例PythonTCP協議
- 用C++Builder在WINNT下編制一個Service (轉)C++UI
- 防火牆埠(下)(轉載)防火牆
- Linux下PCI轉串列埠卡及USB轉串列埠Linux串列埠
- iptables實現埠轉發的過程(修改版)(轉)
- 用 C++Builder 編寫傳送電子郵件軟體 (轉)C++UI
- C++Builder 高手進階 (一)編寫彈出廣告殺手 (轉)C++UI
- 7.7 實現程式記憶體讀寫記憶體
- node的讀寫流簡易實現
- Amoeba+Mysql 實現讀寫分離MySql
- 【Mongo】Mongo讀寫分離的實現Go
- springboot實現讀寫分離Spring Boot
- mysql-proxy實現讀寫分離MySql
- socket 實現的 web 伺服器在 Windows 下的讀寫問題Web伺服器Windows
- CentOS7系統下使用Mycat實現mysql讀寫分離部署CentOSMySql
- 使用ProxySQL實現MySQL Group Replication的故障轉移、讀寫分離(一)MySql
- c++builder快捷鍵大全 (轉)C++UI
- C++BUILDER 6 新特色 (轉)C++UI