《实模式下的存储器组织与寻址方式课件》由会员分享,可在线阅读,更多相关《实模式下的存储器组织与寻址方式课件(51页珍藏版)》请在金锄头文库上搜索。
1、第第2 2章章 实模式下的存储器组织与寻址方式实模式下的存储器组织与寻址方式汇编语言程序设计汇编语言程序设计 赵艳红赵艳红 第2章 实模式下的存储器组织与寻址方式 前面提到,数据可存储在寄存器、内存单元,前面提到,数据可存储在寄存器、内存单元,I/OI/O端口。现在需考虑的问题是:端口。现在需考虑的问题是:在编程时在编程时如何访问这些数据?如何访问这些数据?(1 1)若在寄存器中,可直接用寄存器名来访)若在寄存器中,可直接用寄存器名来访问寄存器中的数据。问寄存器中的数据。(2 2)若在内存单元或)若在内存单元或I/OI/O端口,则需按地址端口,则需按地址访问。访问。2.1实模式下的存储器组织实
2、模式下的存储器组织 2.1.1 存储单元的地址和内容存储单元的地址和内容 2.1.2 存储器的分段组织存储器的分段组织2.2寻址方式寻址方式 2.2.1 数据寻址方式数据寻址方式 2.2.2 程序存储器寻址方式程序存储器寻址方式2.1.1存储单元的地址和内容存储单元地址 :8086系统中,为了标识和存取每一个存储单元,给每个存储单元规定一个编号,这就是存储单元地址。 存储单元的内容 :一个存储单元中存放的信息称为该存储单元的内容。8086系统中一个存储单元可存放一个字节数据。 从图可看到,地址为34560H的存储单元中的内容是34H;而地址为34561H的字节存储单元中的内容是12H。寄存器使
3、用说明: AX,BX,CX,DX这四个16位寄存器皆可作为两个8位寄存器使用。 AX:AH,AL; BX:BH,BL CX:CH,CL; DX:DH,DL存储器中大部分数据都以字为单位表示,占用两个字节单元,低位字节存入低地址,高位字节存入高地址。例如:(34561H)=12H (AL)=12H (AX)=5612H2.1.2存储器的地址分段 8086CPU的地址线是20位的,存储器的物理地址是20位,而8086CPU中的寄存器都是16位的。那么如何用16位寄存器来表达20位物理地址信息?00000000000000000000000000000000000000011111111111111
4、1111111地址位数地址位数太长,已太长,已达达2020位!位!思考题:为什么8086CPU的地址线设计为20位(或内存单元的物理地址为什么设计成20位?)? 如果设计成16位(和寄存器的宽度一样),内存访问的地址表达就简单了。请问设计者这样设计的优点是?可以扩大CPU的访存空间。 220=1024KB, 216=64KB问题解决方法: 将存储器分成若干段,对某一单元的地址用段首地址和相对于段首地址的偏移量综合表示。 这种方法类似于电影院里对座位的编号。这种分段表示可有效缩减地址的长度。0000000000000000000000001111111111110000偏移量偏移量 01偏移量偏
5、移量10这样上图中第一个标注单元的地址为: 段地址为:00000000000000000000 偏移量(或偏移地址)为: 01它的物理地址为: 段地址+偏移量 即:000000000000000000001这样上图中第二个标注单元的地址为: 段地址为:00001111111111110000 偏移量(或偏移地址)为: 10它的物理地址为: 段地址+偏移量 即:00001111111111110010按这样的方法有以下两个问题困惑着我们,值得进一步思考?(1)偏移量如果过大,16位寄存器表示不了怎么办?(2)段首地址(或段地址)为20位,如何用16位寄存器来表示?对于问题对于问题1 1,如果将一
6、段的长度限制在,如果将一段的长度限制在64K K以内,则偏移量的位数不超过以内,则偏移量的位数不超过16位,这样位,这样就可以用就可以用16位寄存器表达。位寄存器表达。1616位寄存器能表示的最大偏移量为:位寄存器能表示的最大偏移量为: 1111111111111111(16个1), 即为216-1=64K-1,再加上段首的一个单元,共64K. 对于问题2 分段时,如果只将单元地址的最后四位为0的地址作为段首地址,用16位寄存器存放它的前16位,在进行地址运算时再将16位段地址末尾补4个0。 这样,20位物理地址的计算方法表示如下:1616位段地址位段地址1616位偏移地址位偏移地址2020位
7、物理地址位物理地址+0 0 0 0 小结:(1)在1M字节的存储器里,每一个单元都有一个唯一的20位地址,称为该单元的物理地址。CPU访问存储器时,必须先确定要访问的存储单元的物理地址才能取得(或存入)该单元的内容。 (2)根据要求可把1M字节地址空间划成若干逻辑段。 每个逻辑段必须满足两个条件: 一是逻辑段的起始地址(简称段首址)必须是16的倍数(即末尾4位是0); 二是逻辑段的最大长度为64K。(3)20位物理地址由16位段地址和16位偏移地址组成。段地址是每一段的起始地址,其低4位一定是0,这样就可以规定段地址只取段起始地址的高16位来表示。偏移地址是指在段内相对于段起始地址的偏移值。这
8、样,20位物理地址的计算方法表示如下:1616位段地址位段地址1616位偏移地址位偏移地址2020位物理地址位物理地址+0 0 0 0(4)一个汇编语言源程序,一般由两部分组成: 代码段+ 数据段,有时还包括堆栈段、附加段。 除非专门指定,在一般情况下,各段在存储器中的分配(或段地址)由操作系统负责,用户程序中只涉及偏移量。 例:MOV AX, 2000H 表示把DS*10H+2000H地址所指向的单元的数传送给AX寄存器。 (5)每段的最大长度为64K,但各段的实际大小操作系统会根据实际需要来分配。不一定要占有64K最大空间。(6)CPU在物理地址的形成过程中,会按有一定规则去选择段寄存器,
9、除非在程序中特别说明。 段偏移用途CSIP指令寻址DSBX/DI/SI或16位数数据寻址SSSP/BP堆栈寻址ESDI(串操作)目标串寻址(7)该存储管理方式允许程序在存储器内重定位(一个程序不加修改在另外一个存储区仍可以运行). 因为程序内只涉及偏移地址,不同存储区只需修改段寄存器即可。这方便了操作系统对存储器的管理。2.22.2寻址方式寻址方式2.2.1 数据寻址方式(操作数寻址)2.2.2 程序寻址方式(指令寻址)2.2.12.2.1数据寻址方式数据寻址方式 计算机中指令由操作码和地址码两部分组成,指令的格式一般是:操作码操作码 地址码地址码1 地址码地址码2 指示计算机所要指示计算机所
10、要执行的操作执行的操作例: MOV AX, 2000 指令的操作对象是数据,在指令中需给出操作数在内存中的地址或操作数本身址。 数据寻址方式:是指寻找指令中操作数的方式。 常用数据寻址方式 (1)立即数寻址 (2)寄存器寻址 (3)寄存器间接寻址 (4)直接寻址 (5)基址变址寻址(1)立即数寻址n直接在指令中给出操作数,即操作数紧跟在操作码之后。 立即数寻址常用于给寄存器赋初值。例:MOV AX, 10 执行后(AX)=000AH (2 ) 寄存器寻址寄存器寻址方式的操作数在指令指明的寄存器中。汇编格式:R 其中R表示寄存器名。功能:操作数直接存放在寄存器R中。【例】【例】 下列程序执行后,
11、(AX)=?,(BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BX第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。图形表示:执行:1234HAX 5678HBX (AX)+(BX)AX执行后:(AX)=68ACH,(BX)=5678H(3)寄存器间接寻址寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址,操作数在存储器中。汇编格式:R功能:操作数存放在存储器,寄存器R存放操作数的偏移地址。说明:对于数据段数据的寻址,若采用寄存器间接寻址方式,只能使用BX、
12、SI、DI来存放地址的偏移量,在指令运行时,计算机将用DS*16的值加上这个偏移量形成20位物理地址。DS*16+BX/SI/DI 物理地址例:寄存器和存储器内容分别为:例:寄存器和存储器内容分别为:SISIDSDS执行指令:MOV AL ,SI 执行后:(AL)=? 0030H2000H20030H12H(4)直接寻址方式 直接寻址方式中,操作数在存储器中,指令直接给出操作数的偏移地址。在指令运行时,计算机将用DS*16的值加上这个偏移量形成20位物理地址。例:MOV AL,0020 若该程序段DS的值为3000H,则该指令的功能是将地址为30020H的内存单元的内容传送至AL寄存器。(5)
13、基址变址寻址用一基址寄存器(通常为BX)和一个变址寄存器(SI或DI)的内容之和作为操作数在内存中的偏移地址,段地址为DS。 如BX=1000H,DI=0010H,DS=0100H,指令: MOV DX,BX+DI源操作数的物理地址为: DS16(左移4位)+ BX+DI 即为:01000H +1010H 10010H 2.2.2 程序寻址方式(指令寻址) 程序的执行需从存储器(代码段)中取出指令,这便是指令的寻址。 CS为代码段段地址,IP指令指针寄存器存放的是指令地址的偏移量。 (1)在程序刚开始执行时,IP为0000H,寻到程序的第一条指令,送入CPU指令寄存器,分析并执行;(2)若程序
14、顺序执行,则IP会自动加“1”,实现对第2条指令的寻址;(3)若程序要进行转移(分支或调用子程序等),则需改变IP的值(若是段间转移或调用,则同时需改变CS的值)。程序按序执行,或分支、或循环、或执行子程序的过程,其本质是改变CS和IP值的过程。这个过程是机器根据程序中的相关指令自动完成的。 代码段代码段 CS+IP实现指实现指令的寻址令的寻址本章学习目标本章学习目标1、理解实模式下的存储器的分段组织。2、掌握内存单元物理地址的计算。3、掌握常用的数据寻址方式,并会根据指令 中的寻址方式计算数据的物理地址。4、理解指令寻址,从指令寻址的角度,理解程序执行的本质过程。练习题练习题1 1、8086
15、8086系统中,为了标识和存取每一个存储单元,给系统中,为了标识和存取每一个存储单元,给每个存储单元规定一个每个存储单元规定一个 。一个存储单元可存放一。一个存储单元可存放一个个 数据。数据。 答案:答案:存储单元地址存储单元地址;字节字节练习题练习题2 2、从图可看到、从图可看到, ,地址为地址为3 30021H0021H的字节存储单元中的内容的字节存储单元中的内容是是 ; ; (AHAH)= = (30021H30021H)= = ;(;(AXAX)= = (30021H30021H)= = 。 答案:答案:11H11H; 11H11H;3211H3211H30H11H32H89H40H3
16、0020H30021H30022H30023H30020H练习题练习题3 3、80868086构成的微机中,将存储器分成若干段,对某一构成的微机中,将存储器分成若干段,对某一单元的地址用单元的地址用 和相对于段首地址的和相对于段首地址的 综合表综合表示。其中的段首地址是由示。其中的段首地址是由 存储。存储。 答案:答案:段首地址段首地址;偏移量(或偏移地址);段寄存器偏移量(或偏移地址);段寄存器 4 4、 8086 8086CPUCPU的地址线是的地址线是2020位的,存储器的物理地址是位的,存储器的物理地址是 位,而位,而80868086CPUCPU中的寄存器都是中的寄存器都是 位的。位的
17、。CPUCPU要访问要访问的某一存储单元的实际地址为的某一存储单元的实际地址为 。 答案:答案: 20 20 ; 16 16;物理地址;物理地址练习题练习题5 5、数据段寄存器、数据段寄存器DSDS为为1616位,物理地址为位,物理地址为2020位,将位,将1616位位地址转化为地址转化为2020位物理地址方法如下:若位物理地址方法如下:若DSDS存储的存储的1616位位地址用二进制数来表示,则将该地址地址用二进制数来表示,则将该地址 ,后面补,后面补4 4个个0 0,然后加,然后加 ;若;若DSDS存储的存储的1616位地址用十六进制数来位地址用十六进制数来表示,则物理地址表示,则物理地址=
18、 = ;若;若DSDS存储的存储的1616位地址用十位地址用十进制数来表示,则物理地址进制数来表示,则物理地址= = 。 答案:左移答案:左移4 4位;偏移地址;位;偏移地址; DS*10H+DS*10H+偏移地址;偏移地址; DS*16+ DS*16+偏移地址偏移地址练习题练习题6 6、设段首地址位、设段首地址位3200H3200H,偏移地址位,偏移地址位0080H0080H,则物理地,则物理地址为址为 。 答案:答案: 32080H32080H7 7、CSCS寄存器在段内寻址时可以提供偏移地址的寄存器寄存器在段内寻址时可以提供偏移地址的寄存器是是 ;DSDS寄存器在段内寻址时可以提供偏移地
19、址的寄存器在段内寻址时可以提供偏移地址的寄存器是寄存器是 ;SSSS寄存器在段内寻址时可以提供偏寄存器在段内寻址时可以提供偏移地址的寄存器是移地址的寄存器是 ;ESES寄存器在段内寻址时可以寄存器在段内寻址时可以提供偏移地址的寄存器是提供偏移地址的寄存器是 。 答案:答案: IPIP ; BX/DI/SIBX/DI/SI或或1616位数;位数; SP/BPSP/BP ; DIDI 练习题练习题8 8、计算机中的指令由计算机中的指令由 和和 两部分组成。两部分组成。 答案:操作码;地址码答案:操作码;地址码9 9、说明下列数据寻址方式属于哪类:、说明下列数据寻址方式属于哪类: MOV AX MO
20、V AX,SI SI 寄存器间接寻址寄存器间接寻址 MOV AX MOV AX,200H 200H 直接寻址直接寻址 MOV AX MOV AX,BX+DI BX+DI 基址变址寻址基址变址寻址 MOV AX MOV AX,BX BX 寄存器寻址寄存器寻址 MOV AX MOV AX,1200H 1200H 立即寻址立即寻址 MOV AX MOV AX,DI DI 寄存器间接寻址寄存器间接寻址 MOV AX MOV AX,BX+SI+DI BX+SI+DI 基址变址寻址基址变址寻址 练习题练习题1010、现有(、现有(DSDS)=2000H=2000H,(,(BXBX)=1000H=1000H
21、,(SISI)=0201H=0201H,(,(20200H20200H)=12H=12H,(,(20201H20201H)=34H=34H,(,(20202H20202H)=56H=56H,(,(20203H20203H)=78H=78H,(21200H21200H)=2AH=2AH,(,(21201H21201H)=4CH=4CH,(21202H21202H)=0BH=0BH,下列指令执行后填入,下列指令执行后填入AXAX寄存器的寄存器的内容:内容: (1 1)MOV AXMOV AX,1200H1200H; (AXAX)= = 1200H 1200H (2 2)MOV AXMOV AX,BXBX; (AXAX)= = 1000H 1000H (3 3)MOV AXMOV AX,1200H1200H; (AXAX)= = 4C2AH 4C2AH (4 4)MOV AXMOV AX,SISI; (AXAX)= = 5634H 5634H (5 5)MOV AXMOV AX,BX+0200BX+0200;(;(AXAX)= = 4C2AH 4C2AH (6 6)MOV AXMOV AX,BX+SIBX+SI; (AXAX)= = 0B4CH 0B4CH