[工学]汇编语言第二章 寻址方式.doc
《[工学]汇编语言第二章 寻址方式.doc》由会员分享,可在线阅读,更多相关《[工学]汇编语言第二章 寻址方式.doc(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)内容不变。注意:采用变址寻址可以方便地
15、访问数组中的任一元素,使得编程更加方便。例如:一唯数组a,其存放如图所示。定义:DATASEGMENTCOUNTDB a0, a1, anDATAENDSMOV BX, OFFSET COUNT; 若要将a8放到AH,可用:MOV AH, 8BX; 若要将第 i 个元素放到AH,可用:MOV AH, i BX(BX)=COUNTa0a1a8an六、 基址加变址寻址操作数的偏移地址EA是指令中指定的基址寄存器内容、变址寄存器内容及位移量X三者之和。操作数存放在主存之中。汇编格式:XBR + IR功能:BR的内容加上IR的内容,再加上X,得到操作数的偏移地址。也就是:EA =(BR)+(IR)+X
16、。指令基址值操作数PA左移4位BR段寄存器XEA变址值IR段首址其中:BR表示基址寄存器,只能是BX、BP之一。IR表示变址寄存器,只能是SI、DI之一。也就是:EA = BX + SI或DI + X;数据在当前DS中EA = BP + SI或DI + X;数据在当前SS中同前面一样,基址寄存器决定操作数所在的段。如果选用BX,则操作数在数据段内;如果选用BP,则操作数在堆栈段内。例1:MOV AX, MASKBXSI,也可以写成:MOV AX, MASKBX+SI或MOV AX, MASK+BX+SI目的操作数采用寄存器寻址,地址在AX。源操作数采用基址加变址寻址,EA = BX+SI+MA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 工学汇编语言第二章 寻址方式 汇编语言 第二 寻址 方式

链接地址:https://www.31ppt.com/p-4533181.html