逆向 | 《30天自制操作系统》读书笔记 | day2 汇编语言学习与Makefile入门
《30天自制操作系统》读书笔记 | day2 汇编语言学习与Makefile入门
好了直接继续day2!
反正上来就是解释一下之前的硬编码,用汇编写了出来:
; hello-os
; TAB=4
ORG 0x7c00 ;指明程序的装载方式
; 以下的记述用于标准的FAT12格式的软盘
JMP entry
DB 0x90
DB "HELLOIPL" ; 启动区的名称8bytes
DW 512 ; 每个扇区的大小512
DB 1 ; 簇的大小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 " ; 磁盘的名称(11字节)
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 ; 换行*1
DB 0
;RESB 0x7dfe-$ ; 空\x00
RESB 0x7dfe-($-$$) ; 代替上面一行
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
同样,编译出来会有一点点小问题的感觉,但是怎么说呢,感觉问题不大,至少我试了一下不影响启动和显示helloworld,23333
emmm
然后第二天基本上就是讲怎么用makefile去简化工作流程,可以弄一下,不嫌麻烦也无所谓就是了。
2022.4.27补充:
为什么程序要从0x7c00加载,见下图:
制作启动区
简单的说就是做一个512bytes的东西,然后插在软盘的最前头,就ok了。
这部分按书上的来就行。
使用makefile非常方便:
default :
../z_tools/make.exe img
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
# ƒRƒ}ƒ“ƒh
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
写好ipl.nas以后直接make,然后再make run就行了,爽到飞起。
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/15805675.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com