社区
汇编语言
帖子详情
求SATA硬盘IO方式读写一个扇区的资料,最好能有一个读出MBR并显示出来的示例程序,IDE的已经会了,期待大牛来回答了!!!
cxdzxc
2009-05-12 10:34:44
如题,不够还可以另发帖加分...
...全文
510
13
打赏
收藏
求SATA硬盘IO方式读写一个扇区的资料,最好能有一个读出MBR并显示出来的示例程序,IDE的已经会了,期待大牛来回答了!!!
如题,不够还可以另发帖加分...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wudir
2009-07-19
打赏
举报
回复
是不是有些SATA不行的?怎么我不能成功?
cxdzxc
2009-05-24
打赏
举报
回复
得XT指点,问题解决,我的SATA的IO端口地址是10C8H...
cxdzxc
2009-05-12
打赏
举报
回复
SATA与IDE的兼容模式貌似要BIOS支持才行的吧,要不为啥我读IDE的程序读不了SATA呢,另本人英文实在太烂,还是请大牛们给发个示例程序好些吧
cnzdgs
2009-05-12
打赏
举报
回复
跟IDE的一样,都是按照ATA标准,可以参考ATA-7以上标准文档。
pla_007
2009-05-12
打赏
举报
回复
MARK,我也想学习一下。
英语太差了,不然去看SATA的SPEC,应该也可以找出来。
cnzdgs
2009-05-12
打赏
举报
回复
先确定你要访问的是哪个控制器,你可以在Windows设备管理器中选择该ATA控制器,查看“属性”中的“资源”,上面写这端口范围。
xtdumpling
2009-05-12
打赏
举报
回复
猜测是PCI IDE,
LZ请将上面的
1F0h - 1F7h,替换为 从IDE/SATA Controller的PCI Config 0x10处读的值对应offset(0~7) Primary Channel
3F6h 替换为 从IDE/SATA Controller的PCI Config 0x14处读的值
170h - 177h,替换为 从IDE/SATA Controller的PCI Config 0x18处读的值对应offset(0~7) Secondary Channel
376h 替换为 从IDE/SATA Controller的PCI Config 0x1C处读的值
再试试!
cxdzxc
2009-05-12
打赏
举报
回复
使用网上介绍的代码如下:
.386
cseg segment use16
assume cs:cseg
org 100h
start:
mov dx,1f6h ; 要读入的磁盘号及磁头号
mov al,0a0h ;磁盘0,磁头0
out dx,al
mov dx,1f2h ;要读入的扇区数量
mov al,1 ;读一个扇区
out dx,al
mov dx,1f3h ;要读的扇区号
mov al,1 ;扇区号为1
out dx,al
mov dx,1f4h ;要读的柱面的低8位
mov al,0 ; 柱面低8位为0
out dx,al
mov dx,1f5h ; 柱面高2位
mov al,0 ; 柱面高2位为0(通过1F4H和1F5H端口我们可以确定
; 用来读的柱面号是0)
out dx,al
mov dx,1f7h ;命令端口
mov al,20h ; 尝试读取扇区
out dx,al
still_going:
in al,dx
test al,8 ;扇区缓冲是否准备好
jz still_going ;如果扇区缓冲没有准备好的话则跳转,直到准备好才向下执行。
mov cx,512/2 ;设置循环次数(512/2次)
mov di,offset buffer
mov dx,1f0h ;将要传输的一个字节的数据
rep insw ;传输数据
; ------
mov ax,201h ;以下是用INT13H读硬盘的0磁头、0柱面、1扇区
mov dx,80h
mov cx,1
mov bx,offset buffer2
int 13h
mov cx,512 ;以下部分用来比较2种方法读出的硬盘数据
mov si,offset buffer
mov di,offset buffer2
repe cmpsb
jne failure
mov ah,9
mov dx,offset readmsg
int 21h
jmp good_exit
failure:
mov ah,9
mov dx,offset failmsg
int 21h
good_exit: ;以下部分用来结束程序
mov ax,4c00h ;退出程序
int 21h
readmsg db 'The buffers match. Hard disk read using ports.$'
failmsg db 'The buffers do not match.$'
buffer db 512 dup ('V')
buffer2 db 512 dup ('L')
cseg ends
end start
pla_007
2009-05-12
打赏
举报
回复
把你的程序贴上来好了,大家一起分析/学习下?
cxdzxc
2009-05-12
打赏
举报
回复
找了下,实验平台资料如下:
处理器 Intel Celeron Duo T1400(1.73G主频,512Kb二级缓存,533MHz前端总线)
芯片组 SIS M672+SIS 968
标准内存 1G
硬盘类型 SATA
硬盘容量 120G
光驱 Combo
显示芯片 SiS Mirage 3+ Graphics Engine芯片集成
cnzdgs
2009-05-12
打赏
举报
回复
估计是端口地址用错了,各个硬盘控制器的端口地址是不同的。
cxdzxc
2009-05-12
打赏
举报
回复
神州---天运F1400,其他情况我就不知道了
xtdumpling
2009-05-12
打赏
举报
回复
请问LZ试验的平台是什么芯片组?硬盘是什么模式? Legacy IDE, PCI IDE or AHCI ?
《真象还原》读书笔记——第三章 完善
MBR
(3.5
硬盘
)
本文介绍了3.5英寸
硬盘
的工作原理,包括柱面-磁头-
扇区
的编号系统,以及
IDE
和
SATA
接口的区别。此外,详细阐述了
硬盘
的控制端口和常用操作方法,如通过LBA寻址
扇区
。最后,讨论了
MBR
如何加载loader到内存中,并执行基本的
硬盘
读取操作。
写
一个
操作系统 gnix OS(二):CPU
读写
外设和boot的交接过程验证
本文介绍了在实模式到保护模式转变过程中,CPU与显卡、
硬盘
控制器等
IO
接口的交互原理。通过B
IO
S中断实现的清屏和打印字符在保护模式下不再适用,因此需要通过直接
读写
IO
端口控制显存和
硬盘
控制器。内容详细阐述了显卡的显存和
IO
端口以及
硬盘
的
扇区
定位、LBA模式,并提供了读取
硬盘
扇区
到内存的boot
程序
实现。最后,通过bochs调试验证了
程序
的正确性。
硬盘
基础
本文详细介绍了
硬盘
的工作原理,包括磁道、
扇区
、柱面、磁头的组成和工作过程。同时,阐述了
硬盘
的性能指标,如转速、平均寻道时间、数据传输率等,并通过计算实例展示了如何评估
硬盘
的
IO
PS性能。文章还对比了
IDE
、
SATA
、SCSI、SAS等不同
硬盘
接口的特点和优势,以及
硬盘
分区体系的发展历程,包括
MBR
和GPT分区的区别与应用。
磁盘及分区详解(
MBR
和GPT)、新增磁盘分区总体
示例
本文详细介绍了磁盘分区的原因、Linux设备文件、磁盘类型和术语,重点讲解了
MBR
和GPT两种分区
方式
,包括它们的结构、寻址
方式
、优缺点以及在启动系统流程上的差异。此外,还提供了分区管理工具的使用
示例
,如lsblk、parted和fdisk,并给出了新增磁盘分区的完整步骤。
硬盘
绝密维修
资料
!--2
本文详细介绍了计算机系统的启动过程,包括B
IO
S自检、
MBR
加载等关键步骤,并对比了希捷、迈拓和IBM等
硬盘
品牌的特性与优势。
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章