好的,這裏是我的意思:操作系統如何找到外設的分配地址?
假設你想編寫自己的可啓動代碼。
此外,您的代碼將非常簡單。
這麼簡單,實際上它只包含一條指令。
您的可啓動代碼將寫入一個字節或字或雙字或任何內容到外圍設備上的寄存器或RAM位置,而不是主RAM或CPU寄存器。
你如何知道BIOS/UEFI分配給外設存儲單元的地址?
這裏有一個更具體的例子:
我的引導代碼的第一個也是唯一指令將數11H寫到位於聲卡上的寄存器。
如果BIOS/UEFI初始化代碼正常工作,則聲卡寄存器應映射到CPU的內存空間和/或IO空間。
我需要找到該地址來完成該寫入。
我該如何找到它?
這是真正的操作系統必須在某些時候做的事情。
當您在Windows中打開控制面板/設備管理器時,可以看到列出的所有外圍設備的內存範圍。
在某些時候,Windows必須查詢BIOS/UEFI才能找到該數據。
再次,這是如何完成的?
編輯:
這是我在寫這篇啓動彙編程序的嘗試:
BITS 16
ORG 100h
start:
;I want to write a byte into a register on the sound card or NIC or
;whatever. So, I'm using a move instruction to accomplish that where X
;is the register's memory mapped or IO mapped address.
mov X,11h
times 510 - ($ - $$) db 0
dw 0xaa55
我把什麼號爲X?我如何找到這個外設寄存器的地址?
歡迎使用stackoverflow。請,你能提供一些你的具體問題的代碼嗎?這可以證明你嘗試了多遠,它會幫助其他成員更好地理解你的問題,當時,你會給他們一個你的問題的背景。請檢查以下鏈接:https://stackoverflow.com/help/mcve和https://stackoverflow.com/help/how-to-ask –