资源描述:
《微机原理与接口第11章指令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第11章80x86汇编语言程序设计10/5/20211有效地址(effectiveaddressEA)——操作数在段的偏移地址寻址方式——产生有效地址的方法80x86的寻址方式有:1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址5、寄存器相对寻址6、基址变址寻址7、基址变址相对寻址8、比例变址寻址9、基址比例变址寻址10、相对基址比例变址寻址3-10均是与存储器有关的寻址方式,其中,8—10仅适用于80386及其后继机型,11.180x86的寻址方式10/5/202121、立即寻址操作数以常量形式
2、直接放在指令中,紧跟在操作码之后机器码存放形式如下:代码段代码段OP操作码OP操作码D8操作数低位D16操作数高位D16立即寻址示例MOVAH,-40;-40AHMOVAX,34D8H;34HAH,D8HALMOVAX,-40;0FFD8H(-40)AXMOVEAX,12345678H;12345678HEAX我们首先讨论两种与存储器无关的寻址方式:10/5/202132、寄存器寻址操作数存放在某个寄存器中,指令指定寄存器号指令寄存器寄存器号操作数寄存器号操作数寄存器寻址示例MOVAH,BL;(
3、BL)-->AHMOVDS,AX;(AX)-->DSMOVSI,AX;(AX)-->SIMOVECX,EDX;(EDX)ECX说明:立即和寄存器寻址方式不需访问存储器即可得到操作数,速度快10/5/20214有效地址(EA)的4种组成成分:位移量(displacement)存放在指令中的8位、16位或32位的数,是一个地址有效地址的计算:EA=基址+(变址*比例因子)+位移量比例因子(scalefactor)其值可为1,2,4或8,386及其后继机型新增加的变址(index)存放在变址寄存器中的内容,用
4、于访问数组的某个元素基址(base)存放在基址寄存器中的内容,用于指向数组的首地址下面我们来讨论余下的几种与存储器有关的寻址方式,先介绍几个概念:10/5/2021516/32位寻址时有效地址四种成分的组成四种成分16位寻址32位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通用寄存器(包括ESP)变址寄存器SI,DI除ESP以外的32位通用寄存器比例因子无1,2,4,810/5/20216访存类型所用段及寄存器缺省选择规则指令代码段CS用于取指堆栈堆栈段SS所有的堆栈的进栈和出栈任
5、何用ESP或EBP作为基址寄存器的访存目的串附加数据段ES串处理指令的目的串局部数据数据段DS除相对于堆栈以及串处理的目的串以外的所有数据访问默认段选择规则10/5/20217不允许使用段超越前缀的情况:(1)串操作指令的目的串必须用ES段(2)PUSH指令的目的和POP指令的源必须用SS段(3)程序的指令必须存放在CS段访问非默认段数据的方法——段超越数据的存放比较灵活,除了放在默认的DS段,还可以存放在别的段,此时访问他们需要使用段超越前缀,可用的段超越前缀有CS:,DS:,ES:,SS:,FS:,G
6、S:。段超越举例:MOVAX,[10H];DS段10H处的一个字的数据赋给AX寄存器MOVAX,ES:[10H];ES段10H处的一个字的数据赋给AX寄存器10/5/202183、直接寻址操作数地址的偏移量(有效地址)在指令中物理地址=指定段的段基址*16+偏移量系统默认,操作数在数据段段基地址EA操作数+指令存储器MOVAX,2000H;立即寻址MOVAX,[2000H];直接寻址10/5/20219直接寻址示例1MOVAX,[1000H]物理地址设(DS)=10A0H10A00H代码段+1000HOP
7、11A00H00H10H数据段11A00H30H50H50H30HAX(本章中图示存储器地址从上到下递增)低地址10/5/202110直接寻址示例2MOVBL,ES:[0100H]物理地址设(ES)=3000H30000H(DS)=2000H+0100H30100H30100H4B00BL4B在汇编语言指令中,可以用符号地址代替数值地址如:MOVAX,BUFF或MOVAX,[BUFF]其中BUFF为存放数据单元的符号地址。10/5/2021114、寄存器间接寻址操作数在存储器中,操作数地址的偏移量在寄存器
8、中基址或变址寄存器EA操作数+存储器指令寄存器段基地址寄存器间接寻址示例MOVAL,[BX]MOVAX,CS:[SI]MOVECX,[EDX]MOVAH,[BP]10/5/202112MOVAH,[BP]MOVBX,[SI]MOVCX,SI设(SS)=1000H,(DS)=2000H,(BP)=0B10H,(SI)=032AH物理地址物理地址10000H20000H+0B10H+032AH10B10H2032AH40H00H3