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

自制操作系统的问题?

我跟着<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
    关注

    直接改成硬盘

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置