8086的储存器编址

值得注意的是JOS是采用8086进行操作系统搭建的!

本来觉得一无是处的8086,现在觉得真要好好学学了,因为JOS,哈哈

在操作系统底层常常会遇到"逻辑地址"的概念,各种地址混淆在一起,极易头疼...

http://blog.csdn.net/cinmyheart/article/details/39843857

上面的Link是我对虚拟地址,线性地址,物理地址进行的分析.

----------------------------------------------------------------------------------------------------------------------------------

首先引出一个问题,很多人都知道,段寻址的方式是

segment:offset,比如0x0:0x7c2d

这是8086在实模式下的物理寻址方式.

问题: 你有没有想过,为什么是这样寻址? 根本的原因在哪儿?

这篇blog就试图回答这个问题.

8086有20根地址线,2^(20) == 1MB的储存器地址空间.这1MB的储存单元按照0x00000~0xFFFFF来编址.

8086有16根数据线,2^(16) == 64KB.

矛盾就凸显出来了,试问,能用寄存器直接对所有的地址空间进行寻址嘛? 明显不能, 数据线的宽度小于地址线的宽度!

所以,为了对所有1MB的储存器地址空间进行寻址,有人想出了,"一块块寻址"的办法 ---- 分段寻址机制.

想想,整个内存可以达到16个段(2^4).

在为程序分配内存空间的时候,一个程序可以有代码段CS,数据段DS,堆栈段SS和附加段ES

于是就有了段寻址, seg:offset. == (seg << 4) + offset.

这里seg和offset都可以用16位的寄存器存储,进而构造出了20bit的物理地址.

假设我们要对代码段内的某个指令进行寻址,我们可以

CS:IP

如果我们要对数据段内某个数据进行寻址,我们可以

DS:register 这里register可以是IP,甚至可以是BX

如果我们要对堆栈段进行寻址,我们可以

SS:SP 或SS:BP

等等.

接着还有个问题,为什么我们电脑关机之后再重新冷启动,按下启动电源键.

电脑每次都正确无误的启动,是不是按下电源键之后,电脑都进行了"某些相同的动作"?

当然, 每次按下电源键, CPU都会复位, 一切从新开始.

而对于8086来说,复位后,所有寄存器的值都是0,除了CS == 0xFFFF,即代码段(这都是硬件工程师故意设计好的)

接着,这是实模式,于是进行段寻址,

CS:IP == 0xFFFF0

寻址结果显示,复位之后,第一条CPU应该执行的指令在物理地址0xFFFF0处.

于是计算机就开始启动啦~ 每次都从0xFFFF0开始.

可以发现,开机后第一条指令,当前地址是0xFFFF0. 在此之前,CS == 0x0000

细心点会发现,第一条语句在段0xF000内, 此时,CS == 0xF000

CS = 0xFFFF IP = 0x0000的时候 CPU在自己初始化,

CPU初始化完成之后,系统马上进入实模式,CS变成 0xF000 IP=0xFFF0

我们利用JOS进行验证

The IBM PC starts executing at physical address 0x000ffff0, which is at the very top of the 64KB area reserved for the ROM BIOS.

The PC starts executing with CS = 0xf000 and IP = 0xfff0.

The first instruction to be executed is a jmp instruction, which jumps to the segmented address CS = 0xf000 and IP = 0xe05b .

update: 2014.12.21

补充一下,有意思的是根据CSAPP得知,core i7 的地址线长度和数据线长度分别是48bits,52bits

强调一下,以上讨论寻址,都是讨论的实模式下的寻址.

如有错漏,恳请指正交流 : )

update :2015.04.19

修正了之前关于系统启动时CS段的笔误

摄于南苑

8086的储存器编址相关推荐

  1. 关于程序为什么要代码段,程序段

    分段就是把相关数据凑到一起,我们都知道计算机指令是一条一条往下进行的,在循环取指令.执行指令的操作.那么计算机如何取得下一指令的地址呢?进行分段就好办了,因为下一条指令就在往下下一个内存的位置嘛! 我 ...

  2. 第二章16位和32位微处理器(2)——一些操作时序与中断

    系统的复位和启动操作 重点: (1)8086的复位和启动操作通过RESET信号来引发的,要求信号起码维持4个时钟周期的高电平 (2)复位状态,CPU将CS设置为FFFFH,其他内部寄存器都为0 (3) ...

  3. DJ14 简单接口电路及应用

    目录 一.I/O 接口 1. 接口和端口的关系 2. 接口的基本结构 3. 8086/8088 端口编址 二.简单接口芯片 1. 74LS244 三态门 2. 74LS273 锁存器 3. 74LS3 ...

  4. 8086存储器编址 和 I/O编址

    1)存储器编址 由于微处理器内部的寄存器和ALU都是16位的,为了方便20位的地址管理,在8086对存储器管理的设计中,采用了分段管理的技术. 采用分段方法进行编址的优点: 减少指令长度,提高指令执行 ...

  5. 汇编8086复习——基础知识、指令汇总、上机实验踩坑

    8086处理器基础知识 汇编语言是大小写不敏感的低级语言,意思就是mov和MOV是汇编语言来说是一样的,当然大小写混用也是可以的,如Mov 在8086汇编语言里,数字默认是十进制的,如果是其他进制数字 ...

  6. 计算机组成原理—储存器的层次结构

    储存器的层次结构 首先众所周知,在主机中一个完整的储存系统应该包括了主储存器,cache,外储存器. 其实我们还可以把储存器分为随机储存器(RAM),只读储存器(ROM). RAM又可以分为静态RAM ...

  7. 微机原理——8086系统的概述与引脚介绍

    概述 8086 是 16 位 CPU , 采用高性能的 N 沟道.耗尽型负载的硅栅工艺(HMOS) 制造.由于受当时制造工艺的限制,为了解决功能多和引脚少的矛盾,部分引脚采用 分时复用 的方式,构成了 ...

  8. 处理器不同编址方式、指令/数据处理方式区别

    每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如ARM,MIP ...

  9. 基于8086微机原理核心考点(考试必背)

    第一章: 1.冯•诺依曼计算机思想: 思想核心是程序存储和程序控制,计算机主要有运算器,控制器,存储器,输入.输出设备组成,其数据和程序均以二进制形式存放. 2.微处理器,微型计算机,微型计算机系统的 ...

最新文章

  1. Linux内核模块编程系列1-极简内核模块编写
  2. php 的包管理工具 composer
  3. 【Linux】ubuntu系统VMware Tools(文件共享、全屏...)3步完成安装过程亲测可用
  4. cmd 220 ftp 远程主机关闭连接_针对一些弱口令漏洞的解决办法——设置远程管理登录的配置...
  5. #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)
  6. 间接银团贷款(Indirectly Syndicated Loan/PARTICIPATED)
  7. java listview排序_android listviewadapter 怎么进行排序
  8. 《背影》----朱自清
  9. Unity IOC简单认知
  10. ffmpeg编码个参数的设置以及作用
  11. 正则表达式(模拟网络爬虫、网络蜘蛛)
  12. SQL Server 索引 之 书签查找 第十一篇
  13. 松下MINAS-A6伺服电机调试记录
  14. python的ide编辑器_python轻量IDE编辑器 pyscripter 免费开源 更新3.6.3版本
  15. 上市4天暴降1500元,iPhone14创下了苹果降价最快纪录
  16. word 表格不跨行断页
  17. 马尔科夫决策过程(Markov Decision Process)
  18. 360度全景图像制作
  19. 视频转换格式,用DOS命令
  20. 靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol

热门文章

  1. 大数据和人工智能未来发展趋势
  2. 手机桌面上的计算机为什么不能删除,为什么我的电脑无法删除C盘上的文件当删除 – 手机爱问...
  3. java 银联支付_java服务器端移动银联支付的流程
  4. C# Microsoft Speech 选择音频输出设备
  5. 通过游戏编程学Python(1)— 猜数字
  6. 大数据发展促进委员会在京成立
  7. 逆水寒服务器维护公告,《逆水寒》2018年11月29日更新公告
  8. 雷电连接不到android studio,android studio连接雷电模拟器 【AS 模拟器】
  9. 江苏省一级计算机ms,计算机一级六大MS题型介绍
  10. MySql在Springboot项目中报错errorCode 1045 ,state 28000