第二章-微处理器及其体系结构.ppt

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.物理地址和逻辑地址 8086CPU存储系统中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H ~ FFFFFH 分段后在用户编程时,采用逻辑地址,形式为 段基地址 : 段内偏移地址 分隔符 物理地址 14700H 逻辑地址 1460H:100H 逻辑地址 段基址说明逻辑段在主存中的起始位置 8088规定段基址必须是模16地址:xxxx0H 省略低4位0000B,段基址就可以用16位数据表示,就能用16位段寄存器表达段地址 偏移地址说明主存单元距离段起始位置的偏移量 每段不超过64KB,偏移地址也可用16位数据表示 物理地址和逻辑地址的转换 12340H +5678H 179B8H 段基址左移4位 加上偏移地址 得到物理地址 将逻辑地址中的段基址左移4位,加上偏移地址就得到20位物理地址 物理地址和逻辑地址的转换 一个物理地址可以有多个逻辑地址 逻辑地址 1123:13、1124:03 物理地址 11243 11243 段基址 1123H 偏移量 13H 段基址1124H 偏移量 03H 存储单元 物理地址 11230H 11231H 11232H …… 1123FH 11240H 11241H 11242H 11243H 4个段寄存器 8086有4个16位段寄存器 CS(代码段)指明代码段的起始地址 SS(堆栈段)指明堆栈段的起始地址 DS(数据段)指明数据段的起始地址 ES(附加段)指明附加段的起始地址 每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途 代码段寄存器CS(Code Segment) 代码段用来存放程序的指令序列 代码段寄存器CS存放代码段的段基址 指令指针寄存器IP指示下条指令的偏移地址 处理器利用CS:IP取得下一条要执行的指令 举例:若一个程序段开始执行之前,(CS)=97F0H, (IP)=1B40H,试问该程序段启动执行指令的实际地址是什么? 堆栈段寄存器SS(Stack Segment) 堆栈段确定堆栈所在的主存区域 堆栈段寄存器SS存放堆栈段的段地址 堆栈指针寄存器SP指示堆栈栈顶的偏移地址 处理器利用SS:SP操作堆栈顶的数据 举例:若堆栈寄存器(SS)=3A50H,堆栈指针(SP)=1500H,现执行出栈操作,则取的是什么单元的数据? 数据段寄存器DS(Data Segment) 数据段存放运行程序所用的数据 数据段寄存器DS存放数据段的段地址 各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址 处理器利用DS:EA存取数据段中的数据 附加段寄存器ES(Extra Segment) 附加段是附加的数据段,也保存数据: 附加段寄存器ES存放附加段的段地址 各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址 处理器利用ES:EA存取附加段中的数据 串操作指令将附加段作为其目的操作数的存放区域 4 堆栈 ▲堆栈是按照“后进先出”原则进行读/写访问的一段由“高到低”生成的特殊内存区域,用于暂存数据。 ▲用作堆栈的区域称为堆栈段最多包含64 K个单元。堆栈段在内存中的位置由堆栈段寄存器SS和堆栈指针SP来指示。SS中存放堆栈段的首地址,SP中存放栈顶单元的偏移地址。 ▲ 8086CPU规定堆栈操作总是按字进行。 ▲入栈和出栈操作遵循“后进先出”(LIFO)的原则。 ▲堆栈指针SP—— 堆栈的操作工具,存取数据都在栈顶进行。 堆栈操作 ▲在堆栈操作中,SP的内容随着入出栈操作的进行而不断变化,使得堆栈栈顶是“浮动”的。 ▲“后进先出(LIFO)” 原则。 ▲ 压栈(PUSH)与弹出(POP)。 ▲8086CPU栈顶单元数据总是有效(即所谓的“实栈顶”) 。即SP指向的存储单元已存放有信息。 ▲8086CPU堆栈指针SP压栈时“负向”调整(–2), 弹出时+2。 堆栈操作举例 假设现在需要将AX=2233H和BX=4455H依次推入堆栈。执行入栈操作前的情况是SS=1050H, SP=0008H,因此堆栈段首地址为10500H,当前栈顶单元地址为SS×16 + SP=10508H。在完成上述操作后执行出栈操作,将当前栈顶单元的内容弹出到BX中。操作情况如下图所示。 段超越前缀指令 没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段 默认的情况允许改变,需要使用段超越前缀指令;8088指令系统中有4个: CS: ;

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档