《30天自制操作系统》02_day_学习笔记

helloos3:
  helloos.nas的解释在P29中
  接下来课本讲了一些汇编语言的知识,便于理解这个汇编文件
helloos4:
  讲解在P41
  helloos.nas后半部分去掉就成了ipl.asm
  ipl.asm是用来制作启动区的,启动区只需要最初的512字节
  输入顺序 asm--makeimg--run
  asm   ipl.asm->ipl.bin   ipl.lst
  makeimg   ipl.bin->helloos.img
  run 加载运行helloos.img镜像
helloos5:
  Makefile的规则 具体讲解在P42
  Makefile 中有注释

; hello-os
; TAB=4

        ORG        0x7c00            ; 程序的装载地址

; 以下这段是标准的FAT12格式软盘专用的代码

        JMP        entry
        DB        0x90
        DB        "HELLOIPL"        ; 启动区的名称可以是任意的字符串(8字节)
        DW        512            ; 每个扇区(sector)的大小(必须为512字节)
        DB        1            ; 簇(cluster)的大小(必须为1个扇区)
        DW        1            ; FAT的起始位置(一般从第一个扇区开始)
        DB        2            ; FAT的个数(必须为2)
        DW        224            ; 根目录的大小,一般设成224项
        DW        2880            ; 该磁盘的大小,2880扇区
        DB        0xf0            ; 磁盘的种类,必须是0xf0
        DW        9            ; FAT的长度,9个扇区
        DW        18            ; 1个磁道track有18个扇区
        DW        2            ; 磁头数为2
        DD        0            ; 不适用分区,0
        DD        2880            ; 重写一次磁盘的大小
        DB        0,0,0x29        ; 定值
        DD        0xffffffff        ; 表圈的号码,可能
        DB        "HELLO-OS   "            ; 磁盘的名称,112字节
        DB        "FAT12   "        ; 磁盘格式的名称 。8字节
        RESB    18                ; 空出18个字节

; 程序的主体

entry:
        MOV        AX,0            ; 初始化寄存器
        MOV        SS,AX
        MOV        SP,0x7c00
        MOV        DS,AX
        MOV        ES,AX

        MOV        SI,msg
putloop:
        MOV        AL,[SI]
        ADD        SI,1            ; SI+1
        CMP        AL,0
        JE        fin
        MOV        AH,0x0e            ; 显示一个文字
        MOV        BX,15            ; 指定字符的颜色
        INT        0x10            ; 调用显卡BIOS
        JMP        putloop
fin:
        HLT                    ; 让CPU停止
        JMP        fin            ; 无限循环

msg:
        DB        0x0a, 0x0a        ; 2换行
        DB        "hello, world"
        DB        0x0a            ; 换行
        DB        0

        RESB            0x7dfe-$        ; 填写0x00,直到0x001fe

        DB        0x55, 0xaa

; 以下是启动区以外的部分的输出

        DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    4600
        DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    1469432
View Code
//Makefile
# 执行不带参数的make时,默认的参数为make  img

default :
    ../z_tools/make.exe img

#  文件生成规则

ipl.bin : ipl.nas Makefile   #要想制作ipl.bin先检查ipl.nas Makefile两个文件
    ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
    ../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek 
        wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img

# 命令

asm :
    ../z_tools/make.exe -r ipl.bin

img :
    ../z_tools/make.exe -r helloos.img

run :
    ../z_tools/make.exe img
    copy helloos.img ..z_toolsqemufdimage0.bin
    ../z_tools/make.exe -C ../z_tools/qemu

install :
    ../z_tools/make.exe img
    ../z_tools/imgtol.com w a: helloos.img

clean :   #删除掉最终的成果(helloos.img以外的全部文件)
    -del ipl.bin
    -del ipl.lst

src_only :   #把源程序以外的全部文件删除
    ../z_tools/make.exe clean
    -del helloos.img
Makefile
原文地址:https://www.cnblogs.com/pengfeiz/p/5780678.html