- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机原理与接口技术pp版本第4章
第4章 微型计算机指令系统 指令是指示计算机完成特定操作的命令,指令系统是计算机能够执行全部命令的集合,它取决于计算机的硬件设计。指令系统因机而异,没有通用性。 4.1 8086/8088的指令格式及寻址方式 4.1.1 指令格式 微型计算机的指令由操作码(OP)和操作数两部分组成,如图4.1所示。操作码部分决定指令的操作类型,指令操作数部分可以是指令所需的操作数,也可以是操作数的地址或关于操作数地址的其他信息。 图4.1指令基本格式 指令在机器中用若干位二进制数表示。8086/8088指令为1~6个字节。第1个字节和第2个字节(部分位)表示操作码,其余为指令操作数。 指令操作数根据不同的指令有所区别,通常一条指令包含一个或两个操作数,前者称为单操作数指令,后者称为双操作数指令。双操作数分别称为源操作数(SRC)和目的操作数(DST)。 4.1.2 8086/8088的寻址方式 计算机可以对存储器、寄存器中的数据进行各种操作,如取数、存数、加运算、减运算等,这就需要找到数据的存放地址,再对其中的数据执行相应的操作,最后将运算结果送往指定的地址单元或寄存器。指令的寻址方式就是寻找指令操作数所在地址的方式,以确定数据的来源和去处。熟练地掌握寻址方式对学习指令系统和汇编语言程序设计具有重要作用。下面介绍8086/8088的几种寻址方式。 1. 立即数寻址方式 此方式中指令操作数部分直接给出指令的操作数,它与指令操作码相接,顺序存放在代码段中。立即数有8位和16位之分。 [例4.1] MOV AH,36H ; (AH)立即数36H MOV BX,1234H ; (BX)立即数1234H 图4.2 16位立即数寻址方式示意图 注意: (1) 立即数寻址方式只能用于源操作数,主要用于给寄存器赋值。 (2) 立即数寻址方式不执行总线周期,执行速度快。 2. 寄存器寻址方式 此方式的操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数。寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的AH、AL、BH、BL、CH、CL、DH、DL寄存器。 [例4.2] MOV AX,CX ; (AX)←(CX) DEC AL ; (AL)←(AL)-1 注意: (1) 寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快。 (2) 寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数。 3. 直接寻址方式 此方式的操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址。有效地址(EA)也称为偏移地址,它代表操作数所在存储单元距离段首址的字节数。有效地址是一个无符号的16位二进制数。 [例4.3] MOV AH, [2100H] ;将DS段中2100H单元的内容送给AH MOV AH, AUGEND ;当AUGEND等于2100H时,与上条指令操作相同 MOV AX, [2100H] ;将DS段中2100H单元的内容送给AL ;2101H单元的内容送给AH 注意: (1) 直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中。 (2) 如果操作数在其他段,则需要在指令中用段超越前缀指出相应的段寄存器名。 (3) AUGEND是一种符号表示法,此内容将在伪指令中给予讲解。 [例4.4] MOV AH, ES∶ [2000H]; 将附加段寄存器ES的内容乘16,再加上2000H作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器AH中。 4. 寄存器间接寻址方式 此方式的操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址。寄存器可以是某个基址寄存器BX、BP,或某个变址寄存器SI、DI。操作数有效地址EA为: (BX) (BP) EA=(SI) (DI) 当使用寄存器BX、SI、DI时,操作数所在存储单元的段地址存在数据段寄存器DS中,当使用寄存器BP时,操作数所在存储单元的段地址存在堆栈段寄存器SS中。物理地址的计算方法为: 物理地址=16×(DS)+(BX)(寄存器SI、DI类同) 当使用寄存器BP时,操作数所在存储单元的段地址在堆栈段寄存器SS中。物理地址的计算方法为: 物理地址=16×(SS)+(BP) [例4.5] 已知: (DS)=2100H,(DI)=2000H 指令: MOV AX,[DI];(AX)←((DI)) 物理地址=16×(DS)+(DI)=16×2100H+2000H=23000H 指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。 注意: 如果操作数所在存储单元不在数据段中,需要在指令中
文档评论(0)