- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在哪里可以找到如何直接从程序集寻址硬盘驱动器(假设我在实模式或环 0 下运行)。例如,假设我想将扇区 100-200 中的数据加载到 RAM 中的某个位置。我将如何寻址特定的硬盘驱动器以及如何告诉驱动器我想要哪些扇区?
最佳答案
我同意 @joev 的观点,即使用 BIOS 调用可能是最简单的事情,但如果您想自己动手,似乎您需要直接访问硬件。
对于 PATA Controller (或设置为兼容模式的 SATA),您可以使用 PIO 进行简单的数据访问。 OS Dev wiki 有一篇关于它的深入文章:http://wiki.osdev.org/ATA_PIO_Mode
您可以通过旧版 I/O 端口 0x1f0-0x1f7(主)和 0x170-0x177(辅助)访问 Controller 。以下读取示例来自 wiki 页面:
- Send 0xE0 for the "master" or 0xF0 for the "slave", ORed with the highest 4 bits of the LBA to port 0x1F6: outb(0x1F6, 0xE0 | (slavebit << 4) | ((LBA >> 24) & 0x0F))
- Send a NULL byte to port 0x1F1, if you like (it is ignored and wastes lots of CPU time): outb(0x1F1, 0x00)
- Send the sectorcount to port 0x1F2: outb(0x1F2, (unsigned char) count)
- Send the low 8 bits of the LBA to port 0x1F3: outb(0x1F3, (unsigned char) LBA))
- Send the next 8 bits of the LBA to port 0x1F4: outb(0x1F4, (unsigned char)(LBA >> 8))
- Send the next 8 bits of the LBA to port 0x1F5: outb(0x1F5, (unsigned char)(LBA >> 16))
- Send the "READ SECTORS" command (0x20) to port 0x1F7: outb(0x1F7, 0x20)
- Wait for an IRQ or poll.
- Transfer 256 words, a word at a time, into your buffer from I/O port 0x1F0. (In assembler, REP INSW works well for this.)
- Then loop back to waiting for the next IRQ (or poll again -- see next note) for each successive sector.
还有更复杂的方法来访问驱动器(MMIO、更复杂的 PIO 模式、DMA 模式等),但这绝对是一个很好的起点。
关于assembly - 使用程序集访问硬盘驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461363/
亲爱的人们,我的 python Combobox 不填充 Windows 驱动器。请帮忙!!! import tkinter as tk from tkinter import ttk from tk
在 Linux 中有没有办法通过 libudev/sysfs 来区分 U 盘(闪存)和 USB 硬盘?如果没有,有没有办法直接查询硬件?谢谢。 最佳答案 也许你可以查看 the device subc
我们有一个进程在我们的 Linux 机器上运行大约需要 20 个小时。我们想让它更快,作为第一步需要确定瓶颈。这样做的最佳选择是什么? 我正在考虑每隔 N 秒对进程的 CPU、RAM 和磁盘使用情况进
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我们有以下代码来检索硬盘 id 处理器 id 和 mac 地址: private static string GetWMIValue(string query, string property
我是一名优秀的程序员,十分优秀!