80286 与 80386,实模式与保护模式切换编程

超实用!VS Code配置C/C++开发环境全攻略 本文提供了一份详细的VS Code配置C/C++开发环境全攻略。从MinGW-w64编译器的选择与安装,到VS Code核心扩展的配置,再到tasks.json构建任务与launch.json调试环境的设置,手把手指导初学者完成从环境搭建到高效开发与调试的全过程,帮助开发者快速上手C/C++项目。 阅读详情

学习自 狄泰软件

1 EAX与AX不是独立的,EAX是32位的寄存器,而AX是EAX的低16位。

2 or 对两个操作数进行逻辑(按位)或操作

3
word 两个字节 16位
dword 四个字节 32位

在这里插入图片描述
80286 虽然有了保护模式,但其依然是 16 位的 CPU ,其通用寄存器还是 16 位宽,但其与 8086 不同的是其地址线由 20 位变为了 24 位,即寻址空间变成了 24 次方,等于 16MB 大小。虽然80286可以将地址线变成了24位,可以访问16MB的内存,但是其用来寻址的通用寄存器还是16位的,也没有突破一个寄存器只能访问64kb空间的限制,如果用寄存器来进行地址访问,那么,想访问16MB的内存,就需要不断地变换段基址,所以很快就被淘汰了。

80286的缺陷
单独的一个寄存器无法访问到全部内存空间, 也就是若用寄存器存储段内偏移地址
只能访问到 64kb大小的段。

改革背景
每次 CPU 变革的原因几乎都是地址总线宽度不够导致的,即内存需求越来越大,干脆直接将地址线直接改成32位的,可以访问4GB的内存地址
1985年推出的第一个32位的微处理器,它的地址总线和寄存器都是32位的
段基址是32位的,寄存器也是32位的,这样在任意一个段都可以访问到4GB的空间了,甚至段基址地址可以是0,直接用段偏移地址就可以4GB空间的任意角落,这就开启了平坦模式的时代

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
8086
80286
80386
X指的是 该处理器的版本

在保护模式下,定义一个段,必须要提供段的三个要素:
1 段的起始地址
2 段的界限(段内的偏移地址的最大值)
3 段属性(如 我们平时所用的 代码段是只读的,那么它是怎么被指定成只读的呢? 就是依靠段属性!!! DA_DR标识符)

在这里插入图片描述

在这里插入图片描述

选择子的本质就是 索引,这个索引特别的是分为两部分,第一部分就是传统的索引,它的值就是0 1 2 3 4 5 … 指的就是段描述符表当中的第0项 第1项 第2项 …第n项等等,相当于数组下标。第二部分是特殊部分 ,选择子的属性:
PRL : 占用 第0位 – 第1位 是关于特权级属性,占用两位,表示4个值 0 1 2 3 ,四个级别
TI : 占用1位,是第三位 所以代表 0 或者 4

0 : GDT   表示该选择子想要去访问的段描述符是 全局段描述符
4 : LDT    表示该选择子想要去访问的段描述符是 局部段描述符

在这里插入图片描述

; 描述符
; usage: Descriptor Base, Limit, Attr
; Base: dd
; Limit: dd (low 20 bits available)
; Attr: dw (lower 4 bits of higher byte are always 0)
%macro Descriptor 3 ; 这个宏需要三个参数 段基址, 段界限, 段属性
dw %2 & 0xFFFF ; 段界限1 将第2个参数,段界限的低16位 排放在段描述符这8个字节的前16位上 0 - 15
dw %1 & 0xFFFF ; 段基址1 将第1个参数,段基址的低16位 排放在段描述符这8个字节的 16 - 31 位
db (%1 >> 16) & 0xFF ; 段基址2 将第1个参数,段基址第16位 – 第23位 共8位 排放在段描述符这8个字节的 32 - 39 位
; %3 & 0xF0FF 将第三个参数 段属性 的低8位 排放 段描述符的 40 - 47 位。 高4位放在 段描述符的 52 - 55 位
; (%2 >> 8) & 0xF00 将将第2个参数 段界限的 16 - 19 位 放在 段描述符的 48 - 51位
dw ((%2 >> 8) & 0xF00) | (%3 & 0xF0FF) ; 属性1 + 段界限2 + 属性2
db (%1 >> 24) & 0xFF ; 段基址3 将第1个参数,段基址的高8位 24 - 31 排放在段描述符这8个字节 24 - 31位
%endmacro ; 共 8 字节

在这里插入图片描述
Descriptor 宏定义

; GDT_ENTRY标签 是全局段描述符表GDT 的入口地址
; 段基址, 段界限, 段属性
GDT_ENTRY : Descriptor 0, 0, 0
; ODE32_DESC 标签 (DA_C + DA_32 : 32位模式(保护模式)下的段,具有只执行代码段的属性)
CODE32_DESC : Descriptor 0, Code32SegLen - 1, DA_C + DA_32

;计算全局段描述附表的长度 = 当前行偏移地址 - 全局段描述符表入口地址
GdtLen equ $ - GDT_ENTRY

;可以看做一个结构体 第一个成员指定 全局段描述符表的界限,即相对入口地址 偏移的最大值。
;段描述符表 的 标识数据结构 用于加载段描述符表
GdtPtr:
dw GdtLen - 1
;GDT基地址 需要重新计算
dd 0

定义代码段,section 所定义的代码段仅限于原代码里的代码段,是未经编译的以文本的形式存在的代码段。

定义两个代码节,S1代码节先出现,所以它里面的代码先被存放,01 02 00 00,至于后面两个字节的 00,是由于代码节之间的内存对齐,从第一个代码节 切换到 第二个代码节的时候 必须四字节对齐。如下面的两个代码节 .s1 .s2 ,那么 从.s1 切换到 .s2 的时候 必须是保证四字节对齐。所以.s1 代码节所占用的内存数必须是4的整数倍, 没有的填0补齐。所以编译后 得到的结果就是右图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1
2 保护模式是从实模式转换进入的,在默认情况下就是实模式,而实模式中就是 16位的数据和代码
3 必须使用 无条件跳转指令jmp 从16位代码段 跳转到32位 代码段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

makefile

.PHONY : all clean rebuild

BOOT_SRC := boot.asm
BOOT_OUT := boot

LOADER_SRC  := loader.asm
INCLUDE_SRC := inc.asm
LOADER_OUT  := loader

IMG := data.img
IMG_PATH := /mnt/hgfs

RM := rm -fr

all : $(IMG) $(BOOT_OUT) $(LOADER_OUT)
	@echo "Build Success ==> D.T.OS!"

$(IMG) :
	bximage $@ -q -fd -size=1.44
	
$(BOOT_OUT) : $(BOOT_SRC)
	nasm $^ -o $@
	dd if=$@ of=$(IMG) bs=512 count=1 conv=notrunc
	
$(LOADER_OUT) : $(LOADER_SRC) $(INCLUDE_SRC)
	nasm $< -o $@
	sudo mount -o loop $(IMG) $(IMG_PATH)
	sudo cp $@ $(IMG_PATH)/$@
	sudo umount $(IMG_PATH)
	
clean :
	$(RM) $(IMG) $(BOOT_OUT) $(LOADER_OUT)
	
rebuild :
	@$(MAKE) clean
	@$(MAKE) all

代码段位于 代码段,段基址位于 代码段寄存器 CS
全局段描述符表 位于数据段,段基址位于 数据段寄存器 DS

loader.asm

%include "inc.asm"
;程序起始地址
org 0x9000

;无条件跳转到  CODE16_SEGMENT标签处执行
jmp CODE16_SEGMENT

;定义 全局段描述符表, 描述符表中的第0个描述符不使用,仅用于占位
;定义一个名为 .gdt 的逻辑代码段 ,是源码级别的代码段
[section .gdt]
;                                 段基址,       段界限,       段属性

;段描述符表 第0项
;定义一个段描述符GDT_ENTRY GDT_ENTRY标签 全局段描述符GDT 的入口地址,第0项不使用 仅用于占位 所以设置为0
GDT_ENTRY       :     Descriptor    0,            0,           0

;段描述符表 第1项
;定义一个段描述符CODE32_DESC  CODE32_DESC标签 
;属性:32位模式(保护模式)下的段,具有只执行代码段的属性
CODE32_DESC     :     Descriptor    0,    Code32SegLen  - 1,   DA_C + DA_32
; GDT end

;该全局段描述附表的长度 = 当前行偏移地址 - 全局段描述符表入口地址
GdtLen    equ   $ - GDT_ENTRY

;可以看做一个结构体 第一个成员指定 全局段描述符表的界限,即相对入口地址 偏移的最大值。
;记录全局段描述符表 起始地址
;段描述符表 的 标识数据结构 用于加载段描述符表
GdtPtr:
		; GDT 界限 两个字节 dw
          dw   GdtLen - 1
		; GDT 基地址 四个字节 dd
          dd   0
          
          
; GDT Selector 
; 定义 段描述符CODE32_DESC 的选择子
; 段描述符索引值是 1 , 属性是 SA_TIG(表示该选择子想要去访问的段描述符是 全局段描述符) + SA_RPL0(特权级 第0特权级)

Code32Selector    equ (0x0001 << 3) + SA_TIG + SA_RPL0

; end of [section .gdt]   全局段描述附表 结束


;定义实模式代码段 16位代码段,需要按照16位的方式进行编译 所以只是编译器按照16位方式进行编译 [bits 16]
[section .s16]
[bits 16]
CODE16_SEGMENT:
    mov ax, cs
    mov ds, ax
    mov es, ax
    mov ss, ax
	;定义栈顶
    mov sp, 0x7c00
    
    ; initialize GDT for 32 bits code segment  
	; 设置32位段基址 到 段描述符
	;将当前代码段寄存器值 左移4位
    mov eax, 0
    mov ax, cs
	;eax 左移4位
    shl eax, 4
	;段寄存器<<4) + (32位代码段 偏移地址   == 32位代码段的真实物理地址,即段基地址
    add eax, CODE32_SEGMENT
	;将 ax寄存器保存的值 拿两个字节 放到 CODE32_DESC+2 地址处, 段基址的0-15位 放到 段描述符的16-31 位
    mov word [CODE32_DESC + 2], ax
	;eax 右移16位  也就是低16位被移出去了
    shr eax, 16
	; al(ax低8位)   此时al是32位代码段基地址当中的第三个字节(段基址 16-23位) 放到 段描述符的32-39位
    mov byte [CODE32_DESC + 4], al
	; ah(ax高8位)    此时ah是32位代码段基地址当中第四个字节(段基址 24-31位) 放到 段描述符的55-63位 第七个字节
    mov byte [CODE32_DESC + 7], ah
    
    ; initialize GDT pointer struct 
	; 全局段描述符表 起始地址
    mov eax, 0
    mov ax, ds
	;将 段寄存器值 左移4位
    shl eax, 4
	;段寄存器<<4) + (段描述符GDT_ENTRY 偏移地址   == 段描述符GDT_ENTRY 的真实物理地址
    add eax, GDT_ENTRY
	; 段描述符GDT_ENTRY 的真实物理地址 放到  GdtPtr 结构体第二个字节出 代表 GDT 基地址
    mov dword [GdtPtr + 2], eax

    ; 1. load GDT  加载全局段描述符表   lgdt指定 GdtPtr结构
    lgdt [GdtPtr]
    
    ; 2. close interrupt  关闭中断,因为现在马上要跳转到保护模式了
    cli 
    
    ; 3. open A20  打开 A20 地址线
    in al, 0x92
    or al, 00000010b
    out 0x92, al
    
    ; 4. enter protect mode  通知处理器进入保护模式  将某个寄存器对应位置1
    mov eax, cr0
    or eax, 0x01
    mov cr0, eax
    
    ; 5. jump to 32 bits code  从16位的实模式 跳转到 32位的保护模式
	; 注意 这里使用的是选择子,用来访问 全局段描述符表里面 第2项段描述符 CODE32_DESC段描述符 它记录了32位代码段(保护模式代码段)的起始地址,界限,属性等等。
    ; 使用选择子进行跳转 ,得到32位代码段 段描述符的内容(CODE32_DESC),根据内容 得到段基址 再加上段内偏移地址0 就是真实的32位代码段的入口地址
	jmp dword Code32Selector : 0

;定义保护模式代码段 32位代码段,需要按照32位的方式进行编译 所以只是编译器按照32位方式进行编译 [bits 32]
[section .s32]
[bits 32]
; 32位代码段 段基址
CODE32_SEGMENT:
    mov eax, 0
    jmp CODE32_SEGMENT


Code32SegLen    equ    $ - CODE32_SEGMENT

inc.asm

; Segment Attribute  段属性定义
DA_32    equ    0x4000
DA_DR    equ    0x90
DA_DRW   equ    0x92
DA_DRWA  equ    0x93
DA_C     equ    0x98
DA_CR    equ    0x9A
DA_CCO   equ    0x9C
DA_CCOR  equ    0x9E

; Selector Attribute 选择子属性定义
SA_RPL0    equ    0
SA_RPL1    equ    1
SA_RPL2    equ    2
SA_RPL3    equ    3

SA_TIG    equ    0
SA_TIL    equ    4

; 描述符   段描述符所需要的宏
; usage: Descriptor Base, Limit, Attr
;        Base:  dd
;        Limit: dd (low 20 bits available)
;        Attr:  dw (lower 4 bits of higher byte are always 0)
%macro Descriptor 3	                          ; 段基址, 段界限, 段属性
    dw    %2 & 0xFFFF                         ; 段界限1
    dw    %1 & 0xFFFF                         ; 段基址1
    db    (%1 >> 16) & 0xFF                   ; 段基址2
    dw    ((%2 >> 8) & 0xF00) | (%3 & 0xF0FF) ; 属性1 + 段界限2 + 属性2
    db    (%1 >> 24) & 0xFF                   ; 段基址3
%endmacro                                     ; 共 8 字节
Vue+OpenLayers:解决中国境内OpenStreetMap地图加载问题 然而,在使用OpenLayers和Vue框架搭建地图应用时,很多中国开发者可能会遇到一个常见问题:OpenStreetMap(OSM)地图无法正常加载。为了解决这个问题,我们可以使用其他方式获取地图数据,比如使用国内的地图服务提供商。通过使用国内地图服务商提供的地图数据,我们可以解决OpenStreetMap地图加载问题。然后,我们创建一个OpenLayers地图对象,并指定地图图层的源为国内地图服务商提供的地图URL。属性,可以将地图的中心点和缩放级别调整到我们需要的位置。 阅读详情

相关推荐

Python 爬虫:获取网页数据的 5 种方法

requests:适用于简单的静态网页抓取,易于使用。requestslxml:适合需要高效解析大规模网页内容的情况,支持 XPath 和 CSS 选择器。Selenium:适用于动态网页(JavaScript 渲染)的抓取,模拟浏览器行为获取动态数据。Scrapy:强大的爬虫框架,适合大规模的网页抓取任务,支持异步请求和高级功能。PyQuery:基于 jQuery 语法,适合快速开发,提供简洁的 CSS 选择器语法。

想看什么文章都可以私信给我,综合性博客。 5513

80286(官方名称为iAPX 286)

(官方名称为),是(Intel)公司的一款系列,最初发布于1982年2月1日。Intel 80286微處理器80286处理器被广泛应用在1980年代中期到1990年代早期的中。这些称为“80286电脑”或“286电脑”,有时也简称“”或“80286处理器集成了大约13万个晶体管,最大为20MHz,采用16位和24位位址匯流排。和保护模式。在下,80286直接访问内存的空间被限制在1M字节,更多内存需要通过EMS或XMS内存机制进行映射。

weixin_40191861的博客 1308

STM32中断实战:用ITR9606红外传感器DIY转速计数器(附完整代码)

本文详细介绍了如何使用STM32中断机制和ITR9606红外传感器DIY高精度转速计数器。从传感器选型、中断配置到抗干扰设计,提供完整的实战指南和优化代码,特别适合嵌入式开发者和硬件工程师快速实现工业级转速检测系统。

weixin_29159613的博客 289

芯片相关-- Cpu历史--intel系列

Cpu历史之intel系列 4004 4004是美国英特尔公司(Intel)推出的第一款微处理器,也是全球第一款微处理器;1971年11月15日发布。4004处理器的尺寸为3mm×4mm,外层有16只针脚,内有2300个晶体管,采用五层设计,10um的制程工艺。4004的最高时脉有0.74MHz,能执行4位元运算,支援8位元指令集及12位元位址集。当时钟频率仅为108KHz时,可以每秒运算6万次。 第一款4位处理器 8086 1978和1979年,Intel公司先后推出了8086和8088

cmx0128的博客 9778

Lora无线温湿度传感器方案

综上所述,Lora无线温湿度传感器以其长距离传输、低功耗、高稳定性、精准测量、无线传输以及广泛的应用场景等特点,在环境监测领域展现出了强大的竞争力和广泛的应用前景。Lora无线温湿度传感器广泛应用于各种需要远程监控和数据采集的场景,如仓储、农业、机房、楼宇、交通、工业、矿产、电力等领域。Lora无线温湿度传感器是一种采用Lora无线通信技术进行数据传输的温湿度监测设备。四、产品参数(以某款工业级Lora温湿度传感器为例)

weixin_46632654的博客 759

x86 - CPU架构/寄存器详解 (三) 保护模式

本文内容: CPU架构通用寄存器状态寄存器状态标志(Status Flags)控制标志(DF flag)系统标志以及IOPL域(System Flags and IOPL Field)系统地址寄存器GDTRLDTRIDTRTR段寄存器控制寄存器CR0CR1CR2CR3CR4调试寄存器其他寄存器EIPTSC浮点寄存器MSR参考资料   80286 也是一款 16 位的处理器,大部分的寄存器都和 8086 处理器一样。因此,80286 和 8086 一样,因为段寄存器是 16 位的,而且只能使用 16 位的偏移

Gyc8787的博客 7542

MCU启动流程详解

在MCU启动后,系统从flash主存储区开始执行,先将0x08000000地址存放的堆栈栈顶指针赋给SP寄存器,将0x08000004地址存放的Reset_Handler复位向量地址赋给PC寄存器跳转执行系统复位,期间执行System_Initializes函数配置系统时钟,重定位向量表,执行MDK自带库函数__main将RW、ZI数据段从Flash加载到RAM,并跳转至_rt_entry进行Stack和Heap的初始化,最后跳转到熟悉的main函数。

weixin_50827397的博客 1505

第七十六天学习记录:计算机硬件技术基础:Intel系列微处理器

8086/8088微处理器是英特尔公司于1978年推出的16位处理器,在80年代是个非常流行的芯片,被广泛用于个人电脑和工作站。它是x86家族处理器的一员,被视为现代PC体系结构的基础。8086/8088微处理器的主要特点如下:16位架构:支持16位数据总线和地址总线,同时可以处理16位指令。分段式内存管理:通过分段机制,可以寻址最大1MB的物理地址空间。x86指令集:8086/8088使用x86指令集,其指令集最初基于Intel 8008和8080处理器指令集,后来逐步演变为现代x86指令集。

为了上岸 2422

SAP物料主数据表结构全解析:ABAP开发与MM模块必知必会

本文深入解析SAP物料主数据的核心表结构,涵盖MARA、MAKT、MARC、MARD及MVKE等关键表。详细阐述了物料主数据在ABAP开发和MM模块中的存储逻辑与关联关系,帮助开发者和顾问高效处理数据查询、增强功能及业务故障排查,是掌握SAP物料管理基础的必读指南。

weixin_29216957的博客 379

单细胞分析避坑指南:SCTransform和Harmony参数设置详解

本文深入解析了单细胞分析中SCTransform标准化与Harmony批次校正的关键参数设置。针对10x Genomics等数据,详细探讨了如何通过调整`vars.to.regress`、`theta`等核心参数,在有效去除技术噪音的同时,避免过度校正以保留关键的生物学差异,从而提升分析结果的可靠性与可解释性。

weixin_29053073的博客 608

Intel 80286微处理器功能结构

<br />1. 主要构成<br /> <br />80286主要由指令部件(IU)、执行部件(EU)、地址部件(AU)、总线部件(BU)组成,前两者相当于8086的EU,后两者相当于8086的BIU。<br /> <br />(1) AU:按EU的请求的寻址方式形成物理地址<br />    主要由段基地址寄存器、地址加法器、段容量寄存器、描述子表基地址寄存器、段限检查器五个部分组成<br /> <br />(2) BU:按AU形成的物理地址, 完成EU所请求的寻址过程和数据传送<br />    主要由

云(存储),松(耦合) 3079

Codex、Claude Code、Opus、Trae、Cursor:一文讲懂 2026 AI 编程工具格局

2026年AI编程工具将形成三层体系:模型层(Opus/Codex)负责思考,执行层(Claude Code/Codex Agent)负责自动开发任务,工具层(Cursor/Trae)提供AI集成的开发环境。关键区别在于Agent路线强调AI主导自动化开发,而IDE路线保持人类主导。未来竞争力取决于能否将AI整合为生产力系统,掌握模型推理、Agent任务编排和AI IDE协同三大能力。核心转变是从"写代码"升级为"指挥AI写代码",高级玩家通过组合不同层级工具构建自动

m0_51738372的博客 2692

实模式和保护模式

       从80386开始,CPU有三种工作模式:实模式、保护模式和虚拟8086模式。80286开始的CPU引入保护模式,实际上,实模式概念是在保护模式推出之后为了区别保护模式之前的8086CPU工作模式才有的,在8086时代CPU工作模式只有一种,自然没有实模式之说。实模式有着先天的缺陷(下文详述),但出于向上兼容的考虑,现代CPU仍然保持着对16位操纵模式的兼容。        所谓工作...

程序人生 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

实模式和保护模式区别及寻址方式

  实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.youkuaiyun.com/rosetta 64KB-4GB-64TB?     我记得大学的汇编课程,组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下...

终身学习的程序猿 4万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

早年的一篇关于80286保护模式的文章

早年的一篇关于80286保护模式的文章    偶尔想起我在大学时代发表的唯一一篇计算机编程的文章,算不上学术文章,但就当时而言,还是很深刻的。    文章发表在《计算机世界月刊》,1992年第1期,题目为“80286实方式和保护方式切换的模块化编程技术”。大致的内容是,在DOS系统中,从80286的实模式切换到保护模式下,待完成了必要的工作以后,再返回实模式,一切恢复如前。实际

潘爱民的专栏 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

X86实模式与保护模式简介

X86实模式与保护模式简介 X86实模式与保护模式物理地址的计算方式

qq_45577173的博客 3067

实模式、保护模式和虚拟8086模式

参考自:实模式与保护模式解惑之(一)——二者的起源与区别(河西无名式) 概述:实模式和保护模式是处理器发展的两个非常重要的阶段。这两个模式下的编程也有着显著的不同,弄明实模式与保护模式的区别是理解操作系统运行原理和编写操作系统的基础。本文主要讲解了实模式和保护模式的区别和保护模式的起源,侧重点在二者寻址方式上的差异。 这里插入一段 CPU 的发展式(源自:8086 CPU

mick_seu的博客 3079

CPU 实模式 保护模式 和虚拟8086模式

从80386开始,CPU有三种工作方式:实模式,保护模式和虚拟8086模式。只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode。实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存。在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不

辉仔 の专栏 1万+

计算机的保护模式与实模式

一、背景 80386开始,CPU有三种工作方式:实模式,保护模式和虚拟8086模式。只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode。实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存。在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;支持多任务,能够快速地进行任务切.

sinat_31608641的博客 738

x86 实模式与保护模式

0386开始,CPU有三种工作方式:实模式,保护模式和虚拟8086模式。只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode。实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存。在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为

在雨一方 6979

x86历史:实模式和保护模式

本文转载自:https://www.cnblogs.com/neo-01/p/13858397.html 原标题:《实模式、保护模式和虚拟模式是X86中的概念》 原作者:海之石 在做MIT6.828 Lab1的时候,我一直不理解:为什么会有“实模式”和“保护模式”这几个东西? 实际上,这是Intel CPU为了兼容性而引入的机制。要解释清楚这些东西,要从x86的历史说起。 长话短说 实模式下,CPU将段寄存器的值作为偏移量,将逻辑地址转换为物理地址。 80286保护模式下,分段机制查询段描述符表,将逻.

weixin_49758693的博客 756

实模式到保护模式(中)

为了解决内存访问越界的问题,英特尔发明了80286处理器,这款处理器引入了保护模式,为现代操作系统和应用程序奠定了基础,但是80286在设计上有些奇葩,例如: 段寄存器为24位,通用寄存器为16位,这样显得不伦不类,80286上电时处于实模式,段寄存器只用到了16位,进入保护模式后,段选择子也不会用到24位,因此24位寄存器有些浪费。 理论上,段寄存器中的数值可以直接作为段基址。80286中16位寄存器最多访问64K的内存,为了访问16M的内存,必须不停的切换段基址。 80286是一款试水的产品,80

qq_52484093的博客 313

实模式寻址方式 ---- 实模式、保护模式、三种地址、分段、分页

保护模式和分段机制 段选择符和段描述符的关系 实模式、保护模式、三种地址、分段、分页 https://www.cnblogs.com/kelamoyujuzhen/p/10555924.html 64KB-4GB-64TB? 我记得大学的汇编课程,组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址...

happylzs2008的专栏 3658

我看保护模式

保护模式,对于学过操作系统的人来说,是一个熟悉而又陌生的概念。之所以熟悉,就是所有的操作系统的书籍都会说到保护模式;之所以陌生,我敢说很多人学完了之后,压根不晓得什么是保护模式,怎么算是保护模式,再者就是它到底保护了什么东西。         “你说的不对,怎么能一棒子打死一帮人!保护模式就是进程相互隔离,实现多任务;就是有分页机制,可以节约内存。”,暂且不说对于不对,其实我也不知道我理解的是否

Fly Follow the Heart 5048

32位保护模式汇编语言[1]:实模式与保护模式的故事

漫游在机器指令的海洋,徘徊于实模式与保护模式之间,出入之间,自由无限。 ——谨以此系列文档献给广大疯狂痴迷于计算机程序的极客们~!

Mighten Dai的ASM, C, C++的天地 1377
上一篇: 实模式8086 与 保护模式80286
下一篇: 80386保护模式下实现 Hello World
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值