我又有一个问题不容易实现。让我们假设BIOS已经从指定的设备加载了我的启动加载程序,我现在怎么知道它是哪个设备,我可以将我的OS的其余部分加载到内存中?如何确定启动设备
Q
如何确定启动设备
3
A
回答
2
如果是MBR bootstrap(可能还有否则我不是100%肯定?)DL
将包含 驱动器号,即你可以做这样的事情(替换自己的内存布局等):
EntryPoint:
xor ax, ax
mov ss, ax
mov ds, ax
mov sp, 0x7c00
.DiskReset:
mov ah, 0
int 0x13
jc .DiskReset
mov ax, 0x50 ; load to 0x500 linear address. It has unused space up to 0x7bff
mov es, ax
xor bx, bx
mov ax, 0x023B ; count = 0x3b = 59, the maximum..
mov cx, 0x0002
xor dh, dh ; leave (dl = drive number) intact
int 0x13
jnc .ReadDone
mov si, ReadError
call PrintString16
jmp .DiskReset
.ReadDone:
; ......
0
There's actually a whole protocol between the firmware and the bootstrap program in sector #0.然而,正如你所看到的,它大部分只存在于标准文件的页面中,而不是现实中。实际上,当以旧PC/AT和PC98方式启动时,一个使用DL
作为固件驱动器号,并使用BIOS Parameter Block中的“隐藏扇区”字段(或者更不优选地,以某种形式维护的“嵌入块列表”专家工具)来确定驱动器内卷的位置。
如果在新的(至少x86计算机世界)引导,当然,然后things are a lot different。操作系统引导装载程序是引导管理程序菜单上的一个条目,引导管理程序菜单条目具有参数系统,这些参数系统在引导管理器运行时由引导管理器传递给装入程序。其中一个参数是引导卷的位置,操作系统引导加载程序用它来查找操作系统文件。事实上,这就是Windows NT长期以来的工作方式。
相关问题
- 1. 如何获得iOS设备启动后的准确时间?
- 2. 如何启用“AdSense移动设备”?
- 3. 如何重新启动android设备
- 4. 如何重新启动android设备?
- 5. 启动时的设备定位
- 6. 如何在cordova启动我的应用程序启动设备?
- 7. Android设备启动时如何知道“启动”
- 8. 如何在设备启动时启动服务?
- 9. 如何启动android设备时启动服务?
- 10. 如何在设备启动时启动应用程序
- 11. 如何在启动设备时启动应用程序?
- 12. 如何获取设备启动后启动服务的参数?
- 13. 如何在Android设备启动时启动服务?
- 14. 如何确定设备的角度?
- 15. 如何确定Linux设备的事件?
- 16. Linux如何确定设备类?
- 17. 如何确定Android设备的速度?
- 18. Meteor - React - FlowRouter如何基于设备(PC或移动设备)正确重定向
- 19. 确定ipad设备
- 20. 如何在设备类型上启动特定视图
- 21. 确定设备是否已移动
- 22. 确定客户端设备(PC或移动设备)
- 23. Genymotion设备不启动
- 24. 如何确定iOS设备是停止还是移动(驾驶)
- 25. 如何确定它是否是使用PHP的移动设备?
- 26. 我可以确定/如何检测设备是否有振动?
- 27. 如何确定C#中移动设备屏幕的方向?
- 28. 如何确定iOS设备是否具备手机功能来启动重大更改位置服务?
- 29. 启动在设备启动时启动活动的服务
- 30. 重启设备后FirebaseJobDispatcher未启动
thx很多家伙..我从来不知道这是DL的价值所代表的。 – Pyjong