上机环境: win10 + 虚拟机VMware


今天主要Makefile文件入门

首先先看主.nas

; hello-os
; TAB=4

ORG 0x7c00 ; 指明程序装载地址
;因为内存地址0是用来保存BIOS程序的,所以必须向后延长,所以伟大的开发们就定义了0x7C00

; 以下是记叙标准FAT12格式软盘

JMP entry
DB 0x90
DB "HELLOIPL" ; 启动区名称可以是任意的字符串
DW 512 ; 每个扇区的大小必须是512
DB 1 ; 簇大小必须一个扇区
DW 1 ; FAT起始位置(一般为第一个扇区开始)
DB 2 ; FAT的个数
DW 224 ; 根目录大小
DW 2880 ; 磁盘大小
DB 0xf0 ; 硬盘种类
DW 9 ; FAT长度
DW 18 ; 一个磁道几个扇区
DW 2 ; 磁头数
DD 0 ; 不使用分区,必须是0
DD 2880 ; 重写一次磁盘大小
DB 0,0,0x29 ; 意义不明,固定写法
DD 0xffffffff ; 卷标号码
DB "HELLO-OS " ; 磁盘名称
DB "FAT12 " ; 磁盘格式名称
RESB 18 ; 先空出18个字节

; 程序主体

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

MOV SI,msg ; 将msg初始地址写入SI
putloop: ;经过一系列循环,利用SI指针将msg中的字符打印出来
MOV AL,[SI]
ADD SI,1 ; SI加1
CMP AL,0
JE fin
MOV AH,0x0e ; 显示一个文字
MOV BX,15 ; 指定字符颜色
INT 0x10 ; 调用显卡BIOS,在这里预先写入操作系统开发人员经常用到的程序,超级方便,BIOS(basic input output system)后面的数字代表调用不同的函数
;INT是BIOS程序,出厂就固定到主板上面,

JMP putloop

fin: ;程序运行完成后就开始等待
HLT ; CPU停止,等待,降低功耗
JMP fin ; 无线循环

msg: ;这里就是要显示的字符 __hello,world_
DB 0x0a, 0x0a ; 换行*2
DB "hello, world"
DB 0x0a ; 改行
DB 0

RESB 0x7dfe-$ ; 直接跳转到

;  RESB指令是“reserve byte”的略写预约字节。
;  如果想要从当前位置向后空出10个字节来,并且填0,如果后面
; 18万行全是0x00的话 使用本命令可以省去填写18万行0x00时间
;  例子:
;  RESB 10
;  DB 0
;  RESB 0x1f0-$ 填写从0x00到0x1f0的数据;

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

以上系统和昨天还是一样的,下面将开始分类开启动区和程序主体

先制作512字节内的启动区,然后将后面增加的程序进行连接就成了一个整体的系统了,也就是先把心分离出来

这样就变成了
ipl.nas

!cons_nt.bat 打开命令行

asm.bat 将ipl文件编译成bin文件和lst文件
…\z_tools\nask.exe ipl.nas ipl.bin ipl.lst

makeimg.bat ;将上面生成的bin文件制作成为img文件
…\z_tools\edimg.exe imgin:…/z_tools/fdimg0at.tek wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img

install.bat

run.bat
这五个文件了


但是这些链接文件比较麻烦,先辈们就研究发明了Makefile文件

# Makefile制作

default :
../z_tools/make.exe img

# img生成规则

# 目标.bin 使用.nas
ipl.bin : ipl.nas Makefile
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
# 目标:img 使用bin
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_tools\qemu\fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu

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

clean :
-del ipl.bin
-del ipl.lst

src_only :
../z_tools/make.exe clean
-del helloos.img

这样就能直接在命令行输入
make run 直接运行
make clean 删除中间文件
make img 生成img文件

今天的关键是学习使用Makefile文件,
后面都是用Makefile文件进行程序编译运行的