-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelloos.asm
53 lines (51 loc) · 2.12 KB
/
helloos.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
; 编译:nasm helloos.asm -o helloos.img
; 启动:qemu-system-i386 helloos.img
ORG 0x7c00 ;指定程序装载的位置
;下面用于描述FAT12格式的软盘
JMP entry
DB 0x90
DB "CHRRYIPL" ;启动区的名称,但长度必须是8字节
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 ;扩展引导标记 固定0x29
DD 0xffffffff ;卷列序号
DB "CHERRY-OS" ;磁盘的名称(11个字节)
DB "FAT12" ;磁盘的格式名称(8字节)
TIMES 18 DB 0 ;先空出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
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 ;换行两次
DB "hello wlord!"
DB 0x0a, 0x0d
DB 0
TIMES 0x1fe-($-$$) DB 0 ;填写0x00,直到0x001fe
DB 0x55, 0xaa