NASM 纯汇编打造简单中文操作系统(1)
2010-01-29 12:06
363 查看
一、boot.asm 操作系统的开始--引导程序
[BITS 16]
[ORG 0x7c00]
jmp main ;跳过数据定义部分执行代码,否则会执行定义的数据
;--------------------------------------------------------------------------------------------------------
;引导数据区
;------------------------------------------------------------
BOOT_INFO: DB ' Booting System Please Waite ..............',0x0D,0x0A,0
;BOOT_INFO1: DB ' Read Kernel OK............................',0x0D,0x0A,0
;BOOT_INFO2: DB ' Load Kernel OK.Press Any Key to Continue!',0x0D,0x0A,0
BOOT_DRIVER DB 0
;LOADER_SEGMENT DW 0x200 ;内核存放的内存段地址
INIT_SEGMENT DW 0x910 ;初始化模块存放地址
;---------------------------------------------------------------------
ShowMessage:
;显示开始引导的提示信息
POP BP
POP SI ;获得字符串所在地址
lp:
MOV AH,0x0E ;设置显示模式
MOV BH,0x00 ;设置页码
MOV BL,0x07 ;设置字体属性
;LOADSB
MOV AL,[DS:SI]
CMP AL,0
JZ .out
int 0x10
INC SI
JMP lp
.out
XOR SI,SI
PUSH BP ;恢复IP返回地址
ret
;-----------------------------------------------------------------------------------------------
main:
;定义堆栈段
MOV AX,0x9000
MOV SS,AX
MOV ESP,0xFFFF
;调用函数ShowMessage显示文字
MOV AX,BOOT_INFO
PUSH AX
CALL ShowMessage
;读取磁盘扇区内容加载内核模块到指定的内存区
;初始化软区
MOV AX,0
MOV DX,0
INT 0x13
;读取初始化模块
.rinit:
MOV AX,[INIT_SEGMENT] ;将要把INIT方过去所在的段基址
MOV ES,AX
MOV BX,0 ;读数据到内存0x910:0x0 到 0x910:0x400 es:bx处
MOV AH,2
MOV DH,0
MOV DL,[BOOT_DRIVER] ;驱动器为0表示a:区
MOV CH,0 ;零磁道
MOV CL,2 ;从第2个扇区开始读
MOV AL,2 ;读入扇区数,每个扇区为 512B.init大小为1024b所以读2
INT 0x13 ;调用13中断读取磁盘信息01
JC .rinit
;MOV DX,0x3F2 ; 关闭软区马达
;MOV AL,0
;OUT DX,AL
JMP DWORD 0x910:0
TIMES 510-($-$$) DB 0 ;从当前位置减去开头的位置的大小以为其他的容于大小填充成0.
;保持文件512字节大小
DB 0x55
DB 0xAA ;0X55AA是标准格式,TIMES 用510计算。因为0X55AA还有两个字节正好512字节
整个文件采用nasm编译器编译。
编译方法为:
nasm -f bin xxx.asm -o xxx.img
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kylixfire/archive/2009/03/06/3963541.aspx
[BITS 16]
[ORG 0x7c00]
jmp main ;跳过数据定义部分执行代码,否则会执行定义的数据
;--------------------------------------------------------------------------------------------------------
;引导数据区
;------------------------------------------------------------
BOOT_INFO: DB ' Booting System Please Waite ..............',0x0D,0x0A,0
;BOOT_INFO1: DB ' Read Kernel OK............................',0x0D,0x0A,0
;BOOT_INFO2: DB ' Load Kernel OK.Press Any Key to Continue!',0x0D,0x0A,0
BOOT_DRIVER DB 0
;LOADER_SEGMENT DW 0x200 ;内核存放的内存段地址
INIT_SEGMENT DW 0x910 ;初始化模块存放地址
;---------------------------------------------------------------------
ShowMessage:
;显示开始引导的提示信息
POP BP
POP SI ;获得字符串所在地址
lp:
MOV AH,0x0E ;设置显示模式
MOV BH,0x00 ;设置页码
MOV BL,0x07 ;设置字体属性
;LOADSB
MOV AL,[DS:SI]
CMP AL,0
JZ .out
int 0x10
INC SI
JMP lp
.out
XOR SI,SI
PUSH BP ;恢复IP返回地址
ret
;-----------------------------------------------------------------------------------------------
main:
;定义堆栈段
MOV AX,0x9000
MOV SS,AX
MOV ESP,0xFFFF
;调用函数ShowMessage显示文字
MOV AX,BOOT_INFO
PUSH AX
CALL ShowMessage
;读取磁盘扇区内容加载内核模块到指定的内存区
;初始化软区
MOV AX,0
MOV DX,0
INT 0x13
;读取初始化模块
.rinit:
MOV AX,[INIT_SEGMENT] ;将要把INIT方过去所在的段基址
MOV ES,AX
MOV BX,0 ;读数据到内存0x910:0x0 到 0x910:0x400 es:bx处
MOV AH,2
MOV DH,0
MOV DL,[BOOT_DRIVER] ;驱动器为0表示a:区
MOV CH,0 ;零磁道
MOV CL,2 ;从第2个扇区开始读
MOV AL,2 ;读入扇区数,每个扇区为 512B.init大小为1024b所以读2
INT 0x13 ;调用13中断读取磁盘信息01
JC .rinit
;MOV DX,0x3F2 ; 关闭软区马达
;MOV AL,0
;OUT DX,AL
JMP DWORD 0x910:0
TIMES 510-($-$$) DB 0 ;从当前位置减去开头的位置的大小以为其他的容于大小填充成0.
;保持文件512字节大小
DB 0x55
DB 0xAA ;0X55AA是标准格式,TIMES 用510计算。因为0X55AA还有两个字节正好512字节
整个文件采用nasm编译器编译。
编译方法为:
nasm -f bin xxx.asm -o xxx.img
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kylixfire/archive/2009/03/06/3963541.aspx
相关文章推荐
- NASM 纯汇编打造简单中文操作系统(2 init.asm初始化操作系统内存。进入32位保护模式)
- NASM 纯汇编打造简单中文操作系统(3 kernel.asm 内核(实现汉字的显示,鼠标的支持等))
- NASM 纯汇编打造简单中文操作系统(2)
- NASM 纯汇编打造简单中文操作系统(6 vesa.inc 显卡绘图)
- NASM 纯汇编打造简单中文操作系统(3)
- NASM 纯汇编打造简单中文操作系统(4 mouse.inc 鼠标驱动部分(设置鼠标中断,建立中断处理程序))
- NASM 纯汇编打造简单中文操作系统(4)
- NASM 纯汇编打造简单中文操作系统(5 interrupt.inc 初始化中断控制器)
- NASM 纯汇编打造简单中文操作系统(5)
- NASM 纯汇编打造简单中文操作系统(1.boot.asm 操作系统的开始--引导程序)
- NASM 纯汇编打造简单中文操作系统(2 init.asm初始化操作系统内存。进入32位保护模式)
- [汇编]如何写一个简单的操作系统(未完)
- 【汇编】手把手教你打造自己的第一个操作系统
- 纯汇编NASM源码/显示相关函数/10H中断/纯汇编显示汉字/显示中文
- 简单OS开发前奏(三)操作系统装载过程及BootSector的汇编语言实现
- Linux操作系统的简单指令及如何使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。
- 打造简单的linux操作系统(内核的精简)
- 一个新手学习汇编时的简单记录
- Photoshop CC 2015 for MAC【中文安装包及超简单5秒破解】
- Ext中文乱码决方案——最简单的就是最适合的