今天的主要任务是通过对
helloos.nas
核心代码汇的理解进行编语言的学习,还有就是Makefile的学习。
汇编代码
主要是对上次的汇编文件helloos.nas
核心部分的学习,核心部分的原代码如下:
DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd
看起来晦涩难懂,所以就改写为下面的样子,方便学习:
; hello-os
; TAB=4
ORG 0x7c00 ; 指明程序装载地址
; 以下的记述用于标准FAT12格式的软盘
JMP entry
DB 0x90
DB "HELLOIPL" ; 启动区的名称可以是任意字符串(8字节)
DW 512 ;规定 每个扇区的大小(必须为512字节)
DB 1 ; 规定簇的大小,以扇区为单位(必须为1个扇区)
DW 1 ; 规定FAT的起始位置(一般是从第一个位置开始)
DB 2 ; FAT的个数(必须为2)
DW 224 ; 根目录的大小(一般设置224项)
DW 2880 ; 规定磁盘大小(必须2880个扇区大小)
DB 0xf0 ; 规定磁盘的种类
DW 9 ; 规定FAT的长度(必须是9个扇区)
DW 18 ; 规定一个磁道的扇区个数(必须18个)
DW 2 ; 规定磁头数(必须2个)
DD 0 ; 不使用分区,必须为0
DD 2880 ; 重新确定磁盘大小为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
putloop:
MOV AL,[SI]
ADD SI,1 ; 给SI加一
CMP AL,0
JE fin
MOV AH,0x0e ; 显示一个字符
MOV BX,15 ; 指定字符颜色
INT 0x10 ; 调用显卡BIOS
JMP putloop
fin:
HLT ; 让CPU处于待机状态
JMP fin ; 跳转到fin,即无限循环
msg:
DB 0x0a, 0x0a ; 换行俩次
DB "hello, world"
DB 0x0a ; 换行
DB 0