系统开发1 读取硬盘数据
来源:互联网 发布:淘宝哪些地方不包邮 编辑:程序博客网 时间:2024/06/05 16:42
org 0x7c00
jmp start
msg db 0x0d,0x0a
db 'load finsh!'
db 0
start:
mov ax,cs
mov ss,ax
mov sp,0x7c00
;设置读入扇区的段
mov ax,0x0820
mov ds,ax
xor ebx,ebx
xor eax,eax
mov eax,1
;进行硬盘的读取
mov cx,0x167 ;读入180K从1扇区开始 读入359个扇区
read_hard:
call read_hard_disk_0
inc eax ;下一个扇区
loop read_hard
;设置数据段
mov ax,cs
mov ds,ax
;输出成功的字符串
mov si,msg
call put_string
hlt
;======================================================
;输出字符串
;输入: ds:si=输出的字符地址
put_string:
mov bx,0x0004 ;bh=页码 bl=属性
mov ah,0x0e ;ah=功能号
mov al,[si] ;al=输出的字符
or al,al
jz exit
int 0x10
inc si
jmp put_string
exit:
ret
;=======================================================
;输入: eax=开始的扇区
; ds:bx=写入到的地址
;读入磁盘中的数据
read_hard_disk_0:
push eax
push ecx
push edx
push eax
mov dx,0x1f2
mov al,1 ;每次读入的扇区数
out dx,al
pop eax
inc dx ;0x1f3
out dx,al
inc dx ;0x1f4
mov al,ah
out dx,al
inc dx ;0x1f5
shr eax,16
out dx,al
inc dx ;0x1f6
mov al,ah
or al, 0xe0
out dx,al
;发出读的命令
inc dx ;0x1f7
mov al,0x20
out dx,al
;查看状态,忙泽等待
waits:
in al,dx
and al,0x88
cmp al,0x08
jnz waits
;开始读取
mov cx,256
mov dx,0x1f0
read_0:
in ax,dx
mov [ebx],ax
add ebx,2
loop read_0
pop edx
pop ecx
pop eax
ret
times 510-($-$$) db 0
dw 0xaa55
jmp start
msg db 0x0d,0x0a
db 'load finsh!'
db 0
start:
mov ax,cs
mov ss,ax
mov sp,0x7c00
;设置读入扇区的段
mov ax,0x0820
mov ds,ax
xor ebx,ebx
xor eax,eax
mov eax,1
;进行硬盘的读取
mov cx,0x167 ;读入180K从1扇区开始 读入359个扇区
read_hard:
call read_hard_disk_0
inc eax ;下一个扇区
loop read_hard
;设置数据段
mov ax,cs
mov ds,ax
;输出成功的字符串
mov si,msg
call put_string
hlt
;======================================================
;输出字符串
;输入: ds:si=输出的字符地址
put_string:
mov bx,0x0004 ;bh=页码 bl=属性
mov ah,0x0e ;ah=功能号
mov al,[si] ;al=输出的字符
or al,al
jz exit
int 0x10
inc si
jmp put_string
exit:
ret
;=======================================================
;输入: eax=开始的扇区
; ds:bx=写入到的地址
;读入磁盘中的数据
read_hard_disk_0:
push eax
push ecx
push edx
push eax
mov dx,0x1f2
mov al,1 ;每次读入的扇区数
out dx,al
pop eax
inc dx ;0x1f3
out dx,al
inc dx ;0x1f4
mov al,ah
out dx,al
inc dx ;0x1f5
shr eax,16
out dx,al
inc dx ;0x1f6
mov al,ah
or al, 0xe0
out dx,al
;发出读的命令
inc dx ;0x1f7
mov al,0x20
out dx,al
;查看状态,忙泽等待
waits:
in al,dx
and al,0x88
cmp al,0x08
jnz waits
;开始读取
mov cx,256
mov dx,0x1f0
read_0:
in ax,dx
mov [ebx],ax
add ebx,2
loop read_0
pop edx
pop ecx
pop eax
ret
times 510-($-$$) db 0
dw 0xaa55
0 0
- 系统开发1 读取硬盘数据
- [案例]硬盘数据备份/恢复系统-基于ecGUI
- 系统崩溃后 我这样拯救我的硬盘数据
- 将系统/硬盘数据整体迁移到SSD上
- 9月19日linux系统开机自检硬盘数据故障
- Android开发之读取系统联系人
- 硬盘数据恢复
- 硬盘数据结构
- 硬盘数据恢复
- 硬盘数据拯救
- 硬盘数据恢复
- 硬盘数据结构
- 硬盘数据恢复
- 硬盘数据恢复
- 硬盘数据恢复
- 硬盘数据恢复
- 硬盘数据恢复
- java开发系统内核:实现type命令读取文件内容
- linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记
- 最大子矩形(SOJ3329)
- Android中Cursor类的概念和用法
- 变形课
- 第二章作业
- 系统开发1 读取硬盘数据
- pc伪装手机浏览器/平台
- direct path read
- JAVA好强
- 新 OpenCV 多幅图像 同一个窗口 显示 代码优化版
- Gnome-terminal, How to Copy selection to clipboard automatically?
- 双端对列(SOJ3139)
- 如何查看adt的logcat
- LeetCode之Set Matrix Zeroes