主世界
2020-12-12 11:25
采纳率: 50%
浏览 14

自制操作系统的问题?

我跟着<30天自制操作系统>和<orange's...>写操作系统,没想到在软盘读取就遇到了问题.

boot.asm

org	0x7c00;程序装载地址

;FAT12软盘的记述
jmp	short	entry
nop
%include "dec_fat12.inc"

;入口
entry:
        ;初始化寄存器
	mov     ax,cs
	mov     ds,ax
	mov     es,ax

	mov     bp,BootMsg
	call      putstr

	cli
	call	findLoader
	mov	bp,FindLoaderMsg
	call	putstr
	sti
	jmp	0x0820

;进入显卡模式,现在就是黑屏而已
vga:
	mov     al,0x13
	mov     ah,0x00
	int     0x10
	ret

FindLoaderMsg:
	db	"Finding Loader..."
	db	0

;将软盘的34扇区载入内存(通过cm.img和loader.bin确认,0x4400处有loader.bin)
findLoader:
	mov	   ax,0x0820
	    mov	es,ax
	mov	ch,0
	mov	dh,0
	mov	cl,17

	mov	ah,0x02
	mov	al,1
	mov	bx,0
	mov	dl,0x00
	int	0x13
	jc	findLoader

	mov	bp,0x0820
	call	putstr_charmode
	ret

;以字符模式显示字符串(临时用来检查0x0820这个地址的值的)
putstr_charmode:
	mov     al,[bp]
	add	al,48
        add     bp,1
        mov     ah,0x0e
        mov     bx,15
        int     0x10
        cmp     al,48
        jne     putstr
        ret

;显示字符串(以0x00结尾)
putstr:
	mov     al,[bp]
        add     bp,1
        mov     ah,0x0e
        mov     bx,15
        int     0x10
        cmp     al,0
        jne     putstr
       	ret 
BootMsg:
	db	"CM OS"
	db	0x0a,0x0d
	db	0

times	510-($-$$)	db	0
;用0x0填满剩余的启动区空间
dw	0xaa55
;启动区标志

loader.bin(-->xxd)

00000000: b013 b400 cd10                           ......

Makefile

default:
	make asm
	make -r cm.img
	make run
	make clean

run: Makefile cm.img
	qemu-system-i386 -m 32 -fda cm.img

asm: Makefile boot.asm loader.asm
	make -r boot.bin
	make -r loader.bin

clean:
	rm *.img
	rm *.bin

boot.bin: boot.asm
	nasm boot.asm -o boot.bin

loader.bin: loader.asm
	nasm loader.asm -o loader.bin

cm.img: boot.bin loader.bin
	dd if=/dev/zero of=cm.img bs=512 count=2880
	dd if=boot.bin of=cm.img bs=512 count=1 conv=notrunc
	sudo mount -o loop cm.img /media/ocelot/disk
	sudo cp loader.bin /media/ocelot/disk/
	sudo umount /media/ocelot/disk/

测试了好久,还是不对,求教大家

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 歇歇 2020-12-13 13:57
    已采纳

    直接改成硬盘

    点赞 打赏 评论
  • 歇歇 2020-12-12 13:59

    没有软盘了,安装虚拟盘或者直接从硬盘开始

    点赞 打赏 评论
  • 主世界 2020-12-13 09:38

    那为什么读取不成功呢?

    点赞 打赏 评论
  • 主世界 2020-12-13 22:17

    我试试吧

    点赞 打赏 评论
  • 主世界 2020-12-14 22:25

    好了,谢谢啦

    点赞 打赏 评论

相关推荐 更多相似问题