2 Star 5 Fork 4

稀风 / KOS

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
boot9.asm 2.25 KB
一键复制 编辑 原始数据 按行查看 历史
; NASM 汇编编译器为 bin 文件格式提供了额外的操作符 org
; 它的功能是指定程序被载入内存时的起始地址
; 一句话,就是为程序中所有的内部地址引用增加一个段内偏移值
; 引导程序可以看做是被加载到以 0 为基址的段,偏移为 0x7c00
org 0x7c00
jmp start ; 跳转到 start 标签处运行
%include "./bootloader/inc.asm"
%include "./bootloader/common.asm"
start:
xor ax, ax ; xor 指令与 and or 指令类似,两个操作数的每一对对应位都应用如下操作原则:
; 如果两个位的值相同(同为 0 或同为 1),则结果位等于 0;否则结果位等于 1
; xor ax, ax 等于 ax = 0
mov ss, ax ; 栈段 ss = 0
mov ds, ax ; 数据段 ds = 0
mov es, ax ; 附加数据段 es = 0
mov sp, 0x7c00 ; 设置栈
; 功能:清屏
mov ah, 0x06 ; AH 功能号 = 0x06
mov bh, 0x07 ; 清屏属性
mov al, 0x00 ; AL = 上卷的行数(如果为0,表示全部)
mov cx, 0x0000 ; 窗口左上角(CL, CH)位置,即(0, 0)
mov dx, 0x184f ; 窗口右下角(DL, DH)位置
; VGA 文本模式中,一行只能容纳 80 个字节,共 25 行 ,
; 下标从 0 开始,所以 0x18 =24, 0x4f = 79
int 0x10
; 设置光标位置 (dl, dh)
mov ah, 0x02 ; AH 功能号 = 0x02,设置光标
mov dh, 0x00 ; 设置光标行号
mov dl, 0x00 ; 设置光标列号
mov bh, 0x00 ; 页码
int 0x10
; 打印 msg
mov ax, msg
mov cx, msgLen
call print
; 将硬盘扇区 1 中的数据读入到内存 0x700 处
mov eax, 0x01
mov bx, 0x700
mov cx, 1
call rd_disk_to_mem
; 将硬盘扇中 loader 数据读入到内存 0x900 处
mov eax, 0x02
mov bx, LOADER_START_ADDR
mov cx, [0x700]
call rd_disk_to_mem
jmp LOADER_START_ADDR ; 跳转到 loader
jmp $ ; 死循环. $ 表示程序当前位置
msg db "Boot..." ; 使用 db 定义数据
msgLen equ $-msg ; 字符串 msg 长度
times 510-($-$$) db 0x00 ; $ 表示程序当前位置
; $$ 指代本 section 的起始地址
; 如果没有定义 section ,nasm 默认全部代码同为一个 section ,起始地址为 0
; 该指令表示将当前位置到 510 字节处全部填充数据 0x00
db 0x55, 0xaa ; 主引导程序最后 2 个字节为 0x55, 0xaa
1
https://gitee.com/thin-wind/KOS.git
git@gitee.com:thin-wind/KOS.git
thin-wind
KOS
KOS
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891