亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASM > 正文

CB和匯編混合編程

2019-11-17 05:43:46
字體:
來源:轉載
供稿:網友
  我在寫定時提醒 時碰到一個問題:怎么發聲?我開始是用 32 位 Windows 的 API 函數 MessageBeep( -1 ); 那聲音又小又難聽。原來在 16 位的 Windows API 中有的一套 PlaySound 的函數在 32 位 Windows 中又取消了, DOS 下的 Sound 函數更是早就不能用了。

幸好我對硬件還算了解,知道 PC Speaker 的聲音是通過系統中的定時計數芯片 8253/8254 產生的,只要通過硬件端口訪問芯片就可以產生想要的聲音了。 問題在于 Windows 是工作在保護模式下,大多數硬件端口都要在特權級0(PL0, 這是搞硬件的人的說法,后來我才知道在搞 OS 和 Driver 的人中是叫 Ring 0 的, 這才比較正確,因為假如不是 Intel 的 CPU 可能就不叫 PL 了)中, 即操作系統核心態中,才可以訪問(比如硬盤口,訪問時是不會出錯,但結果不正確), 這也就意味著要寫成驅動程序的形式,天啊! VxD 和 WDM 我都不會,怎么辦? 事實上沒有這么困難,像 PC Speaker 這種無傷大體的端口, Windows 是不保護的, 即在用戶態下也可以正常訪問。

現在還有一個問題就是用什么語句訪問端口? DOS 中 C 語言里的那幾個端口操作函數在 Windows 中都取消了,只好用匯編。我開始是用 ASM 語句插入匯編代碼,結果發現 BCB 在編譯時碰到 ASM 時會把 BCB 文件編譯成一個巨大的 ASM 文件, 再重新啟動匯編程序匯編,速度太慢。最后采用了我在 DOS 編程時常用的方法, 做一個單獨的 ASM 文件加入工程文件中。

下面是兩個用于發聲的函數,最前面聲明了兩個外部 C 調用形式的函數, 是兩個用匯編寫的字節端口輸入/輸出函數,注重:在 C++ 中一定要注重外部函數應為 C 調用形式。程序中多處強制類型轉換是為了不出現警告,我對程序一向要求 Error/Warning/Hint 全為 0。


extern "C" {
Byte InPortB( int aPort );
void OutPortB( int aPort, Byte aValue );
}

void __fastcall Sound( int aFreq )
{
if ( ( aFreq >= 20 ) && ( aFreq <= 20000 ) )
{
aFreq = 1193181 / aFreq;
Byte b = InPortB( 0x61 );
if ( ( b & 3 ) == 0 )
{
OutPortB( 0x61, Byte( b 3 ) );
OutPortB( 0x43, 0xb6 );
}
OutPortB( 0x42, ( Byte )aFreq );
OutPortB( 0x42, ( Byte )( aFreq >> 8 ) );
}
}

void __fastcall NoSound( void )
{
Byte b = Byte( InPortB( 0x61 ) & 0xfc );
OutPortB( 0x61, b );
}


下面是兩個端口 I/O 的函數的匯編源程序,即定時提醒(Alarm)中的 IOPortB.asm 文件的全部內容,是在 BCB 產生的 ASM 文件基礎上作了一點點的優化。 注重:
1 、最前面的 .386p 必不可少,指定用 32 位保護模式,至于 modal flat 我也不太明白是 What ,跟 16 位時的 tiny, small... 不同,大概是指用 32 位保護模式的平坦地址間模式吧;
2 、在 32 位保護模式中, CS/ip 為 32 位,參數在棧中的位置與 16 位時不同;
3 、最后的 public 也不可少,前綴的下劃線也是必須的,另外記得用大小寫敏感方式匯編。


.386p
model flat
_TEXT segment dWord public use32 ''CODE''

_InPortB PRoc near
push ebp
mov ebp, esp
mov dx, word ptr [ebp + 8]
in al, dx
pop ebp
ret
_InPortB endp

_OutPortB proc near
push ebp
mov ebp, esp
mov dx, word ptr [ebp + 8]
mov al, byte ptr [ebp + 12]

out dx, al
pop ebp
ret
_OutPortB endp

public _InPortB
public _OutPortB

_TEXT ends

end


注重:此法在 Windows NT 上行不通,因為 Windows NT 保護了所有的端口,必須用 WDM,連 VxD 也不行,它只用于 Windows 95 ,在 Windows 98 中也可以用,但 Windows NT 和 windows 2000 都不支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线国产| 欧美日韩另类视频| 日韩中文字在线| 久久成人亚洲精品| 久久精品中文字幕免费mv| 欧美大尺度在线观看| 庆余年2免费日韩剧观看大牛| 国产精品男女猛烈高潮激情| 神马久久桃色视频| 揄拍成人国产精品视频| 国产精品在线看| 日韩在线视频线视频免费网站| 亚洲精品成人免费| 亚洲女同精品视频| 亚洲小视频在线| 日韩成人在线观看| 亚洲一区二区三区毛片| 欧美一级高清免费播放| 久久av红桃一区二区小说| 日韩av最新在线观看| 亚洲综合在线中文字幕| 国产精品欧美一区二区三区奶水| 8090成年在线看片午夜| 亚洲午夜未满十八勿入免费观看全集| 日韩欧美大尺度| 精品久久久久久亚洲精品| 欧美在线视频一区二区| 亚洲成人在线视频播放| 日本三级韩国三级久久| 91精品国产高清自在线看超| 伊人久久久久久久久久久| 国产精品久久久久久久久久| 欧美性猛交xxxx免费看久久久| 黄色一区二区三区| 亚洲高清一区二| 红桃视频成人在线观看| 97在线视频国产| 亚洲欧美日韩视频一区| 亚洲欧美综合v| 国产一区二区激情| 一个人看的www欧美| 亚洲欧美日韩国产中文专区| 久久天天躁狠狠躁夜夜爽蜜月| 成人欧美一区二区三区黑人| 国产在线播放91| 欧洲亚洲在线视频| 国产亚洲精品综合一区91| 在线a欧美视频| 久久久这里只有精品视频| 日韩风俗一区 二区| 国产综合香蕉五月婷在线| 97国产精品免费视频| 亚洲午夜av电影| 中文字幕综合在线| 亚洲第一网站免费视频| 日韩中文av在线| 久久久久久91香蕉国产| 欧美高清视频在线播放| 国产精品视频网站| 日韩欧中文字幕| 疯狂做受xxxx高潮欧美日本| 最近2019年中文视频免费在线观看| 国产精品久久久久7777婷婷| 欧美精品电影在线| 国产有码一区二区| xxxxx成人.com| 亚洲国产古装精品网站| 色噜噜国产精品视频一区二区| 日本久久久a级免费| 国产一区二区在线免费视频| 日韩精品黄色网| 日韩成人av在线播放| 亚洲欧美精品suv| 欧美成人合集magnet| 欧美贵妇videos办公室| 日韩精品黄色网| 成人97在线观看视频| 国产精品视频久久久| 欧美成人精品一区二区| 色妞在线综合亚洲欧美| 亚洲国产精品一区二区三区| 国产男女猛烈无遮挡91| 日本在线观看天堂男亚洲| 亚洲男女自偷自拍图片另类| 国产成人精品视频在线| 精品夜色国产国偷在线| 久久国产精品久久精品| 欧美亚洲视频一区二区| 亚洲aⅴ男人的天堂在线观看| 91国内精品久久| 国产日本欧美一区| 国产精品96久久久久久| 久久久亚洲影院你懂的| 91sa在线看| 少妇激情综合网| 国产a级全部精品| xvideos亚洲| 国内精品一区二区三区| 国产欧美日韩中文字幕| 日韩欧美中文在线| 亚洲精品v天堂中文字幕| 久久精品久久久久| 欧美日韩亚洲视频一区| 国产激情视频一区| 日韩精品视频观看| 亚洲精品一区中文字幕乱码| 国产一区二区三区在线播放免费观看| 亚洲视频国产视频| 日韩在线观看电影| 国产亚洲精品日韩| 久久精品国产99国产精品澳门| 国产精品狼人色视频一区| 日韩av免费看| 91麻豆桃色免费看| 日韩综合中文字幕| 日本在线观看天堂男亚洲| 国产精品老女人视频| 欧美一乱一性一交一视频| 91精品视频大全| 国产精品成人一区二区三区吃奶| 精品亚洲一区二区| 国产精品视频999| 日韩福利在线播放| 国产精品88a∨| 精品国产一区久久久| 91高潮精品免费porn| 国产精品自产拍在线观看| 亚洲国产欧美一区二区三区同亚洲| 另类图片亚洲另类| 久久99精品久久久久久琪琪| 91国产视频在线播放| 亚洲第一二三四五区| 国产精品私拍pans大尺度在线| 国产精品一二三视频| 亚洲国产精品字幕| 一本大道久久加勒比香蕉| 日韩欧中文字幕| 国产精品极品在线| 狠狠色香婷婷久久亚洲精品| 社区色欧美激情 | 精品视频在线导航| 色综合久久88色综合天天看泰| 国产亚洲激情在线| 国产欧美日韩视频| 国产成人精品av| 国产日韩欧美在线播放| 欧美成人剧情片在线观看| 国产精品国产自产拍高清av水多| 国产日韩精品入口| 57pao成人永久免费视频| 精品国模在线视频| 成人做爰www免费看视频网站| www.欧美精品一二三区| 一区二区在线视频播放| 久热精品视频在线观看一区| 国产亚洲精品成人av久久ww| 中国人与牲禽动交精品| 在线国产精品播放| 国产精品免费网站| 姬川优奈aav一区二区| 欧美精品在线观看| 日韩欧美成人区| 日韩大片在线观看视频| 国产视频在线观看一区二区|