• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Linux内核系列—操作系统开发之保护模式的优势,linux内核

Linux内核系列—操作系统开发之保护模式的优势,linux内核

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了linux操作系统内核,linux内核 文件操作,linux内核,深入理解linux内核,linux内核完全注释等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Linux内核系列—操作系统开发之保护模式的优势,linux内核


在上一篇中我们虽然成功进入了保护模式,但是并没有体验到保护模式带给我们的便利。其实在保护模式下寻址空间可以达到4GB,实模式下1MB的寻址能力差得太远了。那么下面,我们就把程序稍作修改,体验一下它对超过1MB内存的访问能力。

我们来试验一下读写大地址内存。在前面程序的基础上,新建一个段,这个段以5MB为基址,远远超出实模式下1MB的界限。我们先读出开始处8字节的内容,然后写入一个字符串,再从中读出8字节,如下所示:

	call	TestRead
	call	TestWrite
	call	TestRead

如果读写成功的话,两次读出的内容应该是不同的,而且第二次读出的内容应该是我们写进的字符串。字符串是保存在数据段中的,也是新增加的。增加的两个段如下所示:

LABEL_DESC_DATA:   Descriptor    0,      DataLen-1, DA_DRW    ; Data
LABEL_DESC_TEST:   Descriptor 0500000h,     0ffffh, DA_DRW

SelectorData		equ	LABEL_DESC_DATA		- LABEL_GDT
SelectorTest		equ	LABEL_DESC_TEST		- LABEL_GDT

[SECTION .data1]	 ; 数据段
ALIGN	32
[BITS	32]
LABEL_DATA:
BootMessage:		db	"Joey, I'm in protected mode!"
OffsetPMMessage		equ	BootMessage - $$		;表示字符串BootMessage相对于本节的开始处(LABEL_DATA)的偏移
StrTest:		db	"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0
OffsetStrTest		equ	StrTest - $$
DataLen			equ	$ - LABEL_DATA
; END of [SECTION .data1]

段[SECTION .s32]这个段的开头初始化了ds、es和gs,让ds指向新增的数据段,es指向新增的5MB内存的段,gs指向显存。如下所示:

LABEL_SEG_CODE32:
	mov	ax, SelectorData
	mov	ds, ax			; 数据段选择子
	mov	ax, SelectorTest
	mov	es, ax			; 测试段选择子
	mov	ax, SelectorVideo
	mov	gs, ax			; 视频段选择子(目的)

数据段的基址便是LABEL_DATA的物理地址。于是OffsetStrTest既是字符串相对于LABEL_DATA的偏移,也是其在数据段中的偏移。我们在保护模式下需要用到的正是这个偏移,而不再是实模式下的地址。section的一点妙用指的便是这里的$$。

	; 初始化数据段描述符
	xor	eax, eax
	mov	ax, ds
	shl	eax, 4
	add	eax, LABEL_DATA
	mov	word [LABEL_DESC_DATA + 2], ax
	shr	eax, 16
	mov	byte [LABEL_DESC_DATA + 4], al
	mov	byte [LABEL_DESC_DATA + 7], ah

运行如下所示:

第一次执行call TestRead时显示8个空字符,第二次执行call TestRead时显示ABCDEFGH。因为TestRead的段寄存器指向的是5MB内存地址处的内容,一开始是没有任何数据。

TestRead:
	xor	esi, esi
	mov	ecx, 8
.loop:
	mov	al, [es:esi]
	call	DispAL
	inc	esi
	loop	.loop

	ret

然后第190行向这个5MB内存地址处依次写入8字节数据。

 

一个码农的日常 

【源码及软盘映像】

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Linux内核系列—7.操作系统开发之中断和异常,linux内核
  • Linux内核系列—操作系统开发之保护模式的优势,linux内核

相关文章

  • 2017-05-26安卓界面基本组件------计时器,安卓------计时器
  • 2017-05-26Android中手机录屏并转换GIF的两种方式,android录屏
  • 2017-05-26Android 自定义控件之第三讲:obtainStyledAttributes 系列函数详解
  • 2017-05-26利用GridView实现单选效果,gridview实现单选
  • 2017-05-26Android 手机卫士--导航界面3、4和功能列表界面跳转逻辑处理,android4和
  • 2017-05-26android发送邮件
  • 2017-05-26[android] 手机卫士绑定sim卡,androidsim
  • 2017-05-26「视频直播技术详解」系列之六:现代播放器原理,
  • 2017-05-26Android对应用程序签名,android签名
  • 2017-05-26【Android】以后改为在Win10下开发了,androidwin10

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android ShareSDK快速实现分享功能,androidsharesdk
    • WebView的使用,WebView使用
    • 使用Android-Debug-Database 在浏览器中查看App的数据库,清科zdatabase数据库
    • 报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.,theme.appcompat报错
    • 在Kotlin上怎样用Mockito2 mock final 类(KAD 23),kotlinmockito2
    • Android学习笔记(34):Android菜单
    • 利用bintray-release插件上传到Bintray- HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]问题解决,bintrayrelease
    • 高并发低基数多字段任意组合查询的优化
    • Android启动篇 — init原理(二),androidinit
    • Android之网络编程利用PHP操作MySql插入数据(四),androidmysql

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有