看到《x86/x64体系探索及编程》这本书的介绍里提到“基本上就可以写出自己简易的OS核心”,突然想起自己大学时候学的是硬件,曾经也尝试着去用c来写一个简单的OS系统。当然,说是系统也算不上,只是当时很流行研究多任务抢占,就学着做一个简单的多任务抢占的OS。现在想来却也不记得当时具体是怎么做的和做成什么样的了。

重点看了看试读章节第二章的部分,恰好也看到了“PIC”这样一个话题。我在学习的时候也查过,但是关于这部分的资料不太多。网上搜到的PIC相关内容大多是指“PeripheralInterfaceController”,但是在OS编程基础中的PIC指的是PositionIndependentCode,中文叫“位置无关编码”,试读章节里也用一个getstdhadle()的例子来简单介绍了一下什么是位置无关编码,因为这也算是X86基础知识吧,并没有太深入的介绍,那我也在这里用最简单易懂的方式介绍下我对“位置无关编码”的理解。

所谓的位置无关编码。是一种库文件的编码组织方式,其特点是方便系统装载。我们了解这个可以从头说开,像试读章节的例子中一样,最早的时候我们都是用“绝对地址”来链接定位一段代码,这样就会出现一个问题,这个地址是这些代码的起始地址,代码必须放在这个绝对的位置上才能正常运行,否则当代码去访问、执行某个变量名、函数名对应地址上的代码时就会找不到,程序也就跑挂了。这样用绝对地址去定位的编码方式我们叫“位置相关编码”。

有“相关”就有“无关”,有“绝对”就肯定有“相对”。位置无关编码里的定位跳转指令不是一段绝对跳转指令,而是一段相对跳转指令,访问的是一个相对跳转地址,因此,包括这个语句和main在内的代码段无论是否放在它的运行域这段代码都能正常运行。这就是所谓的位置无关代码。现在我们的编码方式也已经更多的使用位置无关编码。

本文摘自ITEYE,ITeye11月技术图书有奖试读活动,原文链接如下:http://jacksonren1987.iteye.com/blog/1717194

PIC浅谈--《x86/x64体系探索及编程》试读相关推荐

  1. 《x86/x64体系探索及编程》图书信息

    x86/x64体系探索及编程 (对x86处理器介绍得最详尽又最具实践指导意义的一本书) 邓志著 ISBN 978-7-121-18176-4 2012年10月出版 定价:119.00元 16开 840 ...

  2. 浅谈Service Mesh体系中的Envoy

    摘要: 提到Envoy就不得不提Service Mesh,说到Service Mesh就一定要谈及微服务了,那么我们就先放下Envoy,简单了解下微服务.Service Mesh以及Envoy在Ser ...

  3. 浅谈微服务体系中的分层设计和领域划分

    1.摘要 本文阐述了一种将分层设计和DDD领域设计应用于微服务体系架构的方案实践,也是个人的最佳实践.对于互联网公司来说,我们主张将其Web服务架构分为五层:基础设施层.领域服务层.应用服务层.网关层 ...

  4. 产品经理—开发转产品,浅谈自我学习与探索

    编辑导语:如今有越来越多人正想着入职产品岗位,产品经理不论出生,人人都是产品经理,然而想做好产品经理也绝非易事.本文讲述了作者从开发转向产品岗位的背景.想法.学习和探索过程的些许经验,亦或是对自己转行 ...

  5. 浅谈数据治理体系演进

    网易内部如严选.云音乐.传媒等数据团队对数据内容体系的治理思路都是将治理规范融入到开发过程中,将治理的动作提前,这其实就是"开发治理一体化":事后依赖数据资产健康评估和治理工具进行 ...

  6. 浅谈Linux tty体系,理清tty驱动层次与各种概念

    虽然Linux内核是由C语言写的,但处处体现面向对象的设计思想,这对很多只会C语言的朋友来说,理解比较困难,尤其是tty体系,涉及很多混乱的概念. 1. 上古时期的tty.terminal和conso ...

  7. 浅谈MySQL架构体系

    一 :数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例.在MySQL中,数据库和数据库实例定义如下: 数据库:存储数据的集合: 数据库实例:操作数据库的集 ...

  8. [VB.NET]浅谈MDI窗体的多窗体编程

    ---MDI窗体和多窗体编程--- 目的:在MDI窗体内用ToolBar实现多窗体的实例,在VB.NET中显示窗体一般代码如下     Private Sub ToolBar1_ButtonClick ...

  9. 浅谈NAND FLASH的两种编程方式

    NAND Flash 一般有两种编程方式:one shot or two pass. 这里以TLC为例,如图为LUN的结构: 1. 如果以ONE Shot 编程(eg: bisc3), 如图: 如上图 ...

  10. 浅谈Java、PHP、C++编程的优缺点

    Java .PHP.C++ 编程语言都是非常流行的编程语言,在开发.Web 开发.移动应用开发等领域都有广泛的应用.本文将从以下几个方面分析 Java.PHP.C++ 编程语言的优缺点. 一.Java ...

最新文章

  1. 自己亲自写的两本linux资料,免费下载,pdf文档
  2. 信息系统管理工程师考前复习笔记三
  3. 新手入门深度学习 | 卷积神经网络是什么?
  4. PHP连接Mysql数据实现增上改查
  5. 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(52)-美化EasyUI皮肤和图标
  6. [APM] 解读APM技术分类和实现方式
  7. Total Physical Response TPR
  8. 平衡二叉树的旋转_平衡二叉树的旋转
  9. 一种使用pyinstaller时图标问题解决方案
  10. 揭秘百万人围观的Facebook视频直播
  11. slopShell:强大的PHP Webshell
  12. Vue中使用Video标签播放 <解析后的短视频>去水印视频无响应
  13. 人行地区代码一览表_全国各地区代码.
  14. Oracle XDB组件的重建
  15. 锁定计算机和睡眠有什么区别,电脑休眠、睡眠、关机之间有什么区别?三者之间区别介绍...
  16. 10分钟教会你,如何用模拟量调试电机
  17. 实用网站推荐(3):菜鸟教程
  18. 表结构设计器EZDML常见问题(2019年11月整理)
  19. java 九大行星运行_html5 canvas太阳系九大行星运行动态图代码
  20. python中namedtuple的用法

热门文章

  1. ansible基本模块-copy
  2. 现代软件工程个人作业进度
  3. FFmpeg视频编解码库,无法解析的外部符号、找不到inttypes.h文件的问题
  4. Windows系统结构
  5. 2015与2016年终总结
  6. tomcat 在linux下的关闭问题
  7. codeforces 733D
  8. Python实现常见算法[1]——冒泡排序
  9. 几种.NET平台数据持久化框架介绍
  10. [bzoj2878][Noi2012]迷失游乐园(基环树dp)