编写软盘的启动代码-----第一天

一个软盘的启动代码,和屏幕显示:

; hello-os
; TAB=4     TAB键的宽带

; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code   用windows格式化出来的软盘就是这种格式

        DB        0xeb, 0x4e, 0x90
        DB        "HELLOIPL"        ; 启动扇区名称(8字节) 软盘的第一个扇区被称为启动区,一个扇区=512字节  CPU启动时以512为单位进行读写的                                    ; 计算机首先从最初的一个扇区开始读写软盘,所以称为启动扇区
        DW        512                ; 每个扇区(sector)大小(必须512字节)
        DB        1                ; 簇(cluster)大小(必须为1个扇区)
        DW        1                ; FAT起始位置(一般为第一个扇区)
        DB        2                ; FAT个数(必须为2)
        DW        224                ; 根目录大小(一般为224项)
        DW        2880            ; 该磁盘大小(必须为2880扇区1440*1024/512)
        DB        0xf0            ; 磁盘类型(必须为0xf0)
        DW        9                ; FAT的长度(必??9扇区)
        DW        18                ; 一个磁道(track)有几个扇区(必须为18)
        DW        2                ; 磁头数(必??2)
        DD        0                ; 不使用分区,必须是0
        DD        2880            ; 重写一次磁盘大小
        DB        0,0,0x29        ; 意义不明(固定)
        DD        0xffffffff        ; (可能是)卷标号码
        DB        "HELLO-OS   "    ; 磁盘的名称(必须为11字?,不足填空格)
        DB        "FAT12   "        ; 磁盘格式名称(必??8字?,不足填空格)
        RESB    18                ; 先空出18字节

; 程序主体

        DB        0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
        DB        0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
        DB        0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
        DB        0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
        DB        0xee, 0xf4, 0xeb, 0xfd

; 信息显示部分

        DB        0x0a, 0x0a        ; 换行两次
        DB        "hello, world"
        DB        0x0a            ; 换行
        DB        0

        RESB    0x1fe-$            ; 填写0x00直到0x001fe

        DB        0x55, 0xaa       ; 是否有启动程序的判断,如果不是55 AA则返回一个无法启动的错误。

; 启动扇区以外部分输出

        DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    4600
        DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    1469432
时间: 2024-10-20 23:35:42

编写软盘的启动代码-----第一天的相关文章

编写S3C6410启动代码

2015-2-13 和S3C2440相比,S3C6410支持更多的启动方式,其中支持SD卡启动. 在学习使用这些方式的时候,因为我又不大想破坏原来的程序,用SD卡启动就比较好了,也很有意思. 同S3C2440一样,编写启动代码就如同是裸机程序,但编译器不能再用MDK了,因为它不支持ARM11. 支持ARM11裸机的编译器有两种,一种是RVDS,主流的有RVDS2.2.RVDS3.0.RVDS4.0. 还有就是arm for gcc,其实S3C2440也可以用ARM for GCC来编译裸机代码.

[编写高质量iOS代码的52个有效方法](三)消息和运行期

[编写高质量iOS代码的52个有效方法](三)消息和运行期 参考书籍:<Effective Objective-C 2.0> [英] Matt Galloway 先睹为快 11.理解objc_msgSend的作用 12.理解消息转发机制 13.用"方法调配技术"调试"黑盒方法" 14.理解"类对象"的用意 目录 编写高质量iOS代码的52个有效方法三消息和运行期 先睹为快 目录 第11条理解objc_msgSend的作用 第12条理解

Effective Python之编写高质量Python代码的59个有效方法

                                                     这个周末断断续续的阅读完了<Effective Python之编写高质量Python代码的59个有效方法>,感觉还不错,具有很大的指导价值.下面将以最简单的方式记录这59条建议,并在大部分建议后面加上了说明和示例,文章篇幅大,请您提前备好瓜子和啤酒! 1. 用Pythonic方式思考 第一条:确认自己使用的Python版本 (1)有两个版本的python处于活跃状态,python2和pyt

编写简洁的 JavaScript 代码

作者:尹锋链接:https://www.zhihu.com/question/20635785/answer/223515216来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 避免使用 js 糟粕和鸡肋 这些年来,随着 HTML5 和 Node.js 的发展,JavaScript 在各个领域遍地开花,已经从"世界上最被误解的语言"变成了"世界上最流行的语言".但是由于历史原因,JavaScript 语言设计中还是有一些糟粕和鸡肋,比如

编写难于测试的代码的5种方式

本文由码农网 – 孙腾浩原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 有一次,我在一个讲座上听到主持人问听众如何故意编写难于测试的代码.在场的小伙伴都惊呆了,因为没有任何人会故意写这种糟糕的代码.我记得他们甚至给不出一个好的答案. 当然,这个问题的目的不在于教大家如何写使同事欲哭无泪的烂代码.而是为了了解什么样的代码难于测试,来避免这些严重的问题. 这里给出我对上面那个问题的答案(当然这只是我的个人观点,每个人讨厌的都不尽相同.) 1.用大量的静态字段 尤其是在不同类中共享静

[编写高质量iOS代码的52个有效方法](十一)系统框架

[编写高质量iOS代码的52个有效方法](十一)系统框架 参考书籍:<Effective Objective-C 2.0> [英] Matt Galloway 先睹为快 47.熟悉系统框架 48.多用块枚举,少用for循环 49.对自定义其内存管理语义的容器使用无缝桥接 50.构建缓存时选用NSCache而非NSDictionary 51.精简initialize与load的实现代码 52.别忘了NSTimer会保留其目标对象 目录 编写高质量iOS代码的52个有效方法十一系统框架 先睹为快

反汇编一个dos软盘的启动分区

来源:http://www.ata-atapi.com/hiwdos.htm,自己乱译了一通. Disassembly of a DOS Floppy Boot Sector 反汇编一个dos软盘的启动扇区 Note: I will leave it to someone else to provide you with a disassembly of an OS/2 HPFS boot sector, or a Linux boot sector, or a WinNT boot secto

启动代码和Bootloader区别

很多人都会把两者混淆,所以这里稍微说一下. 启动代码和Bootloader有点类似于类和结构体的关系,也就是说结构体只是一种很特殊很特殊的类,但不能说类是一种结构体. 也就是说可以说启动代码是Bootloader,但是不能说Bootloader是启动代码.但是这也不是绝对的,只在某些情况下可以这么说. 通常,启动代码仅仅是指CPU复位后到main函数之前需要执行的汇编代码.需要这段代码是为了给C语言程序准备好堆栈空间,中断入口和外部数据等.而且这段汇编代码可以直接对硬件进行操作,效率很高. Bo

JavaScript手札:《编写高质量JS代码的68个有效方法》(一)(1~5)

编写高质量JS代码的68个有效方法(一) *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { marg