diff --git a/03_day/Makefile b/03_day/Makefile index 546830e..6d1891a 100644 --- a/03_day/Makefile +++ b/03_day/Makefile @@ -35,9 +35,12 @@ bootpack.nas : bootpack.gas Makefile bootpack.obj : bootpack.nas Makefile $(NASK) bootpack.nas bootpack.obj bootpack.lst -bootpack.bim : bootpack.obj Makefile +naskfunc.obj : naskfunc.nas Makefile + $(NASK) naskfunc.nas naskfunc.obj naskfunc.lst + +bootpack.bim : bootpack.obj naskfunc.obj Makefile $(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map \ - bootpack.obj + bootpack.obj naskfunc.obj # 3MB+64KB=3136KB bootpack.hrb : bootpack.bim Makefile diff --git a/03_day/bootpack.c b/03_day/bootpack.c index fcf4d29..3689efc 100644 --- a/03_day/bootpack.c +++ b/03_day/bootpack.c @@ -1,8 +1,15 @@ +/* 告诉C编译器,有一个函数在别的文件里 */ + +void io_hlt(void); + +/* 是函数声明却不用{},而用;,这表示的意思是: + 函数在别的文件中,你自己找一下 */ + void HariMain(void) { fin: - /* 这里想写上HLT,但是C语言中不能用HLT! */ + io_hlt(); /* 执行naskfunc.nas中的_io_hlt函数 */ goto fin; } diff --git a/03_day/ipl10.nas b/03_day/ipl10.nas index 4efa119..7108a21 100644 --- a/03_day/ipl10.nas +++ b/03_day/ipl10.nas @@ -9,7 +9,7 @@ CYLS EQU 10 ; 声明CYLS=10 JMP entry DB 0x90 - DB "HELLOIPL" ; 启动扇区名称(8字节) + DB "HARIBOTE" ; 启动扇区名称(8字节) DW 512 ; 每个扇区(sector)大小(必须512字节) DB 1 ; 簇(cluster)大小(必须为1个扇区) DW 1 ; FAT起始位置(一般为第一个扇区) diff --git a/03_day/naskfunc.nas b/03_day/naskfunc.nas new file mode 100644 index 0000000..c565049 --- /dev/null +++ b/03_day/naskfunc.nas @@ -0,0 +1,21 @@ +; naskfunc +; TAB=4 + +[FORMAT "WCOFF"] ; 制作目标文件的模式 +[BITS 32] ; 制作32位模式用的机器语言 + + +; 制作目标文件的信息 + +[FILE "naskfunc.nas"] ; 源文件名信息 + + GLOBAL _io_hlt ; 程序中包含的函数名 + + +; 以下是实际的函数 + +[SECTION .text] ; 目标文件中写了这些后再写程序 + +_io_hlt: ; void io_hlt(void); + HLT + RET