希望以后别犯这些小毛病
1. 负数大于正数,输出true?
s = “asdf”, j = -1, k = s.length();
明显k大于0,但是cout<<(j>k);居然能输出true,检查了半天没发现错误,最后才发现是c++数据类型转换的规则…
负数大于正数?类型提升!
2.操作系统真象还原
2.1 硬盘和软盘配置问题
就因为bochs配置文件内一行boot:floppy没看见,让第三章完善mbr那里卡了半天。。。
正确配置文件如下:
egs:32
#模拟器的内存
romimage:file=/home/echo/Desktop/operating_system/bochs/share/bochs/BIOS-bochs-latest
#这个是BIOS-bochs-latest的路径,可能不一样
vgaromimage:file=/home/echo/Desktop/operating_system/bochs/share/bochs/VGABIOS-lgpl-latest
#这个是VGABIOS-lgpl-latest的路径,也可能不一样
#floppya:1_44=hd60M.img, status=inserted
#这个是启动软盘,在当前目录下,如果不在当前目录,需要指明路径
#boot:floppy
boot:disk
#表示从软盘启动
log:bochsout.txt
#日志输出文件
ata0:enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
2.2 bochs卡死在loader.s中
用调试命令调试半天,发现永远会卡死在loader.s的半路,而且是莫名其妙在一个地方循环一句根本没有写在源代码中的命令…最后发现tm是dd命令的时候,读取的扇区数量没改,loader.s的内容已经超过了两个扇区,也就是根本没将loader.s完全读入…
命令修改:
dd if=loader.bin of=hd60M.img bs=512 count=3 seek=2 conv=notrunc
将count改为3即可