2013-02-17 20 views
1

問題是:我需要從BIOS內存中獲取「計算機」類型。我知道,我能做到這一點在FASM這樣(我的程序和所有的段都是16位):在fasm(MS-DOS)中訪問0xF000FFFE(計算機類型)的內存

mov al, [0xF000FFFE] 

但returnes爲零,這是不對的,因爲在Turbo C++ 3.1

等效代碼
UCHAR pcType = *((UCHAR*)0xF000FFFE); 

當我使用LARGE模型(在代碼生成設置中)時,我的電腦返回了右'類型',。 那麼如何解決它在fasm? (例如我知道,masm具有.model指令,但在fasm中沒有這樣的東西)。請幫助...

+0

不......試過了。而我也得到一些其他地址爲零,而在C + +它是沒問題的...... – deathmood 2013-02-17 19:19:59

+0

據我瞭解,首先我應該進入虛幻模式,所以我的電話應該看起來像這樣: mov ax,0xF000 mov ds,ax mov al,[0xFFFE] 這很好用)) – deathmood 2013-02-17 20:34:02

回答

0

它適用於Turbo C,因爲它將32位值解釋爲segment:offset對,而不是平面指針。如果要使用平面指針,則應使用地址0xFFFFFFFE(如果Flash存儲器映射尚未被BIOS禁用)或0xFFFFE(即與指針F000:FFFE對應的線性存儲器地址)。這兩種方法都只能在虛幻模式下工作,因爲它們使用大於64K的偏移量,這在純真實模式下是不可能的。最簡單的可能是使用普通的16位段:偏移地址,就像你在評論中提到的那樣,因爲這將始終有效。