- 4
- 0
- 约7.6千字
- 约 64页
- 2019-03-30 发布于湖北
- 举报
2.12 代码段 这段长度为 10 字节的字节的指令,存在从123B0H~123B9H的一组内存单元中,我们就可以认为,123B0H~123B9H这段内存单元是用来存放代码的 ,是一个代码段 ,它的段地址为123BH,长度为10字节。 2.12 代码段 如何使得代码段中的指令被执行呢? 将一段内存当作代码段,仅仅是我们在编程时的一种安排,CPU 并不会由于这种安排,就自动地将我们定义得代码段中的指令当作指令来执行。 CPU 只认被 CS:IP 指向的内存单元中的内容为指令。 所以要将CS:IP指向所定义的代码段中的第一条指令的首地址。 CS = 123BH,IP = 0000H。 2.9节~2.12节 小结 1、段地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址。 2、CS存放指令的段地址,IP存放指令的偏移地址。 8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。 2.9节~2.12节 小结(续) 3、8086CPU的工作过程: (1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器; (2)IP指向下一条指令; (3)执行指令。(转到步骤(1),重复这个过程。) 4、8086CPU提供转移指令修改CS、IP的内容。 小结 * 2.6 8086CPU给出物理地址的方法 8086有20位地址总线,可传送20位地址,寻址能力为1M。 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。 2.6 8086CPU给出物理地址的方法 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。 8086CPU相关部件的逻辑结构 在8086CPU内部用两个16位地址合成的方法来形成一个20位的物理地址 地址加法器 地址加法器合成物理地址的方法: 物理地址=段地址×16+偏移地址 物理地址=段地址×10H+偏移地址 例如: 8086CPU访问地址为123C8H的内存单元 由段地址×16引发的讨论 观察移位次数和各种形式数据的关系: (1)一个数据的二进制形式左移1位,相当于该数据乘以2; (2)一个数据的二进制形式左移N位,相当于该数据乘以2的N次方; (3)地址加法器如何完成段地址×16的运算? 以二进制形式存放的段地址左移4位。 由段地址×16引发的讨论 2.7 “段地址×16+偏移地址=物理地址”的本质含义 两个比喻说明: 说明“基础地址+偏移地址 = 物理地址” 的思想:第一个比喻 说明“段地址×16+偏移地址=物理地址”的思想:第二个比喻 8086CPU就是这样一个只能提供两张3位数据纸条的CPU。 “基础地址+偏移地址 = 物理地址” 比如说,学校、体育馆同在一条笔直的单行路上(学校位于路的起点0米处)。 读者在学校,要去图书馆,问我那里的地址,我可以用几种方式描述这个地址? “基础地址+偏移地址 = 物理地址” (1)从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。 (2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。 第一个距离2000m是相对于起点的基础地址; 第二个距离826m是将对于基础地址的偏移地址。 “段地址×16+偏移地址=物理地址” 比如我们只能通过纸条来通信,读者问我图书馆的地址,我只能将它写在纸上告诉读者。 显然我必须有一张可以容纳 4 位数据的纸条才能写下2826这个数据: “段地址×16+偏移地址=物理地址” 不巧的是,没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。 这样我只能以这种方式告诉读者2826这个数据: 2.8 段的概念 错误认识: 内存被划分成了一个一个的段,每一个段有一个段地址。 其实: 内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。 2.8 段的概念 我们可以认为:地址10000H~100FFH的内存单元组成一个段,该段的起始地址( 基础地址)为10000H,段地址为1000H,大小为100H。 2.8 段的概念 我们也可以认为地址10000H~1007FH、10080H~100FFH 的内存单元组成两个段,它们的起始地址( 基础地址 )为10000H和10080H,段地址为:1000H 和1008H,大小都为80H。 2.8 段的概念 以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单
原创力文档

文档评论(0)