博文

目前显示的是 五月, 2007的博文

操作系统开发小试-保护模式引导程序

+------------------------------------------------+ 操作系统开发小试-保护模式引导程序 +------------------------------------------------+ + +1.开发语言:ASM(工具:NASM) +2.虚拟环境:Virtual PC +3.应用工具:WinHex Ver11.2 ====================================================== %include "pm.inc" ;%define _BOOT_DEBUG_ %ifdef _BOOT_DEBUG_ org 00100h %else org 07c00h %endif jmp begin_boot ; 跳过其它的数据,跳转到引导程序的开始处 print_mesg: ; 打印信息调用 mov ah, 0x13 ; 使用中断10h的功能13,在屏幕上写一个字符串 mov al, 0x00 ; 决定调用函数后光标所处的位置 mov bx, 0x0007 ; 设置显示属性 mov cx, 0x20 ; 在此字符串长度为32 mov dx, 0x0000 ; 光标的起始行和列 int 0x10 ret get_key: ;等待按键 mov ah, 0x00 int 0x16 ; Get_key使用中断16h的功能0,读取下一个字符 ret clrscr: ; 清屏 mov ax, 0x0600 ; 使用中断10h的功能6,实现卷屏,如果al=0则清屏 mov cx, 0x0000 ; 清屏 mov dx, 0x174f ; 卷屏至23,79 mov bh, 0 ; 使用颜色0来填充 int 0x10 ret bits 16 ;gdt LABEL_DESC_NULL: Descriptor 0, 0, 0 LABEL_DESC_CODE32: Descriptor 0, SegCode32Len-1, DA_C + DA_32 LABEL_DESC_VIDEO: Descriptor 0B8000h, 0ffffh, DA_DRW gdtr dw $ - LABEL_DESC_NULL dd LABEL_DESC_NULL Se...

操作系统开发小试-实模式引导程序

+-----------------------------------------------+ 操作系统开发小试-实模式引导程序 +-----------------------------------------------+ + +1.开发语言:ASM(工具:NASM) +2.虚拟环境:Virtual PC +3.应用工具:WinHex Ver11.2 ====================================================== org 0x07c00 这条语句将该引导程序装入绝对地址0x7c00处.该引导程序被编译后有512字节,被加载到磁盘的第1扇区中(引导扇区).当PC启动的时候被BIOS加载到地址0x7c00处. mov ax, cs mov ds, ax mov es, ax 这三条语句是初始化段寄存器的:当系统加载引导程序的时候就把程序的装入地址0x7c00放入代码段寄存器cs中.ds,es保存数据段段地址,如果不使用的话,程序就会找不到要显示的字符串(当进行串操作时,段地址是保存在es中). jmp short beginroot 跳转到标签beginroot处,并从那里开始执行程序代码. bootmsg db ""START YYOS......"" ;16bytes(0x10) 定义了一个字符串,当程序运行后在屏幕显示该友好字符串. cls: mov ax, 0x0600 ;ah=06表示使用INT10的功能6,al=0表示清屏 mov bh, 0 ;bh=0表示使用第0页 mov cx, 0 ;cx=0表示屏幕的左上角 mov dx, 0x174f ;dx=0表示屏幕的右下角 int 0x10 ;调用中断 ret ;函数返回 该块类似一个函数性质,它的作用就是清除屏幕.它调用的是BIOS中断INT10,关于BIOS中断的详细内容我会写一篇详细的文档,请等待. print: mov ax, 0x1300 ;ah=0x13表示使用INT10的功能0x13,al=0表示清屏 mov bx, 0x0002 ;bh=0表示使用第0页,bl=2表示字符串的颜色为绿色 mov cx, 0x10 ;cx=10表示显示字符串的长度 mov dx,...

BIOS中断INT10H的功能13H

显示字符串(仅用于PC/AT). 入口参数: AH = 13H (代表中断功能标号) AL = 01H (代表显示输出模式) 0——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变 1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变 2——字符串中含显示字符和显示属性。显示后,光标位置不变 3——字符串中含显示字符和显示属性。显示后,光标位置改变 BH = 页码,默认为00H BL = 字体和背景颜色(若AL=00H或01H) (DH、DL) = 坐标(行、列) CX = 显示字符串长度 ES:BP = 显示字符串的地址 出口参数: 无 例子: BootMessage db "Hello, OS" mov ax, BootMessage mov bp, ax mov cx, 16 mov ax, 01301H mov bx, 000CH(黑底红字.高亮) mov dl, 00H int 10H 注: IBM PC AT是美国国际商用机器公司(IBM)于1984年发布的个人电脑产品,正式名称是IBM 5170 PC AT。AT是英文“Advanced Technology)的缩写,这是由于它引入了标准的16位ISA总线以及采用了当时最新的英特尔80286处理器。PC/AT是IBM公司自PC机发布后的第二代升级产品(也有人认为在此之前发布的PC/XT是第二代产品)。尽管早期的产品存在着磁盘存储部件相关的瑕疵,它最终还是迅速流行于商用及普通用户市场,成为了PC工业最持久的事实标准。至今,由于软件兼容性的原因,最新的PC系统都还支持PC/AT机的总线结构。