《x86的寻址方式与基本指令.ppt》由会员分享,可在线阅读,更多相关《x86的寻址方式与基本指令.ppt(54页珍藏版)》请在三一办公上搜索。
1、,2023/11/8,1,汇编语言程序设计,第4章 80 x86的寻址方式与基本指令,4.1 指令系统概述4.2 80 x86的寻址方式4.3 数据处理类指令4.4 控制转移类指令4.5 其他类指令,2023/11/8,2,汇编语言程序设计,4.1 指令系统概述,第4章 80 x86的寻址方式与基本指令,指令计算机执行的各种操作的命令的形式。指令系统计算机所能执行的全部指令。向上兼容每种计算机有自己固有的指令系统,如Intel 8086/8088和MC68000的指令系统各不相同。但是486微处理器可以执行8086/8088、286、386的指令系统,这就是向上兼容的缘故。程序指令的集合或指令
2、的序列。,1.几个概念,3,汇编语言程序设计,2023/11/8,4.1 指令系统概述,操作码 操作数,操作数80 x86的运算指令采用二地址指令,即:操作码(目的)操作数,(源)操作数操作码指出要执行的操作。操作数指出指令操作的对象。可能是操作数本身,也可能是操作数地址。源操作数指出操作数的来源。目的操作数指出指令的操作结果存放何处。在许多指令中,同时又指出另一操作数的来源。注意原来的数据丢失。,2.指令的一般格式,2023/11/8,4,汇编语言程序设计,例MOV AL,34H;操作数本身,立即数。ADD AL,DATA1;操作数地址MUL CL;单操作数指令的形式有:双操作数指令 单操作
3、数指令DEC CX 隐含操作数指令AAA,2023/11/8,5,汇编语言程序设计,(1)立即数操作数本身,存放在指令代码中。(2)寄存器操作数操作数存放在CPU内部寄存器中。(3)内存操作数操作数存放在内存中,一般在数据段、附加段、甚至堆栈段。给出的是操作数的地址。(4)端口操作数在I/O指令中,给出的端口地址。如 IN AL,34HOUT 43H,AL,3.操作数的种类,2023/11/8,6,汇编语言程序设计,2023/11/8,7,汇编语言程序设计,第4章 80 x86的寻址方式与基本指令,一、与数据有关的寻址方式二、与转移地址有关的寻址方式,4.2 80 x86的寻址方式,寻址方式如
4、何寻找(规定)操作数的方式。即指令中用于说明操作数所在地址的方法。,一、与数据有关的寻址方式,2023/11/8,8,汇编语言程序设计,一、与数据有关的寻址方式,操作数直接放在指令中,紧跟在操作码之后,与操作码一起存放在代码段中。可以是字节/字/双字。例MOV AL,5MOV AX,3087HMOV EAX,12345678H如下图所示:,1.立即寻址方式(Immediate addressing),2023/11/8,9,汇编语言程序设计,一、与数据有关的寻址方式,2023/11/8,10,汇编语言程序设计,立即寻址主要用途是给寄存器赋初值。用来表示常数。注意只能用于源操作数,不能用于目的操
5、作数。,2023/11/8,11,汇编语言程序设计,一、与数据有关的寻址方式,操作数在寄存器中,指令指定寄存器号。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP;对于8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。对于32位操作数,寄存器可以是EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP;例:MOV AX,BXMOV ECX,EDXMOV DL,AL,2.寄存器寻址方式(Register addressing),2023/11/8,12,汇编语言程序设计,寄存器寻址方式由于操作数在寄存器中,不需要访问存储器,所以速度最快,
6、也最常用。寄存器寻址方式寻找操作数的示意图如下:,MOV AX,BX,如:,2023/11/8,13,汇编语言程序设计,一、与数据有关的寻址方式,除上述两种寻址方式外,以下的寻址方式的操作数都在除代码段以外的存储区中,称为内存操作数。内存操作数的地址由段基地址和偏移地址相加而取得。在实模式和保护模式下,段基地址的取得方法不同。,内存操作数,内存操作数,2023/11/8,14,汇编语言程序设计,一、与数据有关的寻址方式,有效地址EA(Effective Address)在各种寻址方式中,操作数的偏移地址可由各种成分组成,称为有效地址,用EA表示。内存操作数的各种不同的寻址方式,仅是它们的EA的
7、组成不同。,有效地址,2023/11/8,15,汇编语言程序设计,一、与数据有关的寻址方式,有效地址EA由四种成分组成:(1)位移量8/16/32位地址偏移量(2)基址基址寄存器的内容。通常用来指示数组或字符串的首地址。(3)变址变址寄存器的内容。通常用来访问数组或字符串中的某个元素。(4)比例因子386以后机型有。值为1,2,4,8。乘以变址寄存器的内容得到变址值。,有效地址的计算公式:EA=基址+(变址比例因子)+位移量,有效地址的计算,2023/11/8,16,汇编语言程序设计,一、与数据有关的寻址方式,16/32位寻址时EA四种成分的组成,位移量基址寄存器变址寄存器比例因子,0,8,1
8、6位BX,BPSI,DI无,0,8,16,32位任何32位通用寄存器32位通用寄存器(除ESP)1,2,4,8,16位寻址,32位寻址,2023/11/8,17,汇编语言程序设计,一、与数据有关的寻址方式,在指令中大多隐含段地址。段地址有个基本的规定(约定,默认),也允许超越(可修改),见下表所示:,段约定和段超越,2023/11/8,18,汇编语言程序设计,一、与数据有关的寻址方式,段约定和段超越:存取方式约定段可修改段 偏移地址取指令CS 无IP堆栈操作SS 无SP源串DSCS,ES,SSSI目的串ES 无DIBP作基址SSCS,DS,ESEA通用数据读写DSCS,ES,SSEA,2023
9、/11/8,19,汇编语言程序设计,一、与数据有关的寻址方式,操作数在内存中,有效地址EA在指令的代码段中,它在操作码之后。例MOV AX,2000H如下图所示:,3.直接寻址方式(Direct addressing),2023/11/8,20,汇编语言程序设计,一、与数据有关的寻址方式 3.直接寻址方式,2023/11/8,21,汇编语言程序设计,一、与数据有关的寻址方式 3.直接寻址方式,注意几点:(1)MOV AX,2000H与 MOV AX,2000H的区别。(2)MOV AX,2000H与 MOV AL,2000H的区别。(3)MOV AX,2000H等同于 MOV AX,DS:20
10、00H。(4)若VALUE是符号地址,则MOV AX,VALUE同MOV AX,VALUE。,2023/11/8,22,汇编语言程序设计,一、与数据有关的寻址方式,操作数的有效地址在基址寄存器BP、BX和变址寄存器SI、DI中,而操作数在内存中。例MOV AX,BX如下图所示:,4.寄存器间接寻址方式(Register indirect addressing),2023/11/8,23,汇编语言程序设计,一、与数据有关的寻址方式4.寄存器间接寻址方式,2023/11/8,24,汇编语言程序设计,一、与数据有关的寻址方式4.寄存器间接寻址方式,必须注意:如果指令中指定的寄存器是BX、SI、DI之
11、一,则操作数在数据段中,用DS的内容作为段地址;如果指令中指定的寄存器是BP,则操作数在堆栈段中,用SS的内容作为段地址。另外,指令中也可以指定段超越来访问其它段中的数据。如:MOV AX,ES:BX。,2023/11/8,25,汇编语言程序设计,一、与数据有关的寻址方式,或称为(直接)变址寻址。操作数的有效地址是BP、BX、SI、DI之一的内容加上指令中指定的8位或16位位移量。例:MOV AX,COUNTBX如下图所示:,5.寄存器相对寻址方式(Register relative addressing),2023/11/8,26,汇编语言程序设计,一、与数据有关的寻址方式 5.寄存器相对寻
12、址方式,2023/11/8,27,汇编语言程序设计,一、与数据有关的寻址方式 5.寄存器相对寻址方式,同样注意:出现BP则是堆栈段中的数据。又例:MOV AL,100H+DIMOV AX,BUFBX,2023/11/8,28,汇编语言程序设计,一、与数据有关的寻址方式,操作数的有效地址是BP、BX之一和SI、DI之一的内容之和。两个寄存器均由指令指定。例:MOVAX,BXSIMOV AX,BX+DI示意图类似,不同的是组成EA的两个地址不尽相同。,6.基址变址寻址方式(Based indexed addressing),2023/11/8,29,汇编语言程序设计,一、与数据有关的寻址方式 6.
13、基址变址寻址方式,同样注意BP的问题。例:MOV AX,BXDIMOV AX,BX+SIMOV DX,BP+DIMOV DX,ES:BPDI,2023/11/8,30,汇编语言程序设计,一、与数据有关的寻址方式,操作数的有效地址是BP、BX之一和SI、DI之一的内容和8位或16位偏移量三者之和。两个寄存器均由指令指定。例:MOVAX,COUNTBXSIMOV AX,MASKBX+SI示意图也类似,不同的是EA是由三个地址组成。,7.相对基址变址寻址方式(Relative based indexed addressing),2023/11/8,31,汇编语言程序设计,一、与数据有关的寻址方式 7
14、.相对基址变址寻址方式,同样有BP的问题。又如:MOV AX,200HBXSIMOV AX,200H+BX+SIMOV DX,2BPDIMOV AX,2BP+SI,2023/11/8,32,汇编语言程序设计,一、与数据有关的寻址方式,操作数的有效地址变址寄存器的内容乘以指令中指定的比例因子再加上偏移量三者之和。(除ESP以外的32位通用寄存器)例:MOVEAX,COUNTESI*4把双字数组COUNT中的元素3送到EAX中。如下图所示。,8.比例变址寻址方式(scaled indexed addressing),2023/11/8,33,汇编语言程序设计,一、与数据有关的寻址方式,操作数的有效
15、地址变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容三者之和。例:MOV ECX,EAXEDX*8该寻址方式比基址变址寻址方式更灵活。,9.基址比例变址寻址方式(based scaled indexed addressing),2023/11/8,34,汇编语言程序设计,一、与数据有关的寻址方式,操作数的有效地址变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容,再加上位移量,四者之和。例:MOV EAX,TABLEEBPEDI*4该寻址方式比相对基址变址寻址方式更灵活。,10.相对基址比例变址寻址方式(relative based scaled indexed ad
16、dressing),2023/11/8,35,汇编语言程序设计,用来确定转移指令(如JMP,JC等)及CALL指令的转向地址。,二、与地址有关的寻址方式,2023/11/8,36,汇编语言程序设计,二、与地址有关的寻址方式,转向的有效地址是当前IP寄存器的内容+指令中指定的8位或16位位移量。例如:JMP NEXTJMP SHORT NEXTJMP NEAR PTR NEXT,1.段内直接寻址(intrasegment direct addressing),2023/11/8,37,汇编语言程序设计,二、与地址有关的寻址方式 1.段内直接寻址,这是一种相对寻址方式,转向有效地址用相对于当前IP
17、值的位移量来表示。位移量为8位时称为短转移。位移量为16位时称为近转移。386及以后机型,偏移地址在EIP中,位移量为8位或32位。,2023/11/8,38,汇编语言程序设计,二、与地址有关的寻址方式,转向的有效地址是一个寄存器或存储单元的内容,取代IP寄存器的内容。例如:JMP BXJMP TABLEBXJMP BXSI JMP ECXJMP WORD PTR TABLEESI,2.段内间接寻址(intrasegment indirect addressing),2023/11/8,39,汇编语言程序设计,二、与地址有关的寻址方式,指令中直接提供了转向的段地址和偏移地址,分别取代CS和IP
18、的内容,即可完成从一个段到另一个段的转移。例如:JMP FAR PTR NEXT386以后的机型则修改CS和EIP。,3.段间直接寻址(intersegment direct addressing),2023/11/8,40,汇编语言程序设计,汇编语言程序设计 第三章 80 x86的寻址方式和指令系统,二、与地址有关的寻址方式,用存储器中两个相继字单元的内容取代CS和IP的内容,达到段间转移的目的。例如:JMP DWORD PTR INTERS+BXJMP DWORD PTR EDI,4.段间间接寻址(intersegment indirect addressing),2023/11/8,41
19、,汇编语言程序设计,2023/11/8,42,汇编语言程序设计,第4章 80 x86的寻址方式与基本指令,一、数据传送指令二、算术运算指令三、逻辑运算指令四、移位指令五、串操作指令六、输入输出指令,4.3 数据处理类指令,2023/11/8,43,汇编语言程序设计,第4章 80 x86的寻址方式与基本指令,一、数据传送指令,通用数据传送指令MOV MOVSX MOVZXXCHG堆栈操作指令PUSH POP PUSHA/PUSHADPOPA/POPAD 地址传送指令LEA LDS LES LFS LGS LSS标志寄存器传送指令LAHF SAHF PUSHF POPF,一、数据传送指令,MOV指
20、令格式:MOV DST,SRC;W/B操作:(DST)(SRC)其中:DST:目的操作数,可以是M(存储器)、R(寄存器)、A(累加器);SRC:源操作数,可以是M、R、A、立即数。不影响标志位。数据传送的示意图如下:,1.通用数据传送指令,2023/11/8,44,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,2023/11/8,45,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,可以分为四种传送类别:(1)寄存器之间数据传送MOV AX,BXMOV DL,AHMOV DX,ESMOV DS,AXMOV BP,SI注意:CS和IP不参加数据传送,CS作源操作数是可以的,如
21、“MOV AX,CS”,但一般不用。,2023/11/8,46,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,(2)立即数 通用寄存器(不能是段寄存器)MOV AL,25MOV BX,052AHMOV SI,OFFSET TABLEMOV SP,0A2C0H注意:立即数不能作目的操作数。,2023/11/8,47,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,(3)寄存器与存储器之间的数据传送MOV AL,BUFFERMOV AX,SIMOV LASTBX+DI,DLMOV SI,ES:BPMOV ALFABXDI,ES注意:CS和IP不参与数据传送(CS只能作源操作数),
22、2023/11/8,48,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,(4)立即数到存储器的数据传送MOV ALFA,25MOV DS:DATABP,30A0HMOV BYTE PTR SI,75MOV BX+DI+LAST,0FFH注意:立即数 存储器,一定要使它们的类型一致。,2023/11/8,49,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,存储器之间不能直接传送!如“MOV ALFA2,ALFA1”,是错误的。存储器之间只能借助通用寄存器间接传送:MOV AL,ALFA1MOV ALFA2,AL程序例:DATA1处的100个字节数据传送到DATA2处。分析:通
23、过累加器间接传送,用循环的方法,CX作计数器。,2023/11/8,50,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,MOV SI,OFFSET DATA1;源数指针MOV DI,OFFSET DATA2;目的数指针MOV CX,100;计数器初值NEXT:MOV AL,SI;传送一个数MOV DI,AL;INC SI;修改地址指针INC DIDEC CX;计数器减1JNZ NEXT;未传完,转NEXT,2023/11/8,51,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,或者:MOV SI,0;变址寄存器初值MOV DI,0;MOV CX,100;计数器初值NEXT:
24、MOV AL,DATA1SI;变址寻址MOV DATA2DI,AL;传送一个数INC SI;修改地址指针INC DIDEC CX;计数器减1JNZ NEXT;未传完,转NEXT,2023/11/8,52,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,MOVSX 带符号扩展传送指令格式:MOVSX DST,SRC操作:(DST)符号扩展(SRC)两种形式:MOVSXreg1,reg2MOVSXreg,mem例如:MOVSX EAX,CLMOVSXEDX,EDI不影响标志位。,2023/11/8,53,汇编语言程序设计,一、数据传送指令1.通用数据传送指令,MOVZX带零扩展传送指令格式:MOVZX DST,SRC操作:(DST)零扩展(SRC)两种形式:MOVZXreg1,reg2MOVZXreg,mem例如:MOVZX DX,ALMOVZXEAX,DATA不影响标志位。,2023/11/8,54,汇编语言程序设计,