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

来源:互联网 发布:下载动态壁纸软件 编辑:程序博客网 时间:2024/04/29 05:57

boot.asm代码:

[org 0x7c00]KERNEl_ADDR equ 0x820;数据要加载到0x8200:0000处(姑且当作是内核)mov bx,LOADING_STRcall 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_ADDRmov es,ax;数据最终加载到es:bx处mov bx,0int 13h;读取磁盘到内存jnc readDisk_successful;如果读取成功CF标志为置0jmp readDisk_error;读取失败,输出信息loop:  jmp loopreadDisk_successful:mov bx,READ_DISK_SUCCESScall print_strjmp loopreadDisk_error:mov bx,READ_DISK_ERRORcall print_strjmp loopprint_str:;和上一个程序不同,这次我讲输出字符串的程序改成了一个函数mov ah,0x0emov bp,bxmov al,[bp]cmp al,0jz returnint 10hadd bx,1jmp print_strreturn:retLOADING_STR:    db "loading...",13,10,0READ_DISK_SUCCESS:    db "read disk successful!",13,10,0READ_DISK_ERROR:    db "read disk error!",13,10,0times 510-($-$$) db 0dw 0x55aatimes 510 db 0dw 0x55aa

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

0 0