`
iaiai
  • 浏览: 2145199 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单到引导扇区汇编代码解释

阅读更多
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db “Hello, OS world!”
times 510-($-$$) db 0
dw 0xaa55
这个代码段是存于磁盘引导扇区的系统引导(自举)程序。若存于硬盘第一个扇区,则这段代码称为:硬盘主引导记录;若存于硬盘某个分区的第一个扇区,则称为:分区引导记录;若存于软盘的第一个扇区,则称为:软盘引导记录。称为磁盘引导记录的重要标志是:

dw 0xaa55

磁盘的一个扇区是512字节,标志0xaa55存于这个扇区的最后一个字(两字节,偏移地址为:1FEH),其余空间用于存储指令代码和一些参数、提示信息等。磁盘引导记录由ROM BIOS的INT 19H(引导加载程序,相当于热启动系统,对应的快捷键为:Ctrl+Alt+Del),固定装入内存的0000:7C00H,然后将控制权交给磁盘引导程序,相当于开始执行下面的程序段。下面详细解答一下这个程序段的功能:

org 07c00h ;调整偏移量伪指令ORG,指定下面的指令从7c00h处开始,因为BIOS一旦发现引导扇区,就会将这512字节装载到内存0000:7c00处
mov ax, cs ;数据传送指令,将代码段寄存器cs的内容赋给通用寄存器ax
mov ds, ax ;ax→ds,使数据段与代码段在同一个段
mov es, ax ;ax→es,使附加段与代码段在同一个段
call DispStr ;调用子程序DispStr,显示字符串信息:Hello, OS world!
jmp $ ;$表示当前地址,实现死循环
DispStr: ;子程序:显示字符串
mov ax, BootMessage ;BootMessage的首地址给ax
mov bp, ax ;BootMessage首地址给堆栈指针BP
mov cx, 16 ;要显示的字符数
mov ax, 01301h ;AH=13h,int 10h,即视频中断13h号功能:写字符串;AL=01H,表示写完字符串后,更新光标位置
mov bx, 000ch ;BH=0,页号(视频缓冲区是分页的),初学者暂时不必理会;BL=0CH,字符显示属性,以黑底亮红显示字符
mov dl, 0 ;DH、DL=写串的光标位置,DH=行号,DL=列号
int 10h ;调用视频中断
ret ;子程序返回指令,返回调用者
BootMessage: db “Hello, OS world!” ;要显示的字符串信息
times 510-($-$$) db 0 ;$是当前地址,$$是首地址,总体意思就是从此处一直到510都用0填充
dw 0xaa55 ;磁盘引导记录重要标志 ,最后2个字节代表这是引导扇区。
分享到:
评论

相关推荐

    持FAT32和NTFS的引导扇区源码,NASM汇编代码.rar

    持FAT32和NTFS的引导扇区源码,NASM汇编代码

    boot-sector:这是用于操作系统启动的引导扇区汇编代码!

    bios-boot-sector 是 16 位实模式引导扇区代码 目录:boot-sector-pm boot-sector 是 32 位保护模式下的引导扇区代码 用法: nasm [filename] -f bin -o [dest_filename] Eg: nasm boot_helloworld.asm -f bin -...

    LinDos引导扇区源代码及软磁盘镜像文件

    里面包含LinDos0.01的引导扇区内容及源代码,并且包含一个软盘镜像文件,你可以直接使用虚拟计算机软件运行,或将该软盘镜像文件写入物理软盘,引导系统。

    汇编程序与代码块装载

    为了使用汇编语言,必须熟悉CPU和寄存器,还...其后,把MY-OS的代码放到第二个物理扇区,再编写装载此代码块的汇编程序放到引导扇区;接着介绍COM可执行文件的生成和使用,最后简介实模式调试工具debug的基本使用方法

    引导扇区分析

    引导扇区代码详细分析,汇编语句,研究BIOS必须

    MBR、主引导扇区,主分区、扩展分区、逻辑分区,活动分区、引导分区、系统分区、启动分区的区别详解【讲的很清晰】

    什么是MBR和主引导引导扇区?什么是主分区、扩展分区、逻辑分区?什么是活动分区、引导分区、系统分区、启动分区?一下子罗列这么多概念,恐怕很多人都搞不清它们的区别和联系吧。网上虽然不少解释,但很多是...

    win98硬盘主引导代码反汇编分析.rar_BIOS_bios 反汇编_mbr_rom bios_硬盘引导

    WIN98SE硬盘主引导记录代码反汇编分析硬盘引导记录MBR(Master Boot Record)是指硬盘之0面0道1扇区之内容,PC及其兼容机之ROM BIOS约定在上电及POST自检成功后,将其从硬盘读出,放置在内存0:7C00处,然后转去该...

    BOIS 13h中断读光驱实验源代码

    通过光盘引导代码把硬盘引导代码写入硬盘引导区从而为以后实现从光盘从安装系统到硬盘的过程打开重要的一关。对了还要说一点的,光驱引导代码和硬盘的引导代码是分开编写的,这是因为BOIS读入引导代码时它们的物理...

    《汇编语言》课程设计

    1、运行后软盘0面0道1扇区会写入启动代码,如果直接在微软操作系统下读取,会出现“软盘尚未格式化”的提示,此时属正常情况,请勿格式化; 2、将电脑设置为优先从软驱启动; 3、选项4会真实修改系统时间,如果输入...

    驱动扇区代码, 写自己的操作系统

    这个是关于如何写低级操作系统的资料 用 汇编语言 和NASM,QEMU 来完成 BIOS 引导 可以给你很多有用的操作系统只是

    硬盘加载文件

    由于引导扇区的空间有限,操作系统的加载(loading),必须依靠另外的装载程序(loader)...通过在引导扇区中增加汇编代码,来搜索磁盘根目录中的操作系统装载文件,并将其加载到内存,最后将控制权交给此装载程序。

    写一个最简单的操作系统全过程

    写一个最简单的操作系统,一共分三个部分,从写代码到编译等环节,以及怎样写入引导扇区等,详细描述每一个步骤,清清楚楚的叙述了开发一个最简单的操作系统的方法,适合懂点汇编语言和C语言的OS DIYer。

    自己动手写操作系统(含源代码).part2

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    自己动手写操作系统(含源代码).part1

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    OS:从头开始的操作系统

    在这个项目中,我们通过一个简单的引导扇区引导内核,该引导扇区将内核加载到内存中,然后加载gdt并从16位实模式切换到32位保护模式,然后调用内核代码。 内核设置中断描述符表,初始化计时器,键盘中断和分页。 ...

    操作系统原理作业-支持多进程并发的操作系统源码+项目说明.zip

    5. 另外还有引导扇区程序源代码boot.asm 实验环境: 编译操作系统:Ubuntu 18.04 LTS , C 语言编译器:gcc 7.4.0-1 ubuntu2.3;汇编语言编译器:nasm 2.13.02-0.1, 链接器:ld , 虚拟机软件:VMware Workstation ...

    ARM_Linux启动分析.pdf

    在“arch/i386/boot” 目录下,bootsect.S是生成引导扇区的汇编源码,它首先将自己拷贝到0x90000上,然后将紧接其后的setup部分(第二扇区)拷贝到0x90200,将真正的内核代码拷贝到0x100000。以上这些拷贝动作都是以...

    SudoBIOS:SudoBIOS - 一个完全透明的 32 位保护模式 BIOS 扩展器 - 告别实模式代码

    一个典型的应用是让引导扇区或 mbr 加载 SudoBIOS 作为第二阶段(到绝对地址 0x2000)。 对该位置的远调用以 32 位保护模式返回。 支持本机 BIOS 功能的子集(常见的可用功能)。 SudoBIOS 是用 FASM(2200 多行 ...

    treeos:裸机PC硬件(无OS)上的圣诞树演示(16位汇编)

    它是纯16位代码,在直接在VGA帧缓冲区上运行之前,使用BIOS从引导磁盘加载数据并更改视频模式。它使用标准的320x200 256色模式(VGA模式13h)。这应该在所有的任何合理的PC硬件工作,虽然我只测试了它的虚拟机(QEMU...

    alpha:*基于nix的操作系统(和引导程序)

    包含第一个引导扇区,引导加载程序,加载内核,传输控制。 。/核心 包含内核本身。 ./驱动程序 包含与硬件对话的功能。 ./lib 在编程时包含有用的功能。 。/中央处理器 包含与cpu相关的功能,以及一些汇编代码。

Global site tag (gtag.js) - Google Analytics