- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机原理与接口技术 朱华贵 2016年03月14日 第3章 8086寻址方式与指令系统 朱华贵 2016年03月14日 3.1 寻址方式 朱华贵 2016年03月14日 操作数来源 指明操作数所在的地方。 操作数有三种来源: 1、操作数在指令中,称立即数操作数; 如:MOV AL,9 2、操作数在寄存器中,称寄存器操作数; 如:MOV AL,9 3、操作数在内存单元中,称存储器操作数或内存操作数。用[ ]表示存储器操作数。 如:MOV AL,[2000H] 指令操作数类型 指令应指明参与操作的数字节还是字,即操作数的类型。 1、指令中有寄存器操作数,由寄存器操作数决定操作数类型; 例: MOV [BX],AL;字节操作 [BX] ← AL MOV [BX],AX;字操作 [BX] ← AL,[BX+1] ← AH 在DEBUG下查看指令代码 D:\DEBUG -A 13A0:0100 MOV [BX],AL 13A0:0102 MOV [BX],AL 13A0:0104 -U 100 13A0:0100 8807 MOV [BX],AL 13A0:0102 8907 MOV [BX],AX …… 两条指令的机器码是不同的:0788H,0789H 2、指令操作数中无寄存器,则有内存操作数的类型决定;若无则需对存储器操作数加类型说明。 例:MOV WORD PTR [BX],0 MOV BYTE PTR [BX],0 5种与内存单元有关的寻址 1、操作数存放在内存中,取完指令后还需到内存取数; 2、指令中给出的该操作数的地址,包括段地址和偏移地址;指令中用[ ] 给出偏移地址。 3、按给出偏移地址方式的不同,分为以下5种: 直接寻址: MOV AL,[1000H] 寄存器间接寻址: MOV AL,[BX] 寄存器相对寻址: MOV AL,[BX+10H] 基址加变址寄存器寻址:MOV AL,[BX+SI] 相对基址加变址寄存器:MOV AL,[BX+SI+10H] 除直接寻址外,内存操作数地址只能由BX/BP、SI/DI给出。 利用DEBUG学习寻址方式 在DEBUG下汇编下列指令,并查看每条指令执行后的结果: MOV BX,2000H MOV [BX],CS 思考:如何查看指令MOV [BX],CS执行后的结果? 用R命令是否可以? 操作数[BX]在哪里? 它的内存地址如何构成? 例如: MOV AX,8[BX] 该指令的源操作数采用寄存器相对寻址方式。 若(DS)=2000H,(BX)=2008H,那么指令执行后,(AX)=1225H。 寄存器相对寻址方式的指令执行示意图 寄存器相对寻址说明 偏移量是符号数,8位偏移量的取值范围为:00~0FFH(即+127D~-128D); 16位偏移量的取值范围为:0000~0FFFFH(即+32767D~-32768D)。 8086汇编允许用下面三种形式表示相对寻址,它们是等效的。 MOV AX,[BX]+8 MOV AX,8[BX] MOV AX,[BX+8] 3.2.6 基址加变址寄存器寻址 操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值之和。 指令中使用基址寄存器BX时,操作数默认存放在数据段中; 使用基址寄存器BP时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址 =(DS)×10H+ (BX) + (SI)/(DI) 或 =(SS)×10H+ (BP) + (SI)/(DI) 例如: MOV AX,[BX] [SI] 该指令的源操作数采用基址变址寻址方式。 若(DS)=2000H,(BX)=2008H,(SI)=8H; 则指令执行后,(AX)=1225H。 基址变址寻址方式的指令执行示意图 3.2.7 相对基址加变址寄存器寻址 操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值以及8位或16位位移量之和。 指令中使用基址寄存器BX时,操作数默认存放在数据段中; 使用基址寄存器BP时,操作数默认存放在堆栈段中; 允许段超越。 操作数的物理地址PA =(DS)×10H+ (BX)+ (SI)/(DI)+8位或16位位移量 或 =(SS)×10H+ (BP)+ (SI)/(DI)+8位或16位位移量 例如: MOV AX,3[BX] [SI] 该指令的源操作数采用寄存器相对寻址方式。 若(DS)=2000H,(BX)=2008H,(SI)=5H,那么指令执行后,(AX)=1225H。 相对基址加变址寄存器寻址方式的指令执
文档评论(0)