ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

8086存储器组织

2021-10-17 17:32:06  阅读:235  来源: 互联网

标签:8086 16 组织 存储器 物理地址 地址 偏移 寄存器 堆栈


8086/8088只工作于实模式。只允许CPU在1MB范围内对存储器进行存取操作,DOS操作系统也要求微处理器工作与实模式。 1.段地址和偏移地址 8086/8088共有20根地址总线,可直接寻址的内存空间为2的20次方=1MB字节单元,地址范围00000~FFFFFH,每个单元都有一个绝对地址,称为物理地址,CPU访问存储单元时,必须先确定物理地址,才能实现对该单元的存取操作。 两个寄存器形成一个20位的地址 段地址或段基地址                         偏移地址或偏移量 表示形式       段地址:偏移地址        这种地址又叫做逻辑地址                       16进制   16 在形成20位物理地址时,段寄存器16位数自动左移4位(1位16进制位)使最低的4位为0,然后与16位的偏移地址相加,形成20位物理地址 物理地址=段地址*10H+偏移地址 列如,段寄存器CS=1120H,指令指针IP=2008H,则逻辑地址表示为CS:IP=1120H:2008H,物理地址则为1120H*10H+2008H=13208H。 起始地址       结束地址 设段基地址为1000H,则该段的起始地址为1000H*16=10000H,偏移地址范围0000~FFFFH,表示段的起始位置到所选单元格的距离。由于一个段的长度为64KB,所以该段末地址为1000H*16+FFFFH=1FFFFH   在实模式中,在每个段基地址的最右边增加一个0H,形成一个20位物理地址,作为访问存储器的起点,在此后的64KB地址作为一个逻辑段。 如段基地址1200H,则从12000H处开始寻址64KB, 实模式的段只能从能被16整除的那些位置开始,也就是说从能被16整除的那些内存单元开始分段。 一个物理地址可以有不同逻辑地址来形成。 如:物理地址12560H  其逻辑地址有: 1200H:0560H 1250H:0060H 1000H:2560H 等 这说明12000H偏移560H单元和12500H偏移60H单元等。指向的是同一个内存单元。 2.默认段寄存器和偏移地址寄存器 8086cpu中有一套规则。 代码段寄存器CS总是和指令寄存器IP组合在一起,寻址下一条要执行指令的字节单元; 堆栈寄存器SS和SP(栈操作指针寄存器).BP(源地址)组合,寻址存储器堆栈段中的数据; 数据段寄存器DS和BX(基址寄存器).SI(源变址寄存器).DI(目标变址寄存器)组合,寻址数据段中的8位或16位数据; 附加段寄存器ES和DI组合寻址,目的串地址 通过段超越前缀可以对某些隐含规则进行修改。 3.堆栈的设置和操作 堆栈是在存储器里开辟出来的一个特定的数据区域,称为堆栈段。 用于存放暂时保存的数据。如:调用子程序时的返回地址,中断处理时的断点及现在信息等。 堆栈也采用段地址和偏移地址的组合来寻址。 堆栈的位置和长度由堆栈段寄存器ss和堆栈指针sp来设定。     给定一个ss:sp,就设置了一个堆栈,其最大容量为64KB.  堆栈的设置 SP始终指向当前堆栈的栈顶,当堆栈为空时,SP也指向栈底。栈底指向的单元不能存放堆栈数据 对堆栈的操作按先进后出的原则进行,操作方式有PUSH(压入)和POP(弹出)两种,以字为单位进行,但不能超出范围,如果超出将产生溢出错误。 PUSH操作压入一个字,SP<-SP-2.如AX=1234H,BX=5678H执行PUSH AX 和PUSH BX,并使得sp=12FCH(2.6(b)),再执行POP DX指令,则 DX=5678H SP=12FEH 通过BP指针也可在堆栈中获取数据,或向堆栈存入数据。 注意:堆栈中的数据要保证低字节数据在偶地址单元中,高字节数据在奇地址单元中。 堆栈操作中,堆内数据未变化变化的是sp指针的位置和内容。 4.段加偏移量寻址机制允许重定位 允许程序或数据在存储器内重定位。 重定位指的是一个程序或数据块可以放到存储器的任意有效区域。 可重定位程序是指一个可以存放在存储器的任意区域,不加修改就可以执行的程序。 可重定位的数据指一个可以存放在存储器的任意区域,不加修改就可以被程序引用的数据。

标签:8086,16,组织,存储器,物理地址,地址,偏移,寄存器,堆栈
来源: https://www.cnblogs.com/mlkfX-2021/p/15417508.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有