- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]汇编语言第二章 寻址方式
寻址方式
在8086微处理器中,一条指令通常由操作码加上操作数构成。
指令形式为:操作码 [操作数1], [操作数2]; 注释
其中,操作码指明执行的动作,操作数指明操作的对象。
由于寄存器数量有限,操作数不可能都放在寄存器中,实际上,操作数既可以放在寄存器中,也可以放在主存贮器中,这样就涉及到操作数的寻址问题。我们将寻址操作数存放地址的方式称为寻址方式。
本章的内容包括:
主存储器和物理地址的形成
寻址方式
常量与变量的定义
主存贮器和物理地址的形成
主存贮器
计算机存贮系统分为:主存贮器(内存)、辅助存贮器(外存)。
主存容量小、存取速度快、价格高;
辅存容量大、存取速度慢、价格低。
主存贮器的基本存贮单位是“位”(bit),每8位组合成一个“字节”;每相邻的两个字节称为“字”;相邻的四个字节称为“双字”。
为了区别各个存贮单元,给每个单元编号,称为地址。
地址:字节单元的编号,也称为物理地址。
低字节放低位,高字节放高位。例如:0004单元存放内容为1234H。
存储器物理地址的形成
早期的8086微处理器,有20根地址线,寻址范围2^20 = 1M字节。
但是,8086内部为16位结构,与地址相关的寄存器均为16位,从而导致可寻址范围为64K。因此,设计成为将主存分段使用,每段最大为64K字节。用CS、DS、SS、ES保存当前可用段的段首地址。
规定:段首地址只能从任一“小段”的首地址开始,也就是必须最低4位为0,如果所有的段首地址都是这样,则可以忽略最低4位,而只将高16位放到段寄存器中。因此,计算物理地址时,应将段寄存器内容左移4位,恢复段首址原值,然后再与本段中待访问单元的偏移地址相加,得到访问单元的物理地址。
因此,被访问单元物理地址 PA = 段首址*16+偏移地址。具体在不同的段中,物理地址为:
代码段:
待取指令PA=(CS)左移4位+(IP)
数据段、附加数据段:
PA=(DS或ES)左移4位+(EA)
如:(DS)= 8765H,某变量Y的EA = 153H,则Y的物理地址:
PA=(8765)左移4位 + 153H = 877A3H
堆栈段:
栈顶PA=(SS)左移4位+(SP)
入栈、出栈指令SP自动变化,不需用户设置。如果需要访问堆栈段,将偏移地址放在BP中,计算堆栈单元物理地址。
某堆栈单元PA=(SS)左移4位+(BP)
注意:
DS、ES需要用户自行设计,CS由系统赋值
各段可以完全重叠、部分重叠、不重叠
各段最大为64KB
上述物理地址的计算,皆由微处理器自动完成,编程时,着重考虑偏移地址的表示形式,也就是操作数所在位置。
保护模式下的内存管理
1. 80x86的寻址范围
80x86地址总线32位,寻址范围4G
80x86通用寄存器32位,寻址范围也是4G
所以80x86的一个通用寄存器能够存放一个完整的32位地址
2. 虚拟内存与分页机制
在支持虚拟内存的32位操作系统(WIN32,Linux等)中,目标是要为每个进程提供一个独立的4G大小的虚拟地址空间。
在80x86保护模式下,逻辑地址空间(多个进程的地址空间总和)大于物理地址空间,所以用实模式的地址直接映射不能满足此要求,需要通过虚拟内存管理器,采用分页机制来实现:
将物理地址映射到进程的逻辑地址空间上;
只有映射了物理内存的逻辑地址空间才能访问;
每次映射的物理内存不大,且用完后可释放,再重新映射到新的逻辑地址空间上,因此能够让多个进程同时运行;
分页由系统基于页目录和页表,自动完成
3. 特权级与分段机制
(1) 80x86有4个特权级:0,1,2,3(0级最高,3级最低),能够在虚拟内存的基础上实现进一步的内存保护机制
如果程序有0级权限,它可以执行所有的指令,访问所有的数据。
如果程序只有3级权限,则它只能执行有限的指令,访问有限的数据(它自己的数据)。
(2) 80x86通过分段机制来实现特权级的访问控制。
用“段选择符:EA”的形式表示逻辑地址,段选择符(16位)存放在段寄存器中,指向一个段描述符(64位)。
用逻辑地址访问内存时,段选择符中的特权级需要高于段描述符中的特权级。
(3) 由逻辑地址生成物理地址的过程:
EA要小于“段界限 * 4K”。一般应用程序中,段基址为0,段界限为0FFFFFH。所以对线性地址的形成不产生影响。
所以32位保护模式下,在一般的应用程序中,是一个可通过EA访问的,平坦的,独立的4G内存空间。不用特别考虑分段和分页。
寻址方式
立即寻址
操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。
汇编格式:n
功能:指令的下一单元的内容为操作数n,即:
n也称为立即数。
例如:MOV AX,3064H
目的操作数采用寄存器寻址,地址为AX。
源
文档评论(0)