首页
社区
课程
招聘
汇编第4课的问题
发表于: 2010-6-13 18:42 3679

汇编第4课的问题

2010-6-13 18:42
3679
20根总线。和1M存储器地址空间,还有16位的字长,是怎么样的寻址关系?

16位的加4位变成20位后,存储器又分成64K个若干段,是怎么个关系,为什么要凑成20位?

8086 汇编

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
听完视频后云里雾里。
2010-6-13 18:48
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1. 8086 所说的20根总线是指20根地址总线, 8086是 20根地址总线和16根数据总线
2. 1根线可以输出两个状态 0或者1 所以地址是以20位来表示,范围是00000-FFFFFH,也就是1M
     而数据是以16位来表示的,范围是0000-FFFFH,也就是64KB
3. 插入一个: 你所提到一个16位的字长 是指1字节=8位  1字=2字节=16位
4. 由于上面所说的数据是16位而地址是20位,就是说数据不够表示地址,所以采用以段的形式来表
   示20位的地址. 即 物理地址 =段+偏移地址  20位的地址 =16位的数据左移4位(段)+16位的
   数据偏移(偏移)
5. 因为数据是16位,1次只能表示16位,段也是数据总线来表示,所以段也只能表示出0000-FFFFH
    即64KB.所以是64K个若干段.
6. 问题到这里差不多了,我建议多看书,理解 实践才是王道.
2010-6-13 20:02
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
20根地址总线,16根数据总线,16位左移4位后 变成了 段首地址,在加上16位的数据偏移=物理地址

2^20为1M所以地址总线的寻址范围是1M,而数据的是是64K,这么说来、数据总线是为了表示物理地址而存在的么?
2010-6-13 20:13
0
雪    币: 213
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
20根总线的内存寻址空间就是2的20次
2010-6-13 20:40
0
雪    币: 246
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
  教科书上只讲:16+4=20位,所以16位段地址左移4位+16位偏移=20位物理地址。很多人也只是死记,其实并不知道其含义,而且还会感到晕,怎么16位左移4位,再加16位偏移就成20位了?
  下面从一个故事说起。

一个鲜为人知的故事
============
  现在,人们都知道Intel和Microsoft是多么的伟大,如果真正了解他们的成长过程,你就会发现他们也很普通,甚至不怎么样。就象周恩来等中共精英,当初会愚蠢的把红军指挥权交给一个德国人,而让红军一败涂地一样,放到现在别的不说,一个卖国、勾结什么反华势力就能把他们淹死!
  扯远了,拉回来。IBM决定使用8088芯片开发IBM PC,及盖茨要为建议的IBM PC生产一个操作系统的时候,英特尔警告他们两个,说你们不要用那个,我们正在开发一款新的16位CPU(80286),你们用8088会后悔的。
  然而, 由于IBM和盖茨都不知道PC计算机操作系统是怎么会事,所以他们不听。盖茨在华盛顿从一个公司买了一个操作系统。(西雅图电脑产品)的这个OS被称为QDOS(快速和肮脏的操作系统),它基本是由三位前DRI(Digital Research Inc數位研究公司)的人为8086开发的,这三个人成立了这家新公司,并基本上复制了CP/M,并把它转换为16位,使用和增加了内存容量(从64K到量1024K)。然而,当它被开发成16位CP/M时,它不是写给保护模式的。后来盖茨把它针对IBM做了很少的小改动,改名为像86-DOS或DOS-86或类似的东西。它基本上是专为CP/M用户设计的。事实上,第一台IBM个人电脑(他们被称为个人电脑之前)吹嘘说CP/M的程序可以在其上运行。-----瞧瞧是不是优点欺诈和奸商的味道?所以在很长时间unix、OS/2的开发人员都认为DOS根本就谈不上是真正的操作系统。
        
8086/8088的寻址问题
===============
  8088和80286都是16位CPU,Intel当初为什么会警告IBM和盖茨呢?到底发生了什么?
  要了解发生了什么,我们要看看处理器的内部,会看到巨大的差异。首先,你找一片8088CPU,把包装磨掉,磨到CPU硅片,放到显微镜下,你会看到8086/88的内部结构,它根本不是一个新的设计,而是两个并联运行的8085(8位)微处理器再多那么一点点。
  每个8085有它自己的8位数据和16位寻址能力。结合2个8位数据寄存器假装16位寄存器很容易。事实上这没有任何新东西,RCA COSMAC微处理器就使用16个8位寄存器,可作为内部的8位或16位寄存器使用,你可以有多达16个8位寄存器或8个16位寄存器或两者的任何组合。现在,一个中国的普通IC厂都可以轻易设计的出来。
  可能由于受当时生产工艺所限,8088只能有40个脚,intel的设计“精英”左思右想,确定了20条地址线(1M的寻址空间),而且16条数据线还要和20条地址线中的16条复用(分时复用,即一会是地址线,一会是数据线,对此要想了解,可看8088芯片手册的时序部分,也可看8052单片机书籍,它的地址线和数据线也是复用的)。
  
  到了问题的实质了,8088内的两个8085各有一套16位寻址寄存器,如何让他们寻址20位的1M地址呢?其实把他们并在一起形成32位寻址很简单,如果是那样后来的很多麻烦可能就都没有了(如A20门),但当时那些“精英”可能认为32位寻址(4G地址空间)那是扯淡,估计地球消失了也用不到那么多的内存吧?再说了老板逼的又紧,于是他们采用了在一个硬件上使用两个8085非常好实现的方法--分段:
  他们把1024K地址空间分成16字节的段,共64K个段,用一个8085的16位寻址寄存器作地址偏移寄存器(故段的长度是64K),而另一个8085的16位寻址寄存器作16字节段的段地址寄存器,注意,他保存的不是16字节段的地址,而是16字节段的序号(0,1,...65535)。
      这样做的好处是:只要在两8085CPU之间加一个移位器和一个20位的加法器,就可以完成20位的地址寻址--一个8085的地址寄存器(段地址--就是16字节段的序号)左移4位(*16 = 16字节小段的首地址),加上另一个8085的地址寄存器就可以啦,哈哈!可以向老板交差了,制作成本低,设计速度快,有钱不抢是孙子!至于以后,。。。。
  其实,段的大小从16-64K字节都可以通过类似方法实现1M寻址,为什么那帮精英非选16字节呢?因为,16字节的段,形成地址时段寄存器的位移最少,最好实现。
  大家想想,要是实现32位寻址,则需要在两个8085间加一个乘法器,但是如果实现了软件开发人员会省多少事。。。。,另外,要知道直到64位CPU才突破32位地址空间的限制。
  
  教科书上只讲:16+4=20位,所以16位段地址左移4位+16位偏移=20位物理地址。很多人也只是死记,其实并不知道其含义,而且还会感到晕,怎么16位左移4位,再加16位偏移就成20位了?
  
  其商业、职业含义是应付、凑伙,并带点糊弄,用褒义词,最多也是用最小的成本、最快的速度占领市场,决不是技术上精益求精。其理论实质是:分段,1024K分成64k个16字节的段,段寄存器保存的不是段的首地址,而是段的序号。不知为什么,教科书上从来不这样叙述。
2010-6-13 23:01
0
雪    币: 2
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
siz
7
中山大学的视频不错的
2010-6-14 00:23
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
王爽的第二版中讲的很清楚的
2010-6-14 04:41
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实个人计算机发展史就是一个不断摸索的历史,现在的人玩电脑觉得很神秘的原因就在于那些人在不断摸索的时候做的修改并不是都是合理的。
2010-6-14 05:07
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
其他人的回答 都没有2楼的回答细心。感谢2楼的同学。
2010-6-14 07:35
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看得云里雾里的,看样子好难好难
2010-6-14 16:08
0
雪    币: 459
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不粗心了,以字节为单位的
2010-6-16 17:19
0
游客
登录 | 注册 方可回帖
返回
//