日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

一步步编写操作系统 33 利用bios中断0x15子功能0xe820获取内存

發布時間:2023/12/10 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步步编写操作系统 33 利用bios中断0x15子功能0xe820获取内存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咱們先介紹0xE820子功能,這是最靈活的內存獲取方式。

bios中斷 0x15的子功能0xE820能夠獲取系統的內存布局,由于系統內存各部分的類型屬性不同,bios就按照類型屬性來劃分這片系統內存,所以這種查詢則呈迭代式,每次bios只返回一種類型的內存信息,直到將所有內存類型返回完畢。子功能0xE820的強大之處是返回的內存信息較豐富,包括多個屬性字段,所以需要一種格式結構來組織這些數據。內存信息的內容是用地址范圍描述符來描述的,用于存儲這種描述符的結構稱之為地址范圍描述符ARDS,Address Range Descriptor Structure。見格式見表

?

此結構中的字段大小都是4字節,共5個字段,所以此結構大小為20字節。每次int 0x15之后,bios就返回這樣一個結構的數據。注意,ARDS結構中是用64位寬度的屬性來描述這段內存基地址(起始地址)及其長度,所以表中的基地址和長度都分為低32位和高32位兩部分。

其中的Type字段是用來描述這段內存的類型,這里所謂的類型是說明這段內存的用途,是可以被操作系統使用,還是保留起來不能用。Type字段的具體意義見表


為什么bios會按類型來返回內存信息呢?原因是這段內存可能是:

  • 系統的ROM。
  • ROM用到了這部分內存。
  • 設備內存映射到了這部分內存。
  • 由于某種原因,這段內存不適合標準設備使用。

由于我們是在32位環境下工作,所以在ARDS結構屬性中,我們只用到低32位屬性。BaseAddrLow+LengthLow是一片內存區域上限,單位是字節。正常情況下,不會出現較大的內存區域不可用的情況,除非安裝的物理內存極其的小。這意味著,在所有返回的ARDS結構里,此值最大的內存塊一定是操作系統可使用的部分,即主板上配置的物理內存容量。

bios中斷只是一段函數例程,調用它就要為其提供參數,現在介紹下bios中斷0x15的0xe820子功能需要哪些參數。

先介紹下此中斷例程的調用方法。下表是使用此中斷的方法,分輸入和輸出兩部分。

?

表中的ECX寄存器和ES:DI寄存器,是典型的“值-結果”型參數,即調用方提供了兩個變量做為被調用函數的參數,一個變量是緩沖區指針,另一個變量是緩沖區大小。被調用函數在緩沖區中寫入數據后,將實際所寫入的字節數記錄到緩沖區大小變量中。

根據上表中的說明,此中斷的調用步驟是:

  • 填寫好“調用前輸入”中列出的寄存器。
  • 執行中斷調用int 0x15。
  • 在CF位為0的情況下,“返回后輸出”中對應的寄存器便會有對應的結果。
  • 本內容摘自《操作系統真象還原》,請大家支持正版,多謝。

    總結

    以上是生活随笔為你收集整理的一步步编写操作系统 33 利用bios中断0x15子功能0xe820获取内存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。