为什么这512字节写到u盘引导不起来?

aj3423 2011-04-16 03:34:32
boot.s:

org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $

DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret

BootMessage: db "hello, Os world!"
times 510-($-$$) db 0
dw 0xaa55



代码来自<自己动手写操作系统>, 用
nasm -o boot.bin boot.s
编译成512字节的二进制文件,然后 fdisk -l 命令看到u盘是
Disk /dev/sdb: 32 MB, 32718848 bytes
4 heads, 32 sectors/track, 499 cylinders, total 63904 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdb1 * 32 63903 31936 4 FAT16 <32M

之前是用dd命令把.bin写到u盘的:
dd -if=boot.bin of=/dev/sdb1


bios设置好u盘启动后,开机提示 no operating system found,这是咋回事
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
平菓菓 2012-12-12
  • 打赏
  • 举报
回复
不知楼主解决这个问题没有?小弟我也遇到这样的问题,查了很久的资料,包括中英文,都没查到,估计跟BIOS有关。我发现所有U盘,无论可否启动,0扇区的结尾都是55AA
nehc 2011-04-19
  • 打赏
  • 举报
回复
请问LZ的预期结果是什么?

there no OS found !
aj3423 2011-04-19
  • 打赏
  • 举报
回复
预期看到 hello, Os world! 字符串
bios设置从u盘启动时后不是先检查u盘 第511和512字节是不是 55AA么,boot.bin就是这样的阿
aj3423 2011-04-16
  • 打赏
  • 举报
回复
但为什么在bochs中引导这个 boot.bin就能成功?
大家好,今天讲手工恢复dbr。就拿u盘来讲吧。手工恢复其实就是改bpb表的几个字节。大家看我的演示吧。声音录制不上,只能这样打字了。我就不拿实际恢复举例了,我就讲解一下,这几个自己怎么算。 大家看我的演示,打开winhex。这个就是u盘,大小64m的。扇区0,就是dbr。我给大家做了个ppt,大家看一下。大家看我画方框的地方,这就是要计算的这几个字节。一共5个。隐藏扇区不用算了,这个是0,因为没有分区表。扇区大小,要是硬盘的话,就根据分区表填写,这里是128640,看左下角。 在就是每簇扇区数,根项目,和保留扇区。每簇扇区数有个公式,大家看一下。上面的是fat16的,下面的是fat32的。大家根据这个公式计算就可以了,保留扇区,fat16的一般是2个, 扇区2就是fat表了,所以保留2个扇区,就是这样计算。硬盘就搜fat表,找到fat表以后, 就知道保留了几个扇区了。还有就是根项目,这个一般是512,要是pq调整过的话, 就找FDT起始扇区,有fat2起始扇区和长度就很容易得到fdt的起始扇区。 查找到没有数据(也就是全0)后,继续找,找到个非0扇区,也就是数据区 开始扇区,由此就得到fdt的扇区数,在根据每文件目录登记项占用32个字节 就可以算出引导记录数。在转换为16进制,填写在bpb表处就可以了。 位置看这个图。我话方框的地方。 fat32的恢复和这个差不多。大家有不明白的在问。QQ597911642.今天就讲这些吧。
电脑开机自检之后,屏幕上显示Missingoperatingsystem”错误,无法正常进入系统,出现这种情况是什么原因,该如何解决?今天u大师就给大家分析下。 电脑开机自检后出现“Missingoperatingsystem”错误,造成该故障的原因有三种可能: 1.系统引导区出现问题; 2.电脑受到了病毒的攻击; 3.硬盘出现问题。 一般都是由于系统引导记录出现错误。系统引导记录位于逻辑0扇区,是由高级格式化命令FORMAT生成的。主引导程序在检查分区表正确之后,根据分区表中指出的系统分区的起始地址,读系统引导记录,若读取失败,就显示“Errorloadingoperatingsystem”的错误提示,若能正确读出系统引导记录,主引导程序则会检查系统引导记录的最后两个字节是否为55AA,若不是这两个字节,则给出“Missingoperationsystem”的提示。一般情况下用NDD修复即可。若不成功,只好用FORMATC:/S命令重写DOS引导记录。 如果问题依旧,可以通过重装系统解决。 具体操作步骤: 1、用分区盘重新分区,估计是0磁道错误,所以分区时先分扩展分区或隐藏分区(一定要有),把主分区分在最后,因为0磁道可以做引导,255磁道也可以做引导。 2、将系统启动必须的三个文件:MSDOS.SYS,IO.SYS和COMMAND.COM,可以用系统回复盘进入DOS程序拷贝进入系统盘: 键入copyMSDOS.SYSC: 键入copyIO.SYSC: 键入copyCOMMAND.COMC 本文来源于:u大师u盘启动盘制作工具http://www.udashi.com/n/20130124/367.html

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧