一、开机进入实模式--BIOS->MBR(硬盘扇区复制函数)->LOADER

本文详细介绍了计算机从开机进入实模式的过程,包括BIOS的初始化、中断向量表的建立、MBR加载以及IO接口在CPU与外设通信中的作用。重点讨论了BIOS如何检测硬件、显卡与硬盘控制器作为IO接口的功能以及主引导程序MBR的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:记录的大部分是我掌握不熟悉的内容,所以知识点不是那么全面。

实模式

实模式是指8086cpu的cpu工作原理、内存分段方式、寻址方式、寄存器大小、指令用法等。
cpu工作原理:借助L1,L2这些SRAM缓存器来工作。。。
内存分段方式:实模式下的地址是真实的物理地址,地址线20根,内存1M,所以“段基址:段内偏移地址”=将段基址左移一位加上段内偏移地址记得到真实的物理地址
寄存器大小:实模式下面都是16位宽的,2的16次方为64K,8086是20根地址线,内存大小为2的20次方为1M,cpu的cs和ip都是16位的,只能表示访问到内存的64k处,所以访问内存形式是  段基址:段内偏移地址  来访问内存。将段基址乘以16,左移4位后加上段内偏移地址来访问内存就能够访问到1M大小了。
寻址方式:寄存器寻址、立即数寻址、直接寻址、基址寻址、变址寻址、基址变址寻址等等。ds:bx  ss:bp  ds:si/di
指令用法:ip不能直接赋值     call   ret   jmp  flags  
jnz :ZF不等于0时候转移,即上一条指令cmp ax,cx ;ax-cx后,当若ZF不等于0,则jmp到后面的指令
jc :CF=1时候转移,即上一条指令操作有进位,则jmp到后面的指令
jge :SF=OF时候转移,即上一条指令:cmp ax,cx ;当ax-cx后,ax大于等于cx时候则jmp到后面的指令
shl ax,1:表示ax乘以2的1次方
xor ax,ax ;表示清空ax
and:可以清0寄存器的值,也可以保留寄存器的原值,所以最常用的就是将32位的寄存器高16位清零,低16位保留原值
or:,可以置1存储器的置,也可以保留寄存器的原值。可以当作加法,最常用的就是一个寄存器的高16位和另一个寄存器的低16位相加
一般mul shl and or  这四个指令组合起来用:乘法之后,高16位低16位不在一个寄存器中,所以要移到一个32位寄存器中,先移位,在清零,再相加
循环:用loop和cmp都可以构成循环,loop的话是cx与0比较,每执行一次循环体后cx-1,然后要执行下一次循环时候判断cx与0的大小(循环条件),若大于0则执行下一次循环,若等于0则终止循环,往下面的代码执行。   cmp是相当于减法操作,但是不改变操作数的大小,只影响flag位(循环条件),可以利用zf来判断时候相等,利用cf来判断是否有进位来设置循环条件。所以loop与cx相当于for,而cmp相当于do ..while
在Pentium及之后的处理器上,比较+条件转移的循环效率通常要比loop高一些,而且loop指令有转移距离8位偏移的限制。不过在循环次数非常多的情况下,loop指令的效率要高一些,因为对loop指令的分支预测成功率是100%(loop指令执行前cx/ecx的值是已知的)。所以我们尽量用cmp拉设置循环

实模式下面的内存布局

    实模式为了兼容8086,所以只支持20条地址线,2的20次方=1MB:0x00000--0xFFFFF。
下图为1M的内存如何布局的:
0--0x9FFFF是DRAM,大小640KB,也就是我们往主板上面插的内存条,特点是漏点快,需要刷新。
0xF0000-0xFFFFF是主板内存ROM,大小64KB,里面存的就是BIOS的代码。
0xA0000-C7FFFF是显卡的区域,包括了显卡的ROM和显存。
0xC8000-0xEFFFF是硬件适配器的ROM或内存映射式IO,每个外设都有自己的内存,包括键盘(8048、8042)、各种控制器(硬盘控制器、中断控制器)等都有自己的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值