欢迎来到天天文库
浏览记录
ID:40393003
大小:1.03 MB
页数:50页
时间:2019-08-01
《实模式下的存储器组织与寻址方式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第2章实模式下的存储器组织与寻址方式汇编语言程序设计赵艳红第2章实模式下的存储器组织与寻址方式前面提到,数据可存储在寄存器、内存单元,I/O端口。现在需考虑的问题是:在编程时如何访问这些数据?(1)若在寄存器中,可直接用寄存器名来访问寄存器中的数据。(2)若在内存单元或I/O端口,则需按地址访问。2.1实模式下的存储器组织2.1.1存储单元的地址和内容2.1.2存储器的分段组织2.2寻址方式2.2.1数据寻址方式2.2.2程序存储器寻址方式2.1.1存储单元的地址和内容存储单元地址:8086系统中,为了标识和存取每一个存储单元,给每个存储单元规定一个编号,这就是
2、存储单元地址。存储单元的内容:一个存储单元中存放的信息称为该存储单元的内容。8086系统中一个存储单元可存放一个字节数据。从图可看到,地址为34560H的存储单元中的内容是34H;而地址为34561H的字节存储单元中的内容是12H。寄存器使用说明:AX,BX,CX,DX这四个16位寄存器皆可作为两个8位寄存器使用。AX:AH,AL;BX:BH,BLCX:CH,CL;DX:DH,DL存储器中大部分数据都以字为单位表示,占用两个字节单元,低位字节存入低地址,高位字节存入高地址。例如:(34561H)=12H(AL)=12H(AX)=5612H2.1.2存储器的地址分
3、段8086CPU的地址线是20位的,存储器的物理地址是20位,而8086CPU中的寄存器都是16位的。那么如何用16位寄存器来表达20位物理地址信息?000000000000000000000000000000000000000111111111111111111111地址位数太长,已达20位!思考题:为什么8086CPU的地址线设计为20位(或内存单元的物理地址为什么设计成20位?)?如果设计成16位(和寄存器的宽度一样),内存访问的地址表达就简单了。请问设计者这样设计的优点是?可以扩大CPU的访存空间。220=1024KB,216=64KB问题解决方法:将存
4、储器分成若干段,对某一单元的地址用段首地址和相对于段首地址的偏移量综合表示。这种方法类似于电影院里对座位的编号。这种分段表示可有效缩减地址的长度。0000000000000000000000001111111111110000偏移量01偏移量10这样上图中第一个标注单元的地址为:段地址为:00000000000000000000偏移量(或偏移地址)为:01它的物理地址为:段地址+偏移量即:000000000000000000001这样上图中第二个标注单元的地址为:段地址为:00001111111111110000偏移量(或偏移地址)为:10它的物理地址为:段地址
5、+偏移量即:00001111111111110010按这样的方法有以下两个问题困惑着我们,值得进一步思考?(1)偏移量如果过大,16位寄存器表示不了怎么办?(2)段首地址(或段地址)为20位,如何用16位寄存器来表示?对于问题1,如果将一段的长度限制在64K以内,则偏移量的位数不超过16位,这样就可以用16位寄存器表达。16位寄存器能表示的最大偏移量为:1111111111111111(16个1),即为216-1=64K-1,再加上段首的一个单元,共64K.对于问题2分段时,如果只将单元地址的最后四位为0的地址作为段首地址,用16位寄存器存放它的前16位,在进行
6、地址运算时再将16位段地址末尾补4个0。这样,20位物理地址的计算方法表示如下:16位段地址16位偏移地址20位物理地址+0000小结:(1)在1M字节的存储器里,每一个单元都有一个唯一的20位地址,称为该单元的物理地址。CPU访问存储器时,必须先确定要访问的存储单元的物理地址才能取得(或存入)该单元的内容。(2)根据要求可把1M字节地址空间划成若干逻辑段。每个逻辑段必须满足两个条件:一是逻辑段的起始地址(简称段首址)必须是16的倍数(即末尾4位是0);二是逻辑段的最大长度为64K。(3)20位物理地址由16位段地址和16位偏移地址组成。段地址是每一段的起始地址
7、,其低4位一定是0,这样就可以规定段地址只取段起始地址的高16位来表示。偏移地址是指在段内相对于段起始地址的偏移值。这样,20位物理地址的计算方法表示如下:16位段地址16位偏移地址20位物理地址+0000(4)一个汇编语言源程序,一般由两部分组成:代码段+数据段,有时还包括堆栈段、附加段。除非专门指定,在一般情况下,各段在存储器中的分配(或段地址)由操作系统负责,用户程序中只涉及偏移量。例:MOVAX,[2000H]表示把DS*10H+2000H地址所指向的单元的数传送给AX寄存器。(5)每段的最大长度为64K,但各段的实际大小操作系统会根据实际需要来分配。不
8、一定要占有64K最大空间
此文档下载收益归作者所有