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
//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