;Myos/chapter1/boot/mbr.S ;主引导程序 ;BIOS刚跳转到MBR时,CS:ip寄存器值为0x0:0x7c00 ; SECTION MBR vstart=0x7c00   ;告诉编译器,把这段程序的起始地址编译为0x7c00,将来BIOS会将这段程序加载到物理地址0x7c00处     mov ax,cs               ;将ds,es,fs初始化为0     mov ds,ax     mov es,ax     mov fs,ax     mov sp,0x7c00           ;MBR被加载到0x7c00地址处,0x7c00地址往下的内存空间可以作为MBR运行时所需要的栈空间(栈顶指针往下增长)     mov ax,0xb800           ;借助ax寄存器设置显存段基址     mov gs,ax ;清屏 ;利用0x06号功能,上卷全部行,即可清屏 ;--------------------------------------------------------------- ;INT 0x10    功能号:0x06    功能描述:上卷窗口 ;--------------------------------------------------------------- ;输入: ;AH 功能号= 0x06 ;AL = 上卷的行数(如果为0,表示全部) ;BH = 上卷行的属性 ;(CL,CH) = 窗口左上角的(X,Y)的位置 ;(DL,DH) = 窗口右下角的(X,Y)的位置 ;无返回值:     mov ax, 0600h     mov bx, 0700h     mov cx, 0       ; 左上角(0,0)     mov dx, 184fh   ; 右下角(80,25)                     ; VGA文本模式中,一行只能容纳80个字符,共25行,                     ; 下标从0开始,所以0x18=24,0x4f=79     int 10h     ; 调用0x10中断例程 ;输出背景色绿色,前景色红色,并且跳动的字符串"1 MBR"     mov byte [gs:0x00], '1'     ; 从显存地址 0xb8000 开始,每两个字节为一组,低字节保存数据内容,即字符的ASCII值     mov byte [gs:0x01], 0xA4    ; 高字节保存显示的属性,低四位控制前景色,高四位控制背景色     mov byte [gs:0x02], '0'     mov byte [gs:0x03], 0xA4     mov byte [gs:0x04], '2'     mov byte [gs:0x05], 0xA4     mov byte [gs:0x06], '4'     mov byte [gs:0x07], 0xA4     jmp $                   ; 通过死循环使程序停止在这个位置     times 510-($-$$) db 0   ; 用0填充0磁盘0磁道1扇区512字节剩下的空间,$是当前行的位置,$$是文件起始     db 0x55, 0xaa           ; 512字节的MBR最后两字节是0x55和0xaa                                    操作系统 MBR 引导程序, bochs虚拟机 输出 1024 字符。
2 2

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
牛客网
牛客企业服务