ASM16 7 地址与逻辑段
存储器组织与段寄存器
- 寄存器是微处理器内部暂存数据的存储单元,以名称表示
- 存储器则是微处理器外部存放程序及其数据的空间
- 程序及其数据可以长久存放在外存,在程序需要是才进入主存
- 主存需要利用地址区别
数据信息的表达单位
- 计算机中信息的单位
- 二进制位Bit:存储一位二进制数:0或1
- 字节Byte:8个二进制位,D7~D0
- 字Word:16位,2个字节,D15~D0
- 双字DWord:32位,4个字节,D31~D0
- 最低有效位LSB:数据的最低位,D0位
- 最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位
存储单位及其存储内容
- 每个存储单元都有一个编号;被称为存储器地址
- 每个存储单位存放一个字节的内容
多字节数据存放方式
- 多字节数据在存储器中占连续的多个存储单元:
- 存放时,低字节存入低地址,高字节存入高地址;
- 表达时,用它的低地址表示多字节数据占据的地址空间。
- 80x86处理器采用“低对低、高对高”的存储形式,被称为“小端方式Little Endian”
- 相对应还存在“大端方式Big Endian”
存储单元及其存储内容
- 每个存储单元都有一个编号;被称为存储器地址
- 每个存储单元存放一个字节的内容
数据的地址对齐
- 同一个存储器地址(视具体情况来确定)可以是字节单元地址、字单元地址、双字单元地址等等
- 字单元安排在偶地址(xxx0B)、双字单元安排在模4地址(xx00B)等,被称为“地址对齐(Align)”
- 对于不对齐地址的数据,处理器访问时,需要额外的访问存储器时间
- 应该将数据的地址对齐,以取得较高的存取速度
存储器的分段管理
- 这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址
物理地址和逻辑地址
- 对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH。
- 分段后在用户编程时,采用逻辑地址,形式为
逻辑地址
- 段地址说明逻辑段在主存中的起始位置
- 8086规定段地址必须是模16地址:xxxx0H
- 省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址
- 偏移地址说明主存单元距离段起始位置的偏移量
- 每段不超过64KB,偏移地址也可用16位数据表示
物理地址和逻辑地址的转换
- 将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址
- 一个物理地址可以有多个逻辑地址
段寄存器和逻辑段
- 8086有4个16位段寄存器
- CS(代码段)指明代码段的起始地址
- SS(堆栈段)指明堆栈段的起始地址
- DS(数据段)指明数据段的起始地址
- ES(附加段)指明附加段的起始地址
- 每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途
如何分配各个逻辑段
- 程序的指令序列必须安排在代码段
- 程序使用的堆栈一定在堆栈段
- 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段
- 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中
如何分配各个逻辑段
- 程序的指令序列必须安排在代码段
- 程序使用的堆栈一定在堆栈段
- 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段
- 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中
段超越前缀指令
- 没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段
- 默认的情况允许改变,需要使用段超越前缀指令;8086指令系统中有4个:
- CS:代码段超越,使用代码段的数据
- SS:堆栈段超越,使用堆栈段的数据
- DS:数据段超越,使用数据段的数据
- ES:附加段超越,使用附加段的数据
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo!