自制操作系统——02(读磁盘数据到内存)

boot.asm代码:

[org 0x7c00]
KERNEl_ADDR equ 0x820;数据要加载到0x8200:0000处(姑且当作是内核)
mov bx,LOADING_STR
call print_str;输出loading...字符串,bx是字符串地址参数

mov ah,0x02;2h代表读盘
mov al,1;读一个扇区
mov ch,0;0柱面
mov dh,0;0磁头
mov cl,2;2扇区
mov dl,0;0号驱动器
mov ax,KERNEl_ADDR
mov es,ax;数据最终加载到es:bx处
mov bx,0
int 13h;读取磁盘到内存
jnc readDisk_successful;如果读取成功CF标志为置0
jmp readDisk_error;读取失败,输出信息
loop:
  jmp loop
readDisk_successful:
mov bx,READ_DISK_SUCCESS
call print_str
jmp loop
readDisk_error:
mov bx,READ_DISK_ERROR
call print_str
jmp loop
print_str:;和上一个程序不同,这次我讲输出字符串的程序改成了一个函数
mov ah,0x0e
mov bp,bx
mov al,[bp]
cmp al,0
jz return
int 10h
add bx,1
jmp print_str
return:
ret
LOADING_STR:
    db "loading...",13,10,0
READ_DISK_SUCCESS:
    db "read disk successful!",13,10,0
READ_DISK_ERROR:
    db "read disk error!",13,10,0
times 510-($-$$) db 0
dw 0x55aa
times 510 db 0
dw 0x55aa

编译指令:
nasm boot.asm -f bin -o boot.img
Virtual Box 运行结果:
这里写图片描述
参考:
BIOS int 13h功能参数表
BIOS int 10h功能参数表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值