30天自制操作系统-第02天-汇编语言学习与MakeFile入门

1.程序代码核心部分--生成启动区512字节(全手工输入):

     ORG     0x7c00                                         ;指明程序装载地址

     entry:

                  MOV AX,0                              ;AX寄存器置0

                  MOV SS,AX                           ;将SS寄存器的值设置为AX寄存器的值

                  MOV SP,0x7c00                    

                  MOV DS,AX

                  MOV ES,AX

                  

                  MOV SI,msg

       putloop:

                 MOV AL,[SI]                              ;将es:si指向的地址单元里的字符装入到AL寄存器

                 ADD SI,1                                   ;  si 加一,则移向下一个地址单元

                 CMP AL,0                                 ;  al里的数值(此处为字符值)与0比较,后面msg定义的字符串末尾以0结束

                 JE fin                                         ;如果相等,则跳转到fin

                  MOV AH,0x0e                          ;int 10h,e号功能 ,显示一个字符

                  MOV BX,15                              ;指定字符颜色, 注意此处是15,即BL=0x0f,BH=显示页,BL=颜色,文本模式下无效

                  INT 0x10

                 JMP putloop

       fin:

                 HLT                                            ;停机,省电,如果使用jmp $,则CPU死循环,耗电 

                 JMP fin                                      ;无限循环

      msg:

                 DB        0x0a,0x0a                    ;换行符,换两次行

                 DB        "hello,world"

                 DB       0                                    ;0作为字符串结束符

                 RESB 0x7dfe-$                         ; 0x7dfe 硬编码;一个扇区512字节(0x200),末尾两字节已定(0x55,0xaa),因此在扇区里的相对偏移量就是0x1fe.加上0x7c00,就是0x7dfe

                 DB 0x55, 0xaa                          ;引导扇区的标志,末尾两字节必须这样

    2. 8086(实模式)寄存器:   

       AX——累加寄存器 CX——计数寄存器
      DX——数据寄存器 BX——基址寄存器
      SP——栈指针寄存器 BP——基址指针寄存器
      SI——源变址寄存器 DI——目的变址寄存器
      段寄存器
      ES——附加段寄存器 CS——代码段寄存器
      SS——栈段寄存器 DS——数据段寄存器
      FS——没有名称 GS——没有名称

      可以存放地址的寄存器:BX,BP,SI,DI
      寄存器AX,CX,DX,BX可以分为高8位和低8位表示,以AX为例,AX的高8位表示为AH,低8位表示为AL。

   3.MakeFile:

      Makefile文件格式如下:

           target:dependency
           (tab)command
其中target表示需要生成的目标文件;dependency表示生成目标文件所需要的依赖文件;command表示生成目标文件的编译规则命令行

      1)make.bat文件分析,内容只有下面一行:
           ..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

           解释:返回到上一级z_tools中使用make.exe工具,其中%1 %2 %3 %4 %5 %6 %7 %8 %9表示传入参数的数据,这里传入参数有9个,对应到Makefile文件中就是有9条指令

      2)makeFile  文件内容:

# 默认动作

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

4.执行make Run 成功,在Qemu中显示出 "Hello,World"

 

       

          

posted @ 2022-04-20 15:41  煮酒熬码  阅读(164)  评论(0)    收藏  举报