關於far*指針

  <script type="text/javascript"> srcString = contentarea.value; srcString = ubbReplace(srcString, 'all'); document.write(srcString); srcString = signaturearea.value; showSign(srcString); </script>FAR* 現在不用了, 以前用在16位代碼裏, 因爲代碼是16位的, 所以指針不夠長. 爲了表示32位的地址. 應該使用 **r 來修飾 一個指針。

16位機情況:
由於PC機的存儲器地址是由段地址和偏移地址組合而成,每個段不能超過64K字節地址,因此同一個段內的地址存取,
僅用偏移地址就可以實現,用指針時,16位就可以了。稱爲近程指針nea*,當要在另一個段內取數據時,就要跨越段,
即要指明存取段的段地址和偏移地址,這時段地址寄存器所存段地址要變,因此在使用指針指向另一個段內地址時,
就要用32位表示(即段地址:偏移地址),這類指針,稱爲遠程指針,是***型.


far*爲遠程指針 
    
    遠程指針是指32位的指針,它表示段地址:偏移地址,如定義遠程指針P指向B500段的2號地址,即B500:0002,則可寫作:
cha* far*p=(cha* far*)0xB5000002;
因而用遠程指針可以指向任何的數據段內地址,在大數據內存模式下,當跨越段進行數據存取時(即存取超過64K的數據),可以採用
遠程指針。當使用far型指針時,因要進行跨段尋址,數據段寄存器的值要更換,因而加長了程序的執行時間。
    另外遠程指針的值在進行加減時,只有偏移的地址部分進行運算,段地址不參加運算,即段地址不變,因此會出現折回現象。 

 
發佈了26 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章