[工学]汇编语言第二章 寻址方式

上传人:m**** 文档编号:487124990 上传时间:2023-11-09 格式:DOC 页数:37 大小:281KB
返回 下载 相关 举报
[工学]汇编语言第二章 寻址方式_第1页
第1页 / 共37页
[工学]汇编语言第二章 寻址方式_第2页
第2页 / 共37页
[工学]汇编语言第二章 寻址方式_第3页
第3页 / 共37页
[工学]汇编语言第二章 寻址方式_第4页
第4页 / 共37页
[工学]汇编语言第二章 寻址方式_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《[工学]汇编语言第二章 寻址方式》由会员分享,可在线阅读,更多相关《[工学]汇编语言第二章 寻址方式(37页珍藏版)》请在金锄头文库上搜索。

1、第二章 寻址方式在8086微处理器中,一条指令通常由操作码加上操作数构成。指令形式为:操作码 操作数1, 操作数2; 注释其中,操作码指明执行的动作,操作数指明操作的对象。由于寄存器数量有限,操作数不可能都放在寄存器中,实际上,操作数既可以放在寄存器中,也可以放在主存贮器中,这样就涉及到操作数的寻址问题。我们将寻址操作数存放地址的方式称为寻址方式。本章的内容包括:主存储器和物理地址的形成寻址方式常量与变量的定义2.1 主存贮器和物理地址的形成一、 主存贮器计算机存贮系统分为:主存贮器(内存)、辅助存贮器(外存)。l 主存容量小、存取速度快、价格高;l 辅存容量大、存取速度慢、价格低。主存贮器的

2、基本存贮单位是“位”(bit),每8位组合成一个“字节”;每相邻的两个字节称为“字”;相邻的四个字节称为“双字”。为了区别各个存贮单元,给每个单元编号,称为地址。地址:字节单元的编号,也称为物理地址。010FFFFFH低地址高地址从00FFFFFH,共有220个单元,20根地址线。低字节放低位,高字节放高位。例如:0004单元存放内容为1234H。012345表示:(0004)字=1234H34H12H二、 存储器物理地址的形成早期的8086微处理器,有20根地址线,寻址范围220 = 1M字节。但是,8086内部为16位结构,与地址相关的寄存器均为16位,从而导致可寻址范围为64K。因此,设

3、计成为将主存分段使用,每段最大为64K字节。用CS、DS、SS、ES保存当前可用段的段首地址。规定:段首地址只能从任一“小段”的首地址开始,也就是必须最低4位为0,如果所有的段首地址都是这样,则可以忽略最低4位,而只将高16位放到段寄存器中。因此,计算物理地址时,应将段寄存器内容左移4位,恢复段首址原值,然后再与本段中待访问单元的偏移地址相加,得到访问单元的物理地址。因此,被访问单元物理地址 PA = 段首址*16+偏移地址。具体在不同的段中,物理地址为:1 代码段:待取指令PA=(CS)左移4位+(IP)2 数据段、附加数据段:PA=(DS或ES)左移4位+(EA)如:(DS)= 8765H

4、,某变量Y的EA = 153H,则Y的物理地址:PA=(8765)左移4位 + 153H = 877A3H3 堆栈段:栈顶PA=(SS)左移4位+(SP)入栈、出栈指令SP自动变化,不需用户设置。如果需要访问堆栈段,将偏移地址放在BP中,计算堆栈单元物理地址。某堆栈单元PA=(SS)左移4位+(BP)注意:l DS、ES需要用户自行设计,CS由系统赋值l 各段可以完全重叠、部分重叠、不重叠l 各段最大为64KBl 上述物理地址的计算,皆由微处理器自动完成,编程时,着重考虑偏移地址的表示形式,也就是操作数所在位置。三、 保护模式下的内存管理1. 80x86的寻址范围l 80x86地址总线32位,

5、寻址范围4Gl 80x86通用寄存器32位,寻址范围也是4G所以80x86的一个通用寄存器能够存放一个完整的32位地址2. 虚拟内存与分页机制在支持虚拟内存的32位操作系统(WIN32,Linux等)中,目标是要为每个进程提供一个独立的4G大小的虚拟地址空间。在80x86保护模式下,逻辑地址空间(多个进程的地址空间总和)大于物理地址空间,所以用实模式的地址直接映射不能满足此要求,需要通过虚拟内存管理器,采用分页机制来实现:l 将物理地址映射到进程的逻辑地址空间上;l 只有映射了物理内存的逻辑地址空间才能访问;l 每次映射的物理内存不大,且用完后可释放,再重新映射到新的逻辑地址空间上,因此能够让

6、多个进程同时运行;l 分页由系统基于页目录和页表,自动完成进程1的逻辑地址空间进程2的逻辑地址空间物理内存3. 特权级与分段机制(1) 80x86有4个特权级:0,1,2,3(0级最高,3级最低),能够在虚拟内存的基础上实现进一步的内存保护机制如果程序有0级权限,它可以执行所有的指令,访问所有的数据。如果程序只有3级权限,则它只能执行有限的指令,访问有限的数据(它自己的数据)。(2) 80x86通过分段机制来实现特权级的访问控制。用“段选择符:EA”的形式表示逻辑地址,段选择符(16位)存放在段寄存器中,指向一个段描述符(64位)。段描述符索引 T1 特权级段选择符32位段基址 20位段界限

7、特权级段描述符153210用逻辑地址访问内存时,段选择符中的特权级需要高于段描述符中的特权级。(3) 由逻辑地址生成物理地址的过程:EA + 段基址线性地址物理地址分页32位32位32位32位EA要小于“段界限 * 4K”。一般应用程序中,段基址为0,段界限为0FFFFFH。所以对线性地址的形成不产生影响。所以32位保护模式下,在一般的应用程序中,是一个可通过EA访问的,平坦的,独立的4G内存空间。不用特别考虑分段和分页。2.2 寻址方式一、 立即寻址操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。汇编格式:n功能:指令的下一单元的内容为操作数

8、n,即:指令nn也称为立即数。例如:MOV AX,3064H目的操作数采用寄存器寻址,地址为AX。源操作数采用立即寻址。即:64HMOV30H代码段该功能主要用来给寄存器赋值。注意:l 立即数只能作源操作数,不能作目的操作数。如:MOV 100H,AX。l 立即数作为源操作数时,注意溢出。如:MOV AH, -90H;这个语句是错误的。因为:-90H=-142-128。二、 寄存器寻址在这种寻址方式中,指令所指明的寄存器就是操作数的存放地址。汇编格式:R(R为8或16位寄存器)指令操作数1.1.1.1 R功能:寄存器R的内容就是操作数。表示:指令指明操作数在R中。INC指令12H1.1.1.2

9、 AX例:INC AX; 操作数在AX中。执行前:(AX)=12H执行:(AX)+1AX。执行后:(AX)=13H例:ADD AX, BXAX为目的操作数地址,BX为源操作数地址。ADD指令1234H5620HBXAX执行前:(AX)=1234H,(BX)=5620H执行:(AX)+(BX)AX。执行后:(AX)=6854H,(BX)=5620H此例中,目的操作数、源操作数都是用寄存器寻址。注意:l 采用寄存器寻址方式,指令执行速度快。特别是加法指令,如果目的操作数为AX,指令执行快一些。l 采用寄存器寻址方式,目的、源操作数类型必须一致。如:MOV AH,BX就是错误的。三、 直接寻址直接寻

10、址方式中,操作数的偏移地址就在指令操作码后面,而操作数则存放在数据段。汇编格式:地址表达式或段寄存器:EA功能:指令下一字单元的内容是操作数的偏移地址。指令段首址操作数PA左移4位段寄存器EAEA例如:MOV AX, 2000H执行前:(DS)=3000H,(32000H)=1234H源操作数寻址过程: 指令3000H32000HDS2000AEA34H左移4位执行:(32000H) AX执行后:(AX)=1234H注意:8086汇编语言中,可以用含有变量的地址表达式代替数地址。如:MOV AX, VALUE+6其中VALUE定义在数据段:VALUEDB 12H, 13H, 14H, 15H,

11、 16H此时,操作为(VALUE+6)的内容AX,也就是将15H送到AX中。四、 寄存器间接寻址操作数的有效地址(偏移地址)在基址寄存器BX、BP或变址寄存器SI、DI中,而操作数则在存贮器中。汇编格式:R功能:R的内容为操作数的偏移地址EA,即:指令EA段首址操作数PA左移4位R段寄存器R只能是BP、BX、DI、SI之一。注意BP所指的段为堆栈段。例:MOV AX, SIAX是目的操作数地址,采用寄存器寻址方式;SI指明源操作数采用寄存器间接寻址方式。假定执行前:(AX)=5,(DS)=2000H,(SI)=1000H,(21000H)=50A0H。源操作数寻址过程:MOV指令1000H20

12、00H21000H左移4位SIDS存储器50A0H执行:(21000H) AX执行后:(AX)=50A0H,(SI)、(DS)、(21000H)不变。例:MOV AX, BP假定执行前:(AX)=0,(BP)=30H,(SS)=2000H,(20030H)=1234H。源操作数寻址过程:BPSSMOV指令30H2000H20030H左移4位存储器1234H执行:(20030H) AX执行后:(AX)=1234H,(BP)、(SS)、(20030H)不变。五、 变址寻址操作数的偏移地址EA是指令中指明的寄存器的内容与指令中给出的位移量之和。操作数在存贮器中。汇编格式:XR功能:R的内容与X相加,

13、和为操作数的偏移地址EA。也就是:指令变址值段首址操作数PA左移4位R段寄存器XEA关于段寄存器的选择同寄存器间接寻址一样,只能是BP、BX、DI、SI之一。注意BP所指的段为堆栈段。例:MOV AX, COUNTSI也可表示为:MOV AX, COUNT+SI目的操作数采用寄存器寻址方式,操作数地址为AX。源操作数采用变址寻址方式。操作数EA=SI+COUNT。假定执行前:(SI)=2000H,(DS)=3000H,COUNT=3000H,(AX)=0,(35000H)=1234H。源操作数的寻址过程如下:指令2000H3000H35000H左移4位SIDS3000H5000H1234H执行

14、:(35000H) AX执行后:(AX)=1234H,(SI)、(DS)、(35000H)内容不变。例:ADD COUNTBP, BX目的操作数采用变址寻址方式,偏移地址EA=BP+COUNT。源操作数采用寄存器寻址方式。假定执行前:(BX)=40H,(BP)=2000H,(SS)=3000H,COUNT=3000H,(35000H)=50H。目的操作数的寻址过程如下:指令2000H3000H35000H左移4位BPSS3000H5000H50H执行:(35000H)+(BX) 35000H单元执行后:(35000H)=90H,(BX)、(BP)、(SS)内容不变。注意:采用变址寻址可以方便地访问数组中的任一元素,使得编程更加方便。例如:一唯数组a,其存放如图所示。定义:DATASEGMENTCOUNTDB a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号