x86的寻址方式与基本指令.ppt_第1页
x86的寻址方式与基本指令.ppt_第2页
x86的寻址方式与基本指令.ppt_第3页
x86的寻址方式与基本指令.ppt_第4页
x86的寻址方式与基本指令.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论