您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第3章 32位微处理器指令系统.
第3章32位微处理器指令系统3.132位指令运行环境3.2寻址方式3.332位微处理器指令系统概述3.4数据传送指令3.5算术运算指令3.6逻辑运算指令3.7移位指令3.8字符串操作指令3.9控制转移指令3.10符号扩展指令3.11处理机控制指令3.132位指令运行环境1.16位段32位X86CPU还可以使用32位寄存器和32位寻址方式,处理32位数据及执行32位的新增指令,但是,段基地址和偏移量都只用16位,6个段寄存器仍然当作16位的段寄存器使用,对于偏移地址来说,如果是32位,则高16位应该为0,只有低16位偏移地址有效,相当于可以进行32位数处理的快速8086,所以称之为“16位段”。2.32位段32位X86CPU由实地址模式可以进入保护工作模式,它是一个增强了80286保护模式功能的32位保护工作模式。在保护工作模式下,32位微处理器不仅具有段式存储器管理功能,而且还有页式存储器管理功能,支持虚拟存储器,段基地址和段内偏移量都是32位,称之为“32位段”。3.2寻址方式3.2.1寻址方式概述一条指令包含操作码和操作数两部分,操作码(指令助记符)指出该指令要进行的操作,操作数指出该指令需要的操作数或操作数的地址。操作数在计算机中的位置及存取方式见表3-1。数据存放的位置存取方式寄存器CPU可直接存取外设(接口)用IN、OUT指令输入/输出内存在内存的数据段、附加数据段或堆栈段,可利用存储器寻址的各种寻址方式存取在内存的代码段(立即寻址)表3-1操作数在计算机中的位置及存取方式指令根据一定的方式,先找到存储操作数的空间地址,然后取出操作数进行处理。寻找操作数的方式称为寻址方式。寻址方式:操作数地址由段基址和段内偏移地址共同产生。段基址由段基址寄存器提供,有CS、SS、DS、ES、FS和GS。段内偏移地址也称为有效地址EA(effectiveaddress),32位有效地址的公式是:EA=基址+(变址*比例因子)+位移量32位寻址方式:段寄存器、基址寄存器、变址寄存器、比例因子和位移量的关系见表3-2段寄存器基址寄存器变址寄存器比例因子位移量DSEAXEBXECXEDXESIEDIEAXEBXECXEDXESIEDIEBP12488位32位(带符号数)SSESPEBP表3-232位寻址方式时段寄存器、基址寄存器、变址寄存器、比例因子和位移量的关系说明:1.在表3-2中,如果以EBP和ESP为基址寄存器,默认访问的是堆栈段,段寄存器是SS。若以其他6个寄存器为基址寄存器,默认访问的是数据段,段寄存器是DS。2.如果数据存放在内存的附加数据段时,需使用段超越前缀“ES:”、“FS:”或“GS:”,才能访问到相应附加数据段中的数据。3.在串操作时,源串默认的段寄存器是DS,目的串默认的段寄存器是ES。4.数据存放在内存的堆栈段时,默认的段寄存器为SS。5.比例因子只能是1、2、4、8。6.位移量是8位或32位的带符号数,所谓带符号数是指补码表示的二进制数。7.立即寻址时,段寄存器为CS,以IP(16位)或EIP(32位)为段内偏移地址,找到指令的同时也就找到了数据。8.16位寻址方式时段寄存器、基址寄存器、变址寄存器和位移量的关系见表3-3。段寄存器基址寄存器变址寄存器位移量DSBXSIDI8位16位(带符号数)SSBPSIDICSIP表3-316位寻址方式时段寄存器、基址寄存器、变址寄存器和位移量的关系在介绍各种寻址方式之前,先说明指令格式中出现的助记符号:OPS:源操作数,代表8、16和32位OPSn:n(=8或16或32)位源操作数OPD:目的操作数,代表8、16和32位OPDn:n(=8或16或32)位目的操作数seg:段寄存器reg:寄存器,代表8、16和32位regn:n(=8或16或32)位寄存器mem:存储器操作数,代表8、16和32位memn:n(=8或16或32或48)位存储器操作数。48位存储器操作数,仅在地址传送指令中使用。imm:立即数,代表8、16和32位immn:n(=8或16或32)位立即数(reg):表示寄存器中寄存的数。3.2.2立即寻址:操作数位置:内存代码段。立即寻址方式所提供的操作数紧跟在操作码的后面,与操作码一起放在指令代码段中。立即数可以是8位无符号整数或16位无符号整数,但不可以是小数。如果是16位数,则低位字节存放在低地址中,高位字节存放在高地址中。立即寻址方式只能用于源操作数字段,不能用于目的操作数字段,经常用于给寄存器赋初值。例【3-1】指令MOVAX,#0002H,是将立即数0002H送到AX中。MOVEAX,#11223344H指令是将立即数11223344H传送给EAX。3.2.3寄存器寻址说明:寄存器中寄存的内容就是操作数。操作数位置:CPU中的某个寄存器。例【3-3】ADDEAX,EBX这是一条双操作数指令,其中ADD为加法指令操作符,它的两个加数分别由EAX和EBX提供。假定执行前(EAX)=12345678H,(EBX)=00000034H,则执行后(EAX)=123456ACH,EBX寄存器值不变。例【3-2】INCAX其中,INC为+1指令操作符,其操作数地址为寄存器AX在机器指令中的编码,不同的寄存器使用不同的编码加以编排。本条指令的操作数就在AX中。假定执行前(AX)=1234H,则执行后(AX)=1235H。3.2.4存储器寻址方式:操作数位置:通常在内存的数据段DS和堆栈段SS中。程序运行所使用的数据大都保存在主存储器中,用指令存取存储器操作数的方式较多,即存储器寻址的方式较多。1.直接寻址:在直接寻址方式中,操作数的16或32位偏移地址EA紧跟在指令操作码后面,即操作数的偏移地址EA与操作码一起存放在代码段中,而操作数可以存放在数据段,也可以存放在其他段。例【3-5】假定在数据段DS有双字变量定义为:VARDD12345678H其中VAR是变量名,在经过汇编与连接生成可执行的程序在执行时,它有实际物理地址,由段寄存器DS与偏移地址EA组成。在执行指令MOVEAX,VAR时,其功能是根据变量名VAR的DS和EA,从数据段内偏移地址为EA的内存单元,连续读取4个字节数送给EAX,即(EAX)=12345678H。直接寻址:2.基址寻址以8个基址寄存器中任一个寄存器中的值作为操作数的偏移地址,其中,以EAX、EBX、ECX、EDX、ESI、EDI作为基址寄存器时,默认访问段是数据段DS,以EBP和ESP作为基址寄存器时,默认访问的段是堆栈段SS。例【3-6】MOVAX,[EBX];访问DS段MOVAX,[EBP];访问SS段3.基址加位移寻址以8个32位通用寄存器中任意一个寄存器作为基地址寄存器,再加上8位或32位的位移量,(位移量可以是正,也可以是负),修改基地址寄存器的值使之成为新的所要寻找操作数的偏移地址。默认的段与基址寻址相同。例【3-7】MOVAX,[EBX-08H];访问DS段MOVAX,[EBP+34H];访问SS段4.比例变址寻址:选取除ESP之外的7个32位通用寄存器中任意一个寄存器作为变址寄存器,将变址寄存器的值乘以一个比例常数(1、2、4、8),最后形成操作数的偏移地址。例【3-8】:MOVAX,[EBX*2];访问DS段MOVECX,[EBP*8];访问DS段5.比例变址加位移寻址:选取除ESP之外的7个32位通用寄存器中任意一个寄存器作为变址寄存器,将变址寄存器的值乘以一个比例常数(1、2、4、8),将换算结果再加上带符号的8位或32位的位移量,最后形成操作数的偏移地址。例【3-9】MOVAX,[EBX*2-30H];访问DS段MOVAX,[EBP*8+4567H];访问DS段6.基址加比例变址寻址以8个32位通用寄存器中任意一个寄存器作为基地址寄存器,再加上除ESP之外的7个32位通用寄存器中任意一个寄存器作为变址寄存器,将变址寄存器的值乘以一个比例常数(1、2、4、8),其换算结果作为操作数的偏移地址;由基址寄存器确定使用DS段还是SS段,其规定相同于基址寻址。例【3-10】MOVAL,[EDX+EBP*2];EDX是基址寄存器,访问DS段MOVEAX,[EBP+ECX*8];EBP是基址寄存器,访问SS段MOVEAX,[EBX][EDI];EBX是基址寄存器,访问DS段MOVEAX,[ESP][EBP];ESP是基址寄存器,访问SS段7.基址加比例变址加位移寻址这种寻址方式是在基址加比例变址寻址基础上,再加上8或32位位移量,构成32位的偏移地址。实际上它是公式3-1即EA=基址+(变址*比例因子)+位移量的综合应用。例【3-11】MOVBL,[ESI+EBP*2+60H];访问DS段MOVEAX,[EBP+EDI*8+3344H];访问SS段MOVEAX,[EBP][EDX];EBP是基址寄存器,访问SS段基址+(变址*比例因子)+位移量8.16位的存储器寻址方式32位CPU兼容16位CPU的寻址方式,也兼容16位的指令系统,在编写32位程序时,不可避免地要使用16位指令系统编程,在16位CPU的寻址方式中,存储器寻址仍然是主要的,这是因为16位的立即寻址、寄存器寻址与32位的相同,容易理解,下面简单介绍16位的存储器寻址方式。(1)直接寻址指令中直接给出了16位偏移地址,物理地址=段寄存器值*16+偏移地址。例【3-15】MOVBL,[2060H];访问DS段MOVAX,[3344H];访问DS段(2)基址寻址指令中以基址寄存器BX或BP中值为16位的偏移地址访问内存,物理地址=段寄存器值*16+偏移地址。以BX和BP为基址寄存器分别访问数据段和堆栈段。例【3-16】MOVAL,[BX];访问DS段MOVDX,[BP];访问SS段关于基址寻址,还有另外一种形式,称为相对基址寻址,它是在基址寄存器的基础上,加上一个带符号的8位或16位的位移量。例【3-17】MOVAL,[BX+30H];访问DS段MOVDX,[BP-1110H];访问SS段(3)变址寻址指令中以源变址寄存器SI或目的变址寄存器DI中值为16位的偏移地址访问内存,物理地址=段寄存器值*16+偏移地址。所访问的数据段都是DS数据段。例【3-18】MOVAL,[SI];访问DS段MOVDX,[DI];访问DS段关于变址寻址,还有另外一种形式,称为相对变址寻址,它是在变址寄存器的基础上,加上一个带符号的8位或16位的位移量。例【3-19】MOVAL,[SI-40H];访问DS段MOVDX,[DI+1000H];访问DS段(4)基址(加)变址寻址指令中以基址寄存器的值加上变址寄存器的值所换算的结果作为偏移地址访问内存,基址寄存器与变址寄存器的组合以及默认访问的段,见表3-3。例【3-20】MOVAL,[BX+SI];访问DS段,可以写成MOVAL,[BX][SI]形式MOVDX,[BP+DI];访问SS段,可以写成MOVDX,[BP][DI]形式(5)相对基址(加)变址寻址:相对基址(加)变址寻址是在基址(加)变址寻址的基础之上,加上一个带符号的8位或16位的位移量,最后形成一个16位的偏移地址,所访问的段、基址寄存器与变址寄存器的组合与上述的相同。例【3-21】MOVAL,[BX+SI+10H];访问DS段,可以写成MOVAL,[BX][SI+10H]形式MOVDX,[BP+DI-29H];访问SS段,可以写成MOVDX,[BP][DI-29H]形式3.332位微处理器指令系统概述32位微处理器的指令系统可以分为以下七类:①数据传送指令②算术运算指令③位操作指令④字符串操作指令⑤控制转移指令⑥符号扩展指令⑦处理机控制指令1.32位微处理器指令系统的四种格式:(1)无操作数指令:格式为[标号:]操作符[;注释]如NOP(空操作指令)。在所有指令中,标号和注释是可选项。(2)单操作数指令格式为[标号:]操作符OPD(地址)[;注释]它的操作规定为:①操作对象为目的地址中的操作数,操作结束后,其运算结果送入目的地址中。②操作数不能是立即数。③操作数类
本文标题:第3章 32位微处理器指令系统.
链接地址:https://www.777doc.com/doc-3382840 .html