




已阅读5页,还剩344页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,汇编语言程序设计,IBM-PC,教师:高飞,2,什么是汇编语言,机器语言、汇编语言、高级语言,3,机器语言是计算机唯一能接受和执行的语言,与硬件紧密相连。由二进制码组成,每个二进制码是一条指令。一条指令通常由两个部分组成:操作码 + 操作数。操作码规定了计算机要执行的基本操作;操作数规定了操作对象或操作对象的地址。,4,汇编语言(Assembly Language)是面向机器的程序设计语言。用汇编语言编写的程序叫汇编语言源程序,计算机无法执行。必须用汇编程序把它翻译成机器语言目标程序,计算机才能执行。这个翻译过程称为汇编过程。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。汇编语言中,用助记符代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。,5,什么是汇编语言,最接近于机器语言的编程语言。最能够锻炼编程者编程思维逻辑的,能形成一个软、硬兼备的编程知识体系,这是任何高级语言都无法给予的。 相对于繁复的高级语言,汇编语言指令集合更简约,指令操作更直接,从汇编开始学习更符合循序渐进的学习原理。汇编语言才是计算机技术的基础,而不是常说的C语言。汇编语言能够让你更好的理解高级语言,尤其是高级语言中的C语言。汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址。磨刀不误砍柴工!,6,学习汇编语言之意义,现实的误区:学习者放弃对于汇编语言的学习,是因为高级语言的开发更容易找到工作。 学习是一个系统过程,我们的知识结构不是一个单一课程所能够建立的,学习汇编的目的并不是非要用汇编去挣饭钱。因为汇编语言对于一个编程人员所应该具备的基本素质的培养和形成得意义是非常重大的! 汇编的操作由于跟硬件紧密相关,所以,很多硬件设施的嵌入式编程使用的都是使用的汇编语言。因为汇编语言更直接,更有效率! 现在的数码产品很多,而这些数码产品赖以生存的芯片,主板等,都包含了嵌入式程序,而这些程序中,汇编语言的使用是相当重要的!,7,学习汇编语言之应用,程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。 程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等 大型软件需要提高性能、优化处理的部分。例如,计算机系统频繁调用的子程序、动态连接库等。 汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、软件破解、外挂软件、分析和防治计算机病毒等等。,8,目 录,第一章 基础知识简介,第九章 BIOS和DOS中断,第三章 IBM PC机的指令系统和寻址方式,第八章 输入/输出程序设计,第七章 高级汇编语言技术,第六章 子程序结构,第五章 循环与分支程序设计,第四章 汇编语言程序格式,第十章 发声系统的程序设计,第二章 IBM PC 计算机组织,9,第一章 基础知识,1.1.1 二进制,计算机中采用二进制数存储和计算。二进制数的基数为2,只有0,1两个数码,逢二进一。各位权是用2k 表示的。,1.1 进位计数制 与不同基数的数之间的转换,10,四位二进制数表示十进制的015共十六个数,11,1.1.2转换:十进制数 二进制数,降幂法例:N=117D,小于 N的二进制权为: 64 32 16 8 4 2 1对应的二进制数: 1 1 1 0 1 0 1 除法整数: 除二取余例:N=117D 余 2 117 1 58 0 29 1 14 0 7 1 3 1 1 1 高 0 N=1110101(B),12,小数:乘二取整例:N=0.625D 取整 2*0.625 1.25 1 高 0.5 0 1.0 1 0.0 N=0.101B1.1.3转换:十六进制数二进制数十六进制数十进制数,13,1.3.1 数的补码表示,负数补码表示的一个简单方法: 先写出与该负数相对应的正数的补码表示,再将其求反加1,就可得到该负数的补码表示。,补码表示: 正数采用 符号绝对值 表示负数X用2n-|X|表示,1.3 计算机中的数和字符的表示,机器中数可有:原码、反码、补码表示,14,用补码表示数时的符号扩展问题,符号扩展:将一个数从位数较少扩展到位数较多。正数的符号扩展:高位补0,负数的符号扩展:高位补1。,双精度数 (双字长数):用二个机器字来表示一个数。其格式为:,15,补码的加法规则:,补码的减法规则:,补码的特性:,X+Y补= X补+Y补,X-Y补=X补+-Y补,补码的加法和减法,求补运算:将一个二进制数按位求反后,末位加1的运算,16,1.3.2 补码加法运算例题:,00011001+ 11100000 11111001,17,1.3.2 补码减法运算例题:,32(25) 57,计算机中用对减数求补的方法把减法转换为加法,18,1.3.3 无符号整数,把最高有效位作为数值处理的数称为无符号整数,它都是正数。8位无符号整数范围:0N255,16位无符号整数范围:0N65535。地址:用无符号整数表示。,带符号的数(在机器中用补码表示)与无符号数的处理是有差别的。特别注意!,定义:,19,1.3.4 字符表示法,字符包括:,20,1.4 几种基本的逻辑运算,1.4.1 “与”运算(AND),“与”运算又称逻辑乘,可用符号 或来表示。如有A、B两个逻辑变量(每个变量只能有0或1两种取值) “与”运算结果如下:只有当A、B取值均为1时,它们的“与”运算的结果才是1。,21,1.4.2 “或”运算(OR),“或”运算又称逻辑加,可用符号+或V来表示。“或”运算规则:即A、B两个变量中只要有一个变量取值为1,则它们“或”运算 的结果就是1。,22,1.4.3 “非”运算(NOT),23,1.4.4 “异或”运算(XOR ExclusiveOR),24,第二章 80x86 计算机组织,2.1 计算机系统概 述,2.1.1硬 件,计算机结构图,25,80x86是由美国Intel公司生产的微处理器,公司成立于1968年1969年就设计出4位的4004芯片1973年设计出8位的8080芯片1978年正式推出16位的8086微处理器芯片由此开始Intel公司的80x86微处理器系列的生产历史.,26,插曲: 当IBM进入PC市场时,8086/8088成为首选.尽管后来IBM要自己开发新CPU,并且想踢开Intel,但Intel80286却帮助Compaq抓住了机会.Compaq迅速推出兼容机并大举成功(Compaq可能是Compatibility Quickly的缩写),IBM自己的CPU也就胎死腹中了. 因为当时人们还没有对计算机产生“代”的概念.当苹果机选用6502时,开发6502的那家CPU公司认为从此可以稳坐泰山了,就没有投入精力去开发新的或与这一代兼容的16位的下一代CPU.这时,Intel看到了机会,它迅速地研制出比苹果机要好得多的16位CPU 8086,这里,苹果发现压力很大,所以也做了一个16位的也能兼容6502的CPU,但是,这个CPU比8086差些,所以苹果公司以后也就一直没有用生产6502 CPU的公司的CPU了,这个公司就失去了成为生产CPU的核心公司的一个机会.后来的苹果选用了68000.,27,80x86 微处理器概况,28,编程有关的逻辑结构,CPURAMI/O端口,运算器,寄存器组,存储器,输入 或输出端口,29,2.1.2 软件,计算机软件层次图,30,存储器,存储单元的地址和内容,31,1)以字节为单位存储信息。2)每一个字节单元给以一个存储器地址。地址从0开始,顺序地加1。用无符号十六进制 数表示:如0100H,1A105H3)存储器的容量以210=1024为基本单位,称为1K。 216 65536个字节单元64K。4)一个存储单元中存放的信息称为该单元的内容。注意:存储器的地址和内容是完全不同的概念。,存储器概念(一),存储器是一片连续的内存空间:,32,存储器概念(二),1)一个字存入存储器要占用相继的两个字节:低位字节放入低地址,高位字节放入高地址。2)字单元的地址用它的低地址来表示。3)字单元的地址既可以是偶数,也可以是奇数4)CPU是以偶数地址访问存储器的。对于奇地址的字单元,要取一个字需要访问二次存储器。5)存储器的特点:它的内容是取之不尽的。,33,存储器(三),存储器地址存储器内容,1A050H1A051H1A052H1A053H1A054H1A055H1A056H1A057H,1A050H字节单元的内容是:56H,其字单元内容是:1256H。1A055H字节单元的内容是:97H,其字单元内容是:8097H。1A056H字节单元的内容是:80H,其字单元内容是:0FE80H。,34,*有20位地址,最大存储容量为220 =1024K=1M字节;*又是16位字长的机器,内部寄存器可表达的最大存储空间为 21664K字节。8086PC,用什么办法来提供20位存储器地址呢?,把存储器划分成段,每个段的大小可达64K,故段内地址可以用16位表示,称为偏移地址。段的起始地址有限制,不能起始于任意地址,而必须从任一小段的首地址开始。何为小段?机器规定:从0地址开始,每16个字节为一小段。小段的首地址的特点是:十六进制表示的地址最低位为0。,存储器地址分段法,存储器地址的分段,8086PC机:,35,00000,00001,0000E,0000F;00010,00011,0001E,0001F;00020,00021,0002E,0002F; ,如:存储器最低地址的三个小段的地址区间每行为一小段:,第一列是每个小段的首地址,在16进制表示的地址中,最低为0(即20位地址的低4位为0)。在 1M字节的地址空间里,共有64K个小段首地址。 每一个存储字节都有一个唯一的20位地址,称为该存储单元的物理地址。20位物理地址由16位段地址和16位偏移地址组成。段地址是指每一段的起始地址,由于它必须是小段的首地址(即20位地址的低4位均为0 ),故可以规定段地址只取段起始地址的高16位值。,36,可写成:16d段地址+偏移地址=物理地址,物理地址的计算方法可以表示:,37,在IBM PC 机中,有四个专门存放段地址的寄存器,称为段寄存器。它们是:代码段CS:代码段存放当前正在运行的程序;数据段DS:数据段存放当前运行程序所用的数据;堆栈段SS:堆栈段定义堆栈的所在区域;附加段ES:附加段是附加的数据段,辅助的数据区。,一般情况下,各段在存储器中的分配是由操作系统负责的。每个段区的大小根据实际需要来分配,允许重叠(重叠是指小于64K)。如果程序的某一段运行过程中会超过 64K空间,在程序中动态地修改段寄存器地内容,并不会因段区地划分而限制了程序空间。,38,保护模式存储器寻址,80286以上CPU除实模式寻址外,还采用保护模式的寻址方式。原因:1、实模式的1MB空间不夠用2、要求支持多任务处理,多任务间要求隔离3、各任务的公用部分可以共享,如操作系统。4、要求支持虚拟存储特性虚拟存储:使用主存储器和外存储器,利用操作系统的调度管理,使CPU可以以内存的处理速度,处理外存大小的存储空间。,39,保护模式和实模式的寻址差别,1、实模式程序设计中,编程者只要给出逻辑地址:(段地址:偏移地址),段地址放在段寄存器中,指令中给出偏移地址。机器自动求得内存的物理地址:段地址左移4位加上偏移地址。2、保护模式:程序员也给出逻辑地址:(段地址:偏移地址)。求取物理地址方法不同:段寄存器(16位)中存放的不是段的起始地址而是选择子。通过该选择子操作系统从内部的全局描述子表和局部描述子表中取得64字节的描述符,它指出了段的基地址、段的界限、访问权和附加的属性等。这样,机器就可以确定内存单元所在的段地址,加上逻辑地址中指定的偏移地址,就可找到相应的内存单元。,40,算术逻辑部件 ALU(Arithmetic Logic Unit)进行算术逻辑运算,控制逻辑负责对全机的控制:取指令,译码,发命令,协调各部件工作。,工作寄存器组用于存放操作数、地址、运算中间结果、结果等。存取速度比存储器快得多。,中央处理机,中央处理机CPU的组成,41,PSW,控 制 逻 辑,指针及变址寄存器,段寄存器,AXBXCXDX,IBM PC 机的 CPU 组成,数据寄存器,42,80X86寄存器组,程序可见寄存器,FLAGS,指针及变址寄存器,段寄存器,AXBXCXDX,EAXEBXECXEDX,ESPEBPESIEDIEIP,EFLAGS,386CPU及以上,43,AX(Accumulator)分别为AH,AL两个8位BX(Base)分别为BH,BL两个8位CX(Count)分别为CH,CL两个8位DX(Data)分别为DH,DL两个8位四个通用寄存器,用来暂时存放计算过程中的操作数、结果或其他信息,可以字(16位)的形式访问,也可以字节(8位)的形式访问。四个数据寄存器除作通用寄存器外,还有各自专用的功能。,8086/8088 寄存器组,通用 数据寄存器,44,数据寄存器的专用功能,AX:算术运算的主要寄存器,乘、除的缺省操作数,所有I/O指令的唯一数据寄存器。BX:常用作计算存储器地址的基址寄存器。CX:常用作循环中计数器。DX:在双字长运算中把DX、AX组合成双字长数,DX用于存放高位字。在I/O指令中,DX作为存放I/O端口的地址。,45,SP(Stack Pointer)称为堆栈指针寄存器,用来指示堆栈段中栈顶的偏移地址。BP(Base Pointer)称为基址指针寄存器,与SS寄存器配合,用来确定堆栈段中某一存储单元的地址。SI(Source Index)源变址寄存器DI(Destination Index)目的变址寄存器SI、DI一般与DS联用,它们都有自动增量和自动减量的功能。,指针及变址寄存器,SP、BP、SI、DI四个16位寄存器,它们只能以字(16位)为单位使用。提供偏移地址。,46,控制寄存器,,IP(Instruction Pointer)为指令指针寄存器,用来存放代码的偏移地址,它与CS寄存器联用确定下一条指令的物理地址。IP寄存器可以控制程序的执行流程。PSW(Program Status Word)程序状态字寄存器由条件码标志(Flag)和控制标志构成。,段寄存器16位,包括CS、DS、SS和ES四个段寄存器,,47,OF(Overflow Flag)溢出标志,在运算过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0。SF(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1,正则置0。CF(Carry Flag)进位标志,记录运算时从最高有效位产生的进位值。如执行加法指令时,最高有效位有进位时置1,否则置0。或表示减法时的 借位情况,条件码标志:,标志位:,48,AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位值。如执行加法指令时第3位有进位时置1,否则置0。执行减法指令时第3位有借位时置1,否则置0。ZF(Zero Flag)零标志,运算结果为0时ZF位置1,零则置0。PF(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。,49,IF(Interrupt Flag)中断标志。IF1,允许中断,否则禁止中断。TF(Trap Flag)陷阱标志,单步方式。TF1,每条指令执行完后产生陷阱,由系统控制计算机;TF0,CPU正常工作不产生陷阱。DF(Direction Flag)方向标志,在串处理指令中控制方向。DF1,每次操作,变址寄存器SI和DI减量,串处理从高地址向低地址方向;DF0,使SI和DI增量,串处理从低地址向高地址方向处理。,控制标志位:,有三个,50,PSW 中标志位的符号表示,51,第三章 80x86的指令系统 和寻址方式,要利用计算机为我们服务,就要编写程序让计算机执行。本章是本书的重点部分,了解CPU究竟能干什么及它是如何找到内存中存放的程序和数据的,52,操作码:指出计算机所要执行的操作;(干什么)操作数:指出操作数或操作数的地址。(操作的对象)标号:该条指令的符号地址。,标号:,;注释,汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址。,计算机中指令的格式,一条指令存放在内存的何处?这是转移地址有关的寻址问题;指令中的操作数在何处?这是操作数的寻址问题。下面分别介绍。,53,能够存放数据的地方只有寄存器和存储器,1)立即寻址方式(Immediate addressing),操作数直接存放在指令中(代码段)。这种操作数称为立即数。如果是16位数,则高位字节存放在高地址中,低位字节存放在低地址中。立即寻址方式用来表示常数。,80x86的寻址方式,一、与操作数有关的寻址方式,54,指令执行后,(AX)=3064H图中指令存放在代码段中,OP表示该指令的操作码部分,3064则为立即数,它是指令的一个组成部分。,指令,代码段存储器,立即寻址方式例题:MOV AX , 3064H,55,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,2) 寄存器寻址方式(Register addressing),操作数在寄存器中,指令指定寄存器名。,使用寄存器可取得较高的运算速度。,56,例: MOV AX,BX如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变。MOVDH,CL如指令执行前(CX)=3064H,(DX)=1234H;则指令执行后,(CX)=3064H,(DX)6434H,寄存器寻址方式例题:,57,存储器的寻址问题,存储器是存放操作数的主要地方;存储器容量大,能存放的数据多;相比寄存器,它的存取速度要慢;寻找存储器中的数,首先要找到它的地址;存储器的地址表示是段址:偏移地址;段地址由段寄存器给出;偏移地址又称有效地址,表示为:EA基址寄存器+变址寄存器比例因子+偏移量,58,1) 直接寻址方式(Direct addressing),以下都是对存储器的寻址,直接寻址方式中,有效地址EA放在指令中,如:MOVAX,1200H;存储器的物理地址=16d(DS)+EA 在汇编语言指令中,可以用符号地址代替数值地址如: MOV AX , VALUE VALUE为存放操作数单元的符号地址。即等效为:MOV AX,VALUE;一般不用在指令中可以指定段跨越前缀。如下: MOV AX,ES: VALUE或 MOV AX,ES:VALUE,59,执行的结果为: (AX)=3050H,代码段,数据段,30000,VALUE32000,存储器,MOV AX,2000H如(DS)=3000H,则执行情况如图,直接寻址方式例题:,MOVAX,VALUE;等效,60,2)寄存器间接寻址方式(Register indirect addressing),操作数的有效地址在基址寄存器BX、BP或变址寄存器SI、DI中,操作数的物理地址: 物理地址=16d(DS)+(BX) 物理地址=16d(DS)+(SI) 物理地址=16d(DS)+(DI) 操作数在堆栈段中,段地址在SS中,操作数的物理地址: 物理地址=16d(SS)+(BP),61,MOV AX,BX若 (DS)=2000H,(BX)=1000H则 物理地址=20000+1000=21000H,数据段,存储器,20000,21000,执行结果为:(AX)= 50A0H,寄存器间接寻址方式例题:,62,3) 寄存器相对寻址方式(或称直接变址寻址方式),操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量之和。即:,63,例: MOV AX , COUNTSI其中COUNT为16位位移量的符号地址。如果 (DS)=3000H,(SI)=2000H, COUNT=3000H则 物理地址=30000+2000+3000 =35000H,执行结果是: (AX)=1234H,寄存器相对寻址方式例题:,DS,3000H,5000H,2000H,COUNT,64,4) 基址变址寻址方式(Bsaed indexed addressing),操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。如基址寄存器为BX时,段寄存器使用DS;如基址寄存器为BP时,段寄存器则用SS。 物理地址=16d(DS)+(BX)+(SI) 或 (DI) 物理地址=16d(SS)+(BP)+(SI) 或 (DI),65,MOV AX,BXDI 如 (DS)=2100 H,(BX)=0158 H (DI)=10A5 H,数 据 段,存 储 器,21000,21158,221FD,(BX) (DI),则 EA=0158+10A5= 11FD H物理地址=21000+11FD=221FD H执行结果(AX)=1234 H,基址变址寻址方式例题:,66,5) 相对基址变址寻址方式(Relative based indexed addressing),操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之和。物理地址为: 物理地址=16d(DS)+(BX)+(SI)+8位位移量 或(DI)或16位位移量 物理地址=16d(SS)+(BP)+(SI)+8位位移量 或(DI)或16位位移量,67,MOV AX , MASK BXSI(也可写成MOV AX ,MASK BX+SI 或MOV AX, MASK+BX+SI )如 (DS)=3000H,(BX)=2000H,(SI)=1000H, MASK=0250H,(33250H)=1234H,则 物理地址=16d(DS)+(BX)+(SI)+ MASK =30000+2000+1000+0250 =33250H执行结果(AX)=1234H,相对基址变址寻址方式例题:,68,6) 比例变址寻址方式(Scaled indexed addressing),操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和。物理地址为: 物理地址=16d(DS)+(ESI)比例因子+8位位移量 或(EDI)比例因子或16位位移量 物理地址=16d(SS)+(ESI)比例因子+8位位移量 或(EDI)比例因子或16位位移量,以下三种只能用在80386及后继机型中,69,MOV EAX,COUNTESI*4 如要求把双字数组COUNT中的第3号元素送到EAX,可令(ESI)=3,比例因子为4。,比例变址寻址方式例题:,70,7) 基址比例变址寻址方式(Based scaled indexed addressing),操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器之和。物理地址为: 物理地址=16d(DS)+(BX)+(SI)比例因子 或(DI)比例因子 物理地址=16d(SS)+(BP)+(SI)比例因子 或(DI)比例因子例:MOV ECX,EAXEDX*8,71,8) 相对基址比例变址寻址方式(Relative based scaled indexed addressing),操作数的有效地址是变址寄存器的内容乘以比例因子再加上基址寄存器、位移量之和。物理地址为: 物理地址=16d(DS)+(BX)+(SI)比例因子+位移 或(DI)比例因子 物理地址=16d(SS)+(BP)+(SI)比例因子+位移 或(DI)比例因子例:MOV EAX,TABLEEBPEDI*4,72,二、与转移地址有关寻址,程序总不能都是顺序执行,要有循环、分支等。因此下一条指令的地址不一定是紧接它。寻找下一条指令的地址,就是与转移地址有关的寻址。,记牢:程序的地址由CS:IP来表示,下一条指令的地址:只有在本段内和段外两种:段内只修改IP值;段外既要修改CS,又要修改IP值,73,下一条指令有效地址:当前IP寄存器的内容和指令中指定的 8位或16位位移量之和。汇编语言格式:JMPNEARPTRPROGIAT(16位)JMPSHORTQUEST(8位)PROGIAT和QUEST是目标的符号地址 转向有效地址是一种相对寻址方式。,+,EAIP寄存器,段内直接,1) 段内直接寻址(Intrasegment direct addressing),74,2) 段内间接寻址(Intrasegment indirect addressing),下一条指令地址:由一个寄存器或一个存储单元的内容表示。 JMP BX JMP WORD PTR BX+TABLE,段内间接,有效地址IP,75,假设:DS=2000H,BX=1256H,SI=528FH,位移量=20A1H, (232F7H)=3280H,(264E5H)=2450H,段内转移例题:,例1:JMP BX,则执行后(IP)=1256H,例3:JMP BXSI,则执行后 (IP)=(16d(DS)+(BX)+(SI) =(20000+1256+528F)=(264E5)=2450H,例2:JMP TABLEBX,则执行后 (IP)=(16d(DS)+(BX)+位移量) =(20000+1256+20A1)=(232F7)=3280H,76,3) 段间直接寻址(Intersegment direct addressing),指令的格式可表示为: JMP FAR PTR NEXTROUTINT其中,NEXTROUTINT为转向的符号地址, FAR PTR则是表示段间转移的操作符。,段间直接,77,4) 段间间接寻址(Intersegment indirect addressing),指令格式可表示为:JMP DWORD PTR INTERS+BXINTERS+BX说明数据寻址方式为寄存器相对寻址方式,DWORD PTR为双字操作符。,段间间接,78,数据传送指令 算术指令逻辑指令串处理指令控制转移指令 处理机控制指令,3.3 80x86的指令系统,80x86的指令系统可以分为以下6组,79,一、 数据传送指令,MOV (Move)传送PUSH (Push onto the stack)进栈POP (Pop from the stack)出栈XCHG (Exchange)交换,1) 通用数据传送指令,MOVESX(move with sign-extend)带符号扩展传送MOVEZX(move with zero-extend)带零扩展传送PUSHA/PUSHAD(push all registers)所有寄存器进栈POPA/POPAD(pop all registers)所有寄存器出栈,80,MOV指令可行性图,MOV指令是双操作数指令:必须类型匹配。1、目的操作数不允许立即数方式,2、不允许用CS寄存器和IP寄存器为目的3、不允许用MOV指令在两个存储器单元间直接传送4、不允许两个段寄存器之间直接传送数据,5、不允许对段寄存器送立即数(P58),MOV指令不影响标志位,32位下的MOVSX、MOVZX,81,堆栈是以“后进先出”方式工作的一个存储区,其段地址存放于SS寄存器,它只有一个出入口,故只有一个堆栈指针寄存器SP,SP的内容在任何时候都指向当前的栈顶。堆栈的存取必须以字为单位。,2)PUSH、POP指令,82,PUSHA格式为:16位通用寄存器依次进栈次序为:AX,CX,DX, BX,指令执行前的SP,BP,SI,DI。指令执行后 (SP)(SP)-16仍指向栈顶。,PUSHAD格式为:32位通用寄存器依次进栈次序为:EAX,ECX, EDX,EBX,指令执行前的ESP,EBP,ESI,EDI。指 令执行后(ESP)(ESP)-32仍指向栈顶。,XCHG交换指针源和目的相互交换,83,3) 累加器专用传送指令,IN (Input)输入 OUT (Output)输出 XLAT(Translate)换码,这组指令只限于使用累加器EAX,AX或AL传送信息IN、OUT指令完成CPU与I/O端口间的信息传送。,输入指令: IN 目的,源;目的为寄存器AL,AX,EAX;源为端口号,输出指令: OUT 目的,源;源为寄存器AL,AX,EAX;目的为端口号,端口号的表示方式有两种:直接寻址和间接寻址: 直接寻址:适用于端口号在0255之间。(长格式) 间接寻址:适用于端口号在00000FFFFH之间,(短格式) 它由DX寄存器来表示,84,IN、OUT指令格式,IN AL,20H;IN AX,78H;AL (78H),AH (79H)IN AL,DX; DX中存放端口号IN AX,DX;,OUT 61H,AL;OUT 42H,AX;(42H) AL,(43H) AHOUT DX,AL;OUT DX,AX; DX中放端口号,85,XLAT换码指令格式,XLAT执行的操作:AL (BX)+(AL),存储器,BX(AL)=0AH120AH,例 (DS)=2400H (BX)=1200H (AL)=0AH指令执行后: (AL)=41H功能:将数字转换成 ASCII码,25200H2520AH,86,4)地址传送指令,LDS(Load DS with Pointer)指针送寄存器和DS格式为 LDS REG,SRC执行的操作:(REG) (SRC) (DS) (SRC2),LEA(Load effective address)有效地址送寄存器 格式为 :LEA REG, SRC 执行的操作:(REG) SRC,LES(Load ES with Pointer) 指针送寄存器和ES格式为 LES REG,SRC执行的操作: (REG) (SRC) (ES) (SRC2),87,LEA有效地址送寄存器指令例:LEABX,ARRAYBX+SI 将ARRAY、BX、SI三者的值相加(即表示偏移地址)送 BX (注意和MOV的区别),LDS 指针送寄存器和DS指令例:LDS SI,BX+DI 将内存中由BX、DI所指的连续4个字节的内容送到寄存器SI和段寄存器DS中,LES 指针送寄存器和ES指令例:LES DI,ARRAYBX *将由ARRAY和BX所指内存连续2个字的内容送到寄存器DI和段寄存器ES中 以上指令不影响标志位。,88,ADD (add)加法 ADC (add with carry)带进位加法 INC (increment)加1,INC 指令不影响CF标志,其余都影响条件标志位。溢出位OF是用来表示带符号数的溢出,CF位是表示无符号数的溢出。,二、 算术指令,1、加法指令,89,ADD DX,0F0F0H 如指令执行前(DX)=4652H,指令执行后(DX)=3742H,ZF=0,SF=0,CF=1,OF=0 AF=0 (详见P24页),加法指令例题:,3742,90,SUB(subtract)减法 SUB DST,SRC;DST=DST-SRC SBB(subtract with borrow)带借位减法 SBB DST,SRC;DST=DST-SRC-CF,减法指令影响所有标志位。CF:借位标志,若减数被减数,有借位则 CF=1,否则CF=0; 用二进制加法运算时,用最高有效位向高位的进位来判别:有进位时CF=1,无进位时CF=0。OF:若两个数的符号相同,OF=0;若两个数的符号相反,而结果的符号与减数相同则OF=1,除上述情况外OF=0。SF:是结果的最高位;ZF:结果为0 则ZF=1AF:半字节的借位; PF:结果中1的个数为偶 则PF=1。,2) 减法指令,91,DEC(Decrement)减1 DEC OPR; (OPR)(OPR)-1NEG(Negate)求补 NEG OPR; (OPR)0FFFFH-(OPR)+1CMP(Compare)比较 CMP OPR1,OPR2; (OPR1)-(OPR2),以上三条指令: *DEC不影响CF,*CMP指令不保存结果, 其余都根据结果(与减法同)设置条件标志位。,92,SUB DH,BP+4如指令执行前(DH)=41H,(SS)=0000H,(BP)=00E4H,(000E8)=5AH,故,(DH)=0E7H, SF=1,ZF=0,CF=1,OF=0,减法指令例题:,E7,93,MUL(Unsigned Multiple)无符号数乘法 MUL SRC IMUL(Signed Multiple)带符号数乘法 IMUL SRC,指令中SRC为REG或MEM,另一个操作数是默认的:必须是累加器,字运算为AX,字节运算为AL;两个字相乘得到的32位乘积,默认存放在(DX,AX)中,DX存放高位字,AX存放低位字。两个字节相乘得到的16位乘积,默认存放在AX中,AH存放高位字节,AL存放低位字节,3) 乘法指令,MUL和IMUL指令只对OF和CF标志有影响,高字或高字节为0,则OF=0,CF=0否则为1。,94,4) 除法指令,DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法格式:DIV SRC;SRC为REG或MEM IDIV SRC; 分字节除和字除,操作:字节:(AX)/(SRC) AL;商 (AX)%(SRC) AH;余 字:商:AX (DX,AX)/(SRC) 余:DX (DX,AX)%(SRC),除法指令对所有条件码均无影响,95,除法指令中字节操作要求被除数为(AX)16位,字操作为32位(DX,AX)。若被除数的位数不符合时,需要用符号扩展指令来取得所需的被除数格式。,CBW:字节转换为字指令将AL的内容符号扩展到AHCWD:字转换为双字指令将AX的内容符号扩展到DX,符号扩展指令,除法中要考虑使用的,96,MOV AX,XIMUL YMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX,示例,算术运算综合举例,计算:(V-(X*Y+Z-540)/X,其中X,Y,Z均为16位带符号数,已分别装入X,Y,Z,V单元中,要求上式计算结果的商存入AX,余数存入DX中.,SUBCX,540SBBBX,0MOVAX,VCWDSUBAX,CXSBBDX,BXIDIVX,97,逻辑运算指令,注意:1、按位操作。2、除NOT外,均为双操作数指令。要求与MOV指令同。3、AND和TEST都进行与操作,两者不同之处是:TEST不保存与的结果,只置条件标志位。,逻辑指令,AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or) 异或TEST(test) 测试,98,指令格式为:操作码 OPR,CNTOPR:是除立即数以外的任何寻址方式移位次数由CNT决定,CNT可以是1或CL(次数1),移位指令,SHL(shift logical left)逻辑左移SAL(shift arithmetic left)算术左移SHR(shift logical right )逻辑右移SAR(shift arithmetic right)算术右移ROL(Rotate left)循环左移ROR(Rotate right)循环右移RCL(Rotate left through carry)带进位循环左移RCR(Rotate right through carry)带进位循环右移,99,(1)逻辑左移,(3)逻辑右移,(4)算术右移,(2)算术左移,移位指令根据结果设置SF,ZF PF和CF。OF只在CNT1时才有效:最高位发生变化置1。AF不影响。,100,(4)循环左移,(5)循环右移,(6)带进位循环左移,(7)带进位循环右移,循环移位不影响PF、SF、ZFCF依结果变,OF变化同移位指令,101,与上述基本指令配合使用的前缀:,REP(Repeat)重复REPE/REPZ(Repeat while equal/zero) 相等/为零则重复REPNE/REPNZ(Repeat while not equal/not zero) 不相等/不为零则重复,串处理指令,MOVS(Move string) 串传递 CMPS(Compare string) 串比较 SCAS(Scan string) 串扫描 LODS(Load from string) 从串取 STOS(Store in to string) 存入串,102,举例:数据定义如下:DATA SEGMENT STRING DB SPACE EXPLORERS INC PRLINE DB 20 DUP ( ) DATA ENDS ;将串STRING中字符从左到右传送到PRLINE中。:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,STRINGMOVDI,OFFSETPRLINEMOVCX,PRLINESTRINGCLD ;清除DFREP MOVSB:,103,MOVS 串传送指令 格式: MOVS DST,SRC;DST和SRC均为MEM MOVSB(字节);不影响标志 MOVSW(字),执行的操作:1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东湛江市廉江市第三批兜底安置类公益性岗位招聘4人考试模拟试题及答案解析
- 2025浙江温州市白鹿文化演艺发展有限公司面向社会招聘1名工作人员考试参考题库附答案解析
- IT创新与研发管理实践指南
- 2025云南省文山州西畴县妇幼保健院招聘编外人员笔试备考题库及答案解析
- 2025国新控股(上海)有限公司总经理招聘1人笔试参考题库附答案解析
- 通讯行业移动通信网络优化及升级方案
- 财务管理本科毕业论文
- 地质专业毕业论文方向
- 2025总公司授权委托分公司签合同的范例
- 2025山西运城市临猗县招聘社区工作者32人(一)考试参考题库附答案解析
- 胆囊癌围手术护理
- 按摩技师培训按摩理论与技法考核试卷
- 汽车维修业务接待
- 下肢静脉曲张课件
- 脑健康中心建设指南(2024年版)
- 2024-2025学年八年级上册历史期末复习选择题(解题指导+专项练习)原卷版
- 高考小说阅读导练:蒙太奇、意识流、冰山理论专项(理论指导+强化训练+参考答案)
- 市政工程综合管网及道路施工组织设计方案
- 关于成立建筑垃圾循环利用公司策划书
- 医院义诊与公益活动管理制度
- 上肢骨折功能锻炼
评论
0/150
提交评论