x86汇编-01编写MBR,看完后用脚都能写出的教程

手写操作系统2——编写MBR主引导程序 1.什么是MBR? 主引导记录(MBR),也被称为主引导扇区,是计算机开机以后访问硬盘时所必须要读取的第一个扇区。主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性地重建数据结构信息后,才可能重新访问原先的数据。主引导扇区内的信息可以通过任何一种基于某种操作系统的分区软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统。 2.Nasm简单用法 1.简介 Netwide Ass 阅读详情
AI摘要

本文介绍实模式下MBR如何通过显存映射显示字符,包括文本模式原理、字符显示属性设置及汇编代码实现。

一. 编写MBR

1 实模式下显示字符的基本工作原理

显卡都有自己的存储器,因为它位于显卡上,故称显示存储器(Video RAM: VRAM),简称显存,要显示的内容都预先写入显存。和其他半导体存储器一样,显存并没有 什么特殊的地方,也是一个按字节访问的存储器件

1.1 图形模式 原理

显卡的工作是周期性地从显存中取这些比特,并把它们按顺序显示在屏幕上。如果是比特“0”,则像素保持原来的状态不变,因为屏幕本来就是黑的;如果是比特“1”,则点亮对应的像素。

在这里插入图片描述

图形模式的问题

操作显存里的比特,使得屏幕上能显示出字符的形状,是非常麻烦、非常繁重的工作, 因为你必须计算该字符所对应的比特位于显存里的什么位置。

1.2 文本模式 原理

就像一个二进制数既可以是一个普通的数,也可以代表 一条处理器指令一样,他们认为每个字符也可以表示成一个数。比如,数字 0x4C 就代表字符“L”, 这个数被称为是字符“L”的 ASCII 代码

可以将字符的代码存放到显存里,第 1 个代码对应着屏幕左上角第 1 个字符, 第 2 个代码对应着屏幕左上角第 2 个字符,后面的依次类推。剩下的工作是如何用代码来控制屏幕 上的像素,使它们或明或暗以构成字符的轮廓,这是字符发生器和控制电路的事情

1.2.1 文本模式 为什么需要引入内存映射

处理器需要访问显存,把字符的 ASCII 码写进去,

显存是位于显卡上的,CPU访问显存需要和显卡这个外围设备打交道。同时,多一道手续自然是不好的,这当中最重要的考量是速度和效率

计算机系统的设计者们,这些拥有聪明脑瓜子的人,决定把显存映射到处理器可以直接访问的 地址空间里,也就是内存空间里

在这里插入图片描述

1.2.2 显存映射至内存的分布

F0000~FFFFF:属于ROM-BIOS 64kb

A0000~BFFFF:这段内存空间由特定的外围设备提供

​ B8000~BFFFF:显存映射至内存的空间

计算空间:

let biosMem=0xFFFFF-0xF0000+1;
let peripheralMem=0xEFFFF-0xA0000+1;
let videoMem=0xBFFFF-0xB8000+1;
console.log(`每个内存单元1Byte,BIOS占:${biosMem}个`)
console.log("BIOS:",biosMem/1024,"KB")
console.log("外围设备:",peripheralMem/1024,"KB")
console.log("外围设备显存映射:",videoMem/1024,"KB")

输出结果:

let biosMem=0xFFFFF-0xF0000+1;
let peripheralMem=0xEFFFF-0xA0000+1;
let videoMem=0xBFFFF-0xB8000+1;
console.log(`每个内存单元1Byte,BIOS占:${biosMem}个`)
console.log("BIOS:",biosMem/1024,"KB")
console.log("外围设备:",peripheralMem/1024,"KB")
console.log("外围设备显存映射:",videoMem/1024,"KB")
1.2.3 显卡加电自检后的文本模式
在加电自检之后都会把自己初始化到 80×25 的文本模式。在这种模式下,屏幕上可以显示 25 行,每行 80 个字符,每屏总共 2000 个 字符

这里应该是指的每屏显示2000个字符,而不是说的总共,根据计算:

//32kb的显存映射空间
console.log(32*1024/2)

最多显示字符:
16384个
1.2.4字符显示属性

字符的显示属性(1 字节)分为两部分,
低 4 位定义的是前景色,
高 4 位定 义的是背景色。

色彩主要由 R、G、B 这 3 位决定,

可以由红®、绿(G)、蓝 (B)三原色来配出其他所有颜色。

K 是闪烁位,为 0 时不闪烁,为 1 时闪烁;

I 是亮度位,为 0时正常亮度,为 1 时呈高亮

在这里插入图片描述

2. 代码 MBR Master Boot Record

        
         
;------------------------------- 显示字符 XXOS MBR Hi: ----------------------------
         ;访问内存可以使用段寄存器 DS,但这不是强制性的,也可以使用 ES。
         ;因为 DS 还有别的用处, 所以在这里我们使用 ES 来指向显存所在的段
  			 ;DS: Data Segment
  			 ;ES: Extend Segment
  			 
         mov ax,0xb800                 ;指向文本模式的显示缓冲区   
         mov es,ax										 ;设置附加段寄存器 ES为0xb800
         
         ; ?:为什么不直接mov es,0xb800

         ;以下显示字符串"Label offset:"
         ; ?:为什么要声明 byte
         ; ?:为什么是[es:0x00]而不是[0x00]
         mov byte [es:0x00],'X'				 ;1.设置字符显示内容 		  
         mov byte [es:0x01],0x07			 ;2.设备字符显示属性			 
         mov byte [es:0x02],'X'				 
         mov byte [es:0x03],0x07			 
         mov byte [es:0x04],'O'				 
         mov byte [es:0x05],0x07			 
         mov byte [es:0x06],'S'			  
         mov byte [es:0x07],0x07		   
         mov byte [es:0x08],' '				 
         mov byte [es:0x09],0x07			
         mov byte [es:0x0a],'M'
         mov byte [es:0x0b],0x07
         mov byte [es:0x0c],'B'
         mov byte [es:0x0d],0x07
         mov byte [es:0x0e],'R'
         mov byte [es:0x0f],0x07
         mov byte [es:0x10],''
         mov byte [es:0x11],0x07
         mov byte [es:0x12],'H'
         mov byte [es:0x13],0x07
         mov byte [es:0x14],'i'
         mov byte [es:0x15],0x07
         mov byte [es:0x16],'!'
         mov byte [es:0x17],0x07
         mov byte [es:0x18],''
         mov byte [es:0x19],0x07
;-------------------------------显示字符 除法运算 显示结果--------------------------------
;被除数 ÷ 除数= 商 and 余数
         mov ax,number                 ;取得标号number的偏移地址
         mov bx,10										 ;除数

         ;设置数据段的基地址
         mov cx,cs										 ;?: mov cx,cs mov ds,cx这里的含义是什么?
         mov ds,cx

         ;求个位上的数字
         mov dx,0
         div bx												 
         mov [0x7c00+number+0x00],dl   ;保存个位上的数字  ;?:为什么是mov [0x7c00+number+0x00],dl

         ;求十位上的数字
         xor dx,dx										 ;?:xor dx,dx 这里的含义是什么?
         div bx
         mov [0x7c00+number+0x01],dl   ;保存十位上的数字

         ;求百位上的数字
         xor dx,dx
         div bx
         mov [0x7c00+number+0x02],dl   ;保存百位上的数字

         ;求千位上的数字
         xor dx,dx
         div bx
         mov [0x7c00+number+0x03],dl   ;保存千位上的数字

         ;求万位上的数字 
         xor dx,dx
         div bx
         mov [0x7c00+number+0x04],dl   ;保存万位上的数字

         ;以下用十进制显示标号的偏移地址
         mov al,[0x7c00+number+0x04]
         add al,0x30								   ;:? 为什么需要 add al,0x30
         mov [es:0x1a],al							 ;:? 为什么是  mov [es:0x1a],al	
         mov byte [es:0x1b],0x04
         
         mov al,[0x7c00+number+0x03]
         add al,0x30
         mov [es:0x1c],al
         mov byte [es:0x1d],0x04
         
         mov al,[0x7c00+number+0x02]
         add al,0x30
         mov [es:0x1e],al
         mov byte [es:0x1f],0x04

         mov al,[0x7c00+number+0x01]
         add al,0x30
         mov [es:0x20],al
         mov byte [es:0x21],0x04

         mov al,[0x7c00+number+0x00]
         add al,0x30
         mov [es:0x22],al
         mov byte [es:0x23],0x04
         
         mov byte [es:0x24],'D'
         mov byte [es:0x25],0x07
          
   infi: jmp near infi                 ;无限循环 ;: infi: jmp near infi 为什么这里是无限循环
      
  number db 0,0,0,0,0									 ;?:number是什么意思 db是什么意思
  
  times 203 db 0											 ;times是什么意思
            db 0x55,0xaa							 ;db 0x55,0xaa

3.CPU的特性

以下是总结的防坑指南,其实也就是CPU的一些规定,或者是一些小白容易犯错的地方,共勉

3.1 段寄存器赋值

Intel 的处理器不允许将一个立即数传送到段寄存器

错误:

mov ex,0xb800

正确:

 mov 段寄存器,通用寄存器 
 mov 段寄存器,内存单元
3.3 为什么需要声明byte?
mov byte [es:0x01],0x07

因为在16bit的处理器下,0x07,即可以表示8位的立即数,也可以表示为16bit中的0x0007,因此需要指明传输的是byte

 mov [0x00],AL ;按字节操作 
 mov AX,[0x02] ;按字操作
 
 ;这里就不用指明,byte还是word,因为AL为8bit,AX为16bit
3.4 为什么需要申明[es:0x01]?
mov byte [es:0x01],0x07

因为默认访问内存使用 DS 寄存器

访问内存可以使用段寄存器 DS,但这不是强制性的,也可以使用 ES。因为 DS 还有别的用处, 所以在这里我们使用 ES 来指向显存所在的段

mov [0x00],AL ;这种写法表明,使用DS段基址寄存器,DS:0000

3.5 为什么mov cx,cs mov ds,cx这里的含义是什么?

电脑开机-BIOS开机自检-加载MBR-跳转至0x0000:7c00处开始执行MBR代码

mov cx,cs

mov ds,cx

这里表示代码段基址和数据段基址为同一个段地址 0x0000

但代码段和数据段的偏移地址却不同,一个是0x00000000,一个是0x0000012E

3.6 为什么是mov [0x7c00+number+0x00],dl 为什么加0x7c00

nasm编译后,编译是从0x0000000开始编译的,可以理解为汇编地址/偏移地址,BIOS把MBR是加载到物理地址0x0000:7c000处的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d8hCcDpe-1624030116069)(/Users/software/Library/Application Support/typora-user-images/image-20210618224630428.png)]

ds为数据段0x0000:偏移地址0x7c00+0x012E+0x00,因此这里要加上物理地址

3.7 xor dx,dx 这里的含义是什么?

xor为异或,也就是 在 或运算的基础上(有一个输入为真则为真),还要保证两个输入不同

这里表示把dx置为0,(可忽略部分–>:同时也表示被除数为32位的二进制,往下看)

in in  out
0  0 = 0
1  0 = 1
0  1 = 1
1  1 = 0

3.8 汇编中的除法

16位二进制除法: ax ÷ cl =al…ah 除数可以由 8 位的通用寄存器或者内存单元􏰀供 div byte [0x0230]

32位二进制除法:dx:ax ÷ cx = ax…dx 除数可以由 8 位的通用寄存器或者内存单元􏰀供 div word [0x0230]

3.9 :? 为什么需要 add al,0x30

因为比如数字1+0x30,刚好对应ASCALL码 “1”:0x31

3.10 为什么是 mov [es:0x1a],al

为了接着XXOS MBR Hi: 继续填充显存映射内存的地址

3.11 infi: jmp near infi 为什么这里是无限循环

数字显示完成后,原则上整个程序就结束了,但对处理器来说,它并不知道。对它来说,取指令、执行是永无止境的

jmp 是转移指令,用于使处理器脱离当前的执行序列,转移到指定的地方执行,关键字 near 表 示目标位置依然在当前代码段内

也就是说,它将会不停地重复执行自己

如果这里不让CPU无限循环的话,CPU会继续执行到number db 0,0,0,0,0,CPU把数据当成指令执行,那么悲剧就发生了

3.12 number是什么意思

number为标号number db 0,0,0,0,0 代表 db 0,0,0,0,0的汇编地址,在nasm编译阶段会被替换为具体的汇编地址/偏移地址

3.13 db是什么意思

db—>Declare Byte:声明

在程序中声明并初始化数据, 为数据区

3.14 times是什么意思

times为伪指令,告诉nasm,在汇编器nasm编译阶段发生,填充剩余空间为0

重复执行次数,填充0

3.15 db 0x55,0xaa

根据规定512Byte,最后两个字节必须为0x55,0xaa,这样才能被识别被MBR程序

4 编译运行

nasm c05_mbr.asm -l c05_mbr.lst -o c05_mbr.bin

dd if=c05.bin of=a.img bs=512 count=1 conv=notrunc

bochs -f bochsout.txt

爽了一下,说明一下mac下的bochs,感觉有点不友好,在显存映射内存区域填充了其他信息,改天把它清除,看着确实不爽

在这里插入图片描述

编写MBR 1.载入内存:    1.程序被加载器(多个函数组成的模块)从外界存储设备加载到内存中。    2.程序的指令寄存器cs:ip指向程序在内存中的起始地址。2.BIOS:    检测初始化硬件,由bios建立了中断向量表,可以实现相关的硬件io操作,其中0xF0000~0XFFFFF一共64kb,是ROM的大小存放了BIOS代码,但是在实模式下主要是对部分硬件I/O支持。    CPU中的地址总线分... 阅读详情

相关推荐

汇编语言8086CPU之寄存器总结

寄存器是什么呢? 其实很简单,寄存器就是个存储信息的单元或者说是器件又或者说是容器而已,就比如内存也是一个存储介质或者说是存储单元而已,其实寄存器从理解上来说和内存差不多,只不过寄存器(这里讨论的寄存器都是 CPU 中的寄存器,不包括外设上的寄存器)位于 CPU 内部,而内存位于 CPU 外部,而且,寄存器比内存可是珍贵得多啊,就拿内存和硬盘来比,肯定是内存在使用上珍贵得多,是 PC 中的稀有资源,而寄存器是 CPU 中的稀有资源,内存和寄存器相比就像硬盘和内存相比一样 。 而对于一个汇编程序员来说,C

weixin_44023658的博客 8301

汇编语言-实现一个简单的主引导记录(MBR)引导用户程序

实现一个简单的主引导记录来引导用户程序

陈颜的博客 2325

《X86汇编语言从实模式到保护模式》第05章:编写主引导扇区代码

从第5章开始写起,第一部分主要是介绍写基础知识,看书即可,从第5章开始涉及代码编写。 这些文章的主要结构如下: 总结书中涉及的知识点。 调试和验证书中的代码部分。 1:知识点 1.1 主引导扇区 在电脑已启动就会去读0面0道1扇区,这个扇区就是主引导扇区(main boot sector)。 程序从0X7C00开始,一个扇区是512字节(0X200),所以主引导扇区是从0X7C00--...

RedMorning的专栏 818

使用汇编生成MBR并使用C#修改

使用汇编生成MBR内容,再使用Csharp修改!

Code_Express的博客 1500

【BIOS+MBR 微内核手写实现】

本文详细介绍了基于BIOS+MBR架构的微内核实现过程。首先搭建了编译调试环境,使用nasm汇编创建了512字节的微内核程序框架,重点讲解了[ORG 0x7c00]、[SECTION .text]、[BITS 16]等关键伪指令的作用。通过Makefile自动化完成了编译、镜像生成和运行流程。在实模式下实现了屏幕清空和"hello world"字符串输出功能。最后分析了微内核启动过程:CPU上电后,BIOS将首扇区512字节加载到0x7C00地址,经过自检后跳转执行我们的内核程序。整个流

weixin_45644911的博客 952

《x86汇编语言:从实模式到保护模式》配套代码清单

c05_mbr.asm ;代码清单5-1 ;文件名:c05_mbr.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2011-3-31 21:15 mov ax,0xb800 ;指向文本模式的显示缓冲区 mov es,ax ...

qq_40345544的博客 5997

从0手写自己的Linux x86操作系统(视频教程)

从0手写自己的Linux x86操作系统(视频教程)

闲余知道 1940

从PCEP到PCAP:一个数据分析师的Python认证升级之路与学习规划

本文详细介绍了数据分析师从PCEP(初级)到PCAP(中级)的Python认证升级路径,包括考试内容、备考策略和时间规划。通过系统化的学习,读者可以掌握Python在数据分析中的核心应用,提升职业竞争力。文章还提供了实用的代码示例和认证考试对比,帮助读者高效备考。

weixin_27427619的博客 438

操作系统真象还原实验记录之实验一:第一次编写mbr

操作系统真象还原之实验一:第一次编写mbr 对应书中第2.3节:让mbr飞一会 第58页 一.相关基础知识提炼总结 在电脑未开机前,BIOS就被加载到内存的F0000~FFFFF中。此区域为ROM MBR被加载到磁盘的0盘0道1扇区(CHS方式) CHS 方式中扇区的编号是从 开始的 当电脑按下power键后,cs:ip会被强制置为F000:FFF0 ,所以cpu会执行内存地址FFFF0处的指令。 FFFF0处的指令为跳转指令jmp far f000:e05b。 跳转后,BIOS 便马不停蹄地检测内

mxy990811的博客 2010

DrissionPage实战:5分钟搞定京东滑块验证码自动登录(附完整轨迹生成代码)

本文详细介绍了如何使用DrissionPage工具实现京东滑块验证码的自动化登录,包括环境配置、滑块缺口识别、拟人化轨迹生成算法及完整登录流程。通过物理运动学模型和智能识别技术,有效提升验证码破解成功率,适用于电商自动化场景。

weixin_29229055的博客 244

【数据攻略】字节面试真题(含答案)+100道面试题库

数据攻略

qq_40002713的博客 4102

从零编写MBR:汇编语言实现计算机启动引导程序

计算机启动过程始于BIOS自检后加载并执行主引导记录(MBR),这是操作系统加载前的关键第一步。MBR位于硬盘第一个扇区,遵循特定结构,包含引导代码和分区表。在实模式下,CPU直接操作硬件,汇编语言成为编写MBR的唯一选择,因其能精确控制底层资源。通过NASM汇编器和虚拟机环境,开发者可以安全地实践MBR编写,理解计算机从加电到系统加载的完整链条。这一过程不仅涉及BIOS中断调用、内存地址操作等底层技术,还为后续引导加载程序和操作系统开发奠定基础。本文以动手实践为导向,详细展示了如何从打印字符开始,逐步实现

weixin_30555515的博客 352

VirtualBox安装Win10虚拟机超详细教程(附微软官方镜像下载)

本文提供了一份详细的VirtualBox安装Win10虚拟机教程,涵盖从环境准备、工具下载到系统安装与初始配置的全过程。特别推荐使用微软官方镜像下载,确保系统纯净安全。此外,还分享了性能优化技巧和常见问题解决方案,帮助用户高效搭建稳定的Windows测试环境。

weixin_29243279的博客 918

汇编学习(十五)X86汇编学习 (2)MBR为例

我们从《汇编语言》的坑爬出来,又进入到了《实模式到保护模式》的坑中。 MBR : 计算机开机加电自检之后,BIOS 就就尝试读取0面0道1扇区的内容,传统上就是主引导扇区MBR共512B 以0x55 和 0xAA结尾。 然后将启动代码加载到逻辑地址:0x0000:0x7c00 处就是0x07c00处。 代码如下: mov ax,0xb800 ;指向文本模式的显示缓冲区 mov es...

密码小仙女 725

红外与可见光融合避坑指南:LLVIP数据集实测6大算法效果对比

本文基于专为弱光视觉设计的LLVIP数据集,对GTF、DenseFuse、FusionGAN、IFCNN等6种主流红外与可见光图像融合算法进行了深度实测与对比。通过客观指标与可视化分析,揭示了算法在极端弱光下易出现特征丢失的共性问题,并探讨了融合图像对下游目标检测任务的实际增益,为工程选型与算法调优提供了实用指南。

weixin_29092031的博客 439

番外篇 | 关于YOLO11算法的改进点总结

关于YOLO11算法的改进点总结。🌈

小哥谈 2311

IDA&&BOCHS调试MBR

一、说明 IDA都很熟悉,强大的逆向工具。 Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。对于调试操作系统是灰常强大的。说白了就是一个虚拟机。   二、IDA调试MBR IDA调试MBR比较简单,先配置下虚拟机的VMX文件,添加一下代码: [A...

kingswb的博客 2370

论文必备 - 绘制YOLOv8模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线

文件是模型在训练过程中,实时记录训练的结果,和当时控制台输出的信息一致。当然还包含一些验证损失,学习率变化等数据。epoch:记录训练的轮次,总轮次为训练文件中设置的epochs大小。:边界框损失。在训练过程中,此值逐渐变小,越小表示模型预测的边界框与真实边界框之间的差异越小。:分类损失。在训练过程中,此值逐渐变小,越小表示模型对目标类别的预测越准确。:分布焦点损失。将边界框的回归问题转化为对边界框四个边的分布预测问题,越小表示预测越准确。:精确率也称为查准率。

Limiiiing的博客 1407

第二步 完善MBR

在上一篇文章第一步 从启动BIOS开始中,我们介绍了BIOS系统,知道了它只负责做一些硬件检测和初始化的工作,然后控制权就到MBR手中了,那我们这一节就来介绍一下MBR是什么,又有什么作用叭!MBR也叫做“ 主引导程序 ”,从名字不难看出,它是主要的引导程序。引导的程序就是“ 次引导程序 ”,可以叫做“ 内核加载器 ”,总的来说就是加载内核也就是操作系统的程序。也就是MBR并不加载操作系统,其原因在于有时候我们希望计算机可以在不同的分区使用不同的操作系统,所以MBR。

weixin_62515670的博客 1040

[Dify] 【实战笔记】优化 Excel 电话簿类知识库检索效果的实战技巧

摘要:文章分析了Dify知识库在处理Excel结构化数据(如电话簿)时出现的检索异常问题,发现主要原因是默认召回多条记录且缺乏精准匹配机制。提出两个核心解决方案:1)优化知识库召回参数,包括调整TopK值、提高关键词权重等;2)设计精准提示词模板,明确约束模型行为范围。通过对比测试验证了优化效果,并给出进阶建议如数据格式转换、输出格式化等。最后针对知识检索类AI应用提供了场景适配建议。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 364

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《x86汇编语言:从实模式到保护模式》(第5章---编写主引导扇区代码)

在前面的预备知识里,我们已经知道,处理器加电或者复位之后,如果硬盘是首选的启动设备,那么,ROM-BIOS 将试图读取硬盘的 0 面 0 道 1 扇区。传统上,这就是主引导扇区(Main Boot Sector,MBR)。 读取的主引导扇区数据有 512 字节,ROM-BIOS 程序将它加载到逻辑地址 0x0000:0x7c00处,也就是物理地址 0x07c00 处,然后判断它是否有效。一个有效的...

ccnuacmhdu的博客 1066

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《操作系统真象还原》 第二章 编写MBR主引导记录

0xFFFF0处存放着一条跳转指令,用于跳转到BIOS程序,BIOS程序会对0盘0道1扇区的最后两个字节进行校验查看是否存放的是MBR主引导记录,如果是0x55,0xaa,就会将改扇区的512字节加载到内存0x7C00处。8086CPU的寄存器是16位的(最多只能存储0x0000~0xFFFF的数值),但它的地址线是20位的(20位地址线,能访问的物理内存范围是0x00000~0xFFFFF,共1MB,这也是实模式的最大内存寻址能力。(CL,CH) = 窗口左上角的(X,Y)位置,此处为(0,0)

2501_92612816的博客 619

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

X86操作系统引导器:MBR、Loader与内核加载全解析

本文摘要介绍了操作系统引导加载程序(MBR)和内核加载的相关配置与实现。这些代码为操作系统的引导加载过程和内核加载提供了基础框架,定义了关键内存布局和段描述符配置,是操作系统启动过程中的核心组成部分。

lcreek的博客 2605

引言-从零开始编写操作系统-引导

从零开始编写操作系统-引导

Nexa1024 454

编写主引导扇区

在看《x86汇编语言从实模式到保护模式》这本书时,因为我是用fedora进行学习的,所以书上的很多工具是用不了的,只能用另外的方法来创建硬盘了: nasm mbr.asmqemu-img create -f qcow disk.img 128Mdd if=mbr of=./disk.imgqemu disk.img 我们知道处理器加电或复位之后,如果硬盘是首选的启动设备,那么,ROM

在雨一方 1209

【X86汇编语言 从实模式到保护模式】02 编写主引导扇区代码

目录1. 主引导扇区2. 在屏幕上显示文字 1. 主引导扇区 处理器加电或复位之后,如果硬盘是首选的启动设备,那么 RMO-BIOS 将尝试读取硬盘 0 面 0 道 1 扇区。传统上,这就是主引导扇区(Main Boot Sector,MBR)。 主引导扇区数据又512字节,ROM-BIOS 将其加载到逻辑 0x0000:0x7c00 处,即物理地址 0x07c00 处。一个有效的主引导扇区,其最后两个字节是 0x55 和 0xaa。如果主引导扇区有效,ROM-BIOS 就会段间跳转 jmp 0x0000:

green1997的博客 557
上一篇: nasm生成list和bin文件并进行分析
下一篇: MySQL配置test_db数据库
code222vip
博客等级 码龄12年 33粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值