大连理工大学自动化系微机原理-3

上传人:深秋****菊 文档编号:243145881 上传时间:2024-09-16 格式:PPT 页数:229 大小:2.25MB
返回 下载 相关 举报
大连理工大学自动化系微机原理-3_第1页
第1页 / 共229页
大连理工大学自动化系微机原理-3_第2页
第2页 / 共229页
大连理工大学自动化系微机原理-3_第3页
第3页 / 共229页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,大连理工大学自动化系,计算机原理,第三章,8086,的寻址方式和指令系统,3.1,基本概念,3.2,寻址方式,3.3,指令格式,3.4,指令系统,3.1,基本概念,指令与指令系统,(一)指令,(Instruction),指令,是使计算机执行某种特定操作的二进制编码。,操作:,数据传送类,加工处理类:算术运算、逻辑运算、移位循环,控制类:转移、调用、中断,串操作类,(二)指令系统(,Instruction Set,),所有指令的集合,,8086 CPU,包括,133,条指令,(三)寻址方式,一条指令通常包括两部分,操作码:规定所要执行的操作类型,如传送、运算、移位、跳转等,操作数:所需要处理的数据或者数据的地址信息,指令执行的参与者,即各种操作的对象,有些指令不需要操作数,操作码,操作数,指令由操作码和操作数两部分组成,每种指令的,操作码,:,用一个助记符表示(指令功能的英文缩写),对应着机器指令的一个或多个二进制编码,指令中的,操作数,:,可以是一个具体的数值,可以是存放数据的寄存器,或指明数据在主存位置的存储器地址,获得数据或者数据地址信息的方式称为,寻址方式,例:,MOV AX, 1234H,在这条指令中有两个操作数,按照在指令中所处的位置,将前者称为,目的操作数,,后者称为,源操作数,。,该指令将数据,1234H,传送到数据寄存器,AX,中,源操作数是“立即”寻址方式,目的操作数是“寄存器”寻址方式。,3.2 8086,寻址方式,指令系统设计了多种操作数的来源,寻找操作数的过程就是操作数的寻址,把寻找操作数的方式叫做(操作数)寻址方式,理解操作数的寻址方式是理解指令功能的前提,操作数采取哪一种寻址方式,影响处理器执行指令的速度和效率,对程序设计也很重要,8086 CPU,指令系统有,133,条指令,通常分为:,数据寻址方式,程序寻址方式,8086,指令是不定长的,一般为,1,6,个字节,数据寻址方式,(一)隐含寻址,指令已经默认对,CPU,中的某个寄存器进行操作,不用在指令中指明所使用的寄存器,即隐含了规定的操作数,这样的寻址方式称为,隐含寻址,。,例:,DAA,指令,只有操作码,无操作数,但已经规定是对,AL,中的内容进行十进制调整,操作数直接写在指令中,在指令译码执行时,可以立即得到,同时把操作数又称作,“立即数”,这种操作数被称为,立即数,imm,可以是,8,位数值,i8,(,00H,FFH,),也可以是,16,位数值,i16,(,0000H,FFFFH,),立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现,例:,MOV AL,5 ;AL,5,操作数,5,采用的就是,;,立即寻址,MOV AX, 0102H,;,AX0102H,(二)立即寻址,演示,立即数寻址方式,(三)寄存器寻址,操作数放在,CPU,内部的寄存器中,在指令中直接指出寄存器的名字。,操作数存放在,CPU,的,内部寄存器,reg,中:,8,位寄存器,reg8,:,AH,、,AL,、,BH,、,BL,、,CH,、,CL,、,DH,、,DL,16,位寄存器,reg16,:,AX,、,BX,、,CX,、,DX,、,SI,、,DI,、,BP,、,SP,4,个段寄存器,seg_reg,:,CS,、,DS,、,SS,、,ES,寄存器名表示其内容(操作数),例:,MOV BX, AX ;BXAX,以上三种寻址方式都是直接在处理器内部获得数据,操作速度快。,演示,寄存器寻址方式,(四)存储器操作数寻址,操作数存放在存储器中时,指令执行时必须通过总线在存储器中存取操作数。,执行单元,EU,根据指令中给出的寻址方式计算出,16,位的偏移量,称为,有效地址,(EA),送到总线接口单元,BIU,,经过加法器生成,20,位实际物理地址,在存储器读写总线周期对存储器进行操作,,一般在表示,EA,时,用,操作数,表示。,由于计算,EA,需要时间,进行总线操作比较慢,因此存储器操作寻址比前三种要慢。,操作数在主存储器中,用主存地址表示,程序设计,,8086/8088,采用逻辑地址表示主存地址,段地址在默认的或用段超越前缀指定的段寄存器中,指令中只需给出操作数的偏移地址(,有效地址,EA,),8086,设计了多种,存储器寻址方式,1,、直接寻址方式,2,、,寄存器,间接寻址方式,3,、寄存器相对寻址方式,4,、基址变址寻址方式,5,、相对基址变址寻址方式,8086,的寄存器和存储器管理,8086,有,8,个,8,位通用寄存器、,8,个,16,位通用寄存器,8086,有,6,个状态标志和,3,个控制标志,8086,将,1MB,存储空间分段管理,有,4,个段寄存器,对应,4,种逻辑段,8086,有,4,个段超越前缀指令,用于明确指定数据所在的逻辑段,1.,通用寄存器,8086,有,8,个通用的,16,位寄存器,(,1,)数据寄存器,:,AX BX CX DX,(,2,)变址寄存器,:,SI DI,(,3,)指针寄存器,:,BP SP,4,个数据寄存器还可以分成高,8,位和低,8,位两个独立的寄存器,这样又形成,8,个通用的,8,位寄存器,AX,:,AH AL,BX,:,BH BL,CX,:,CH CL,DX,:,DH DL,(,1,)数据寄存器,AX,称为,累加器,(,Accumulator,),使用频度最高。用于算术、逻辑运算以及与外设传送信息等,BX,称为,基址寄存器,(,Base address Register,),常用做存放存储器地址,CX,称为,计数器,(,Counter,),作为循环和串操作等指令中的隐含计数器,DX,称为,数据寄存器,(,Data register,),常用来存放双字长数据的高,16,位,或存放外设端口地址,(,2,)变址寄存器,16,位变址寄存器,SI,和,DI,常用于存储器变址寻址方式时提供地址,SI,是源地址寄存器(,Source Index,),DI,是目的地址寄存器(,Destination Index,),在串操作类指令中,,SI,、,DI,还有较特殊的用法,(,3,)指针寄存器,指针寄存器用于寻址内存,堆栈,内的数据,SP,为堆栈指针寄存器(,Stack Pointer,),指示堆栈段栈顶的位置(偏移地址),BP,为基址指针寄存器(,Base Pointer,),表示数据在堆栈段中的基地址,SP,和,BP,寄存器与,SS,段寄存器联合使用以确定堆栈段中的存储单元地址,堆栈(,Stack,)是主存中一个特殊的区域,采用“先进后出”或“后进先出”存取操作方式、而不是随机存取方式。,用,8088/8086,形成的微机系统中,堆栈区域被称为堆栈段,2.,指令指针寄存器,IP,(,Instruction Pointer,)为指令指针寄存器,指示主存储器指令的位置,随着指令的执行,,IP,将自动修改以指示下一条指令所在的存储器位置,IP,寄存器是一个,专用,寄存器,IP,寄存器与,CS,段寄存器联合使用以确定下一条指令的存储单元地址,3.,段寄存器,8086,有,4,个,16,位段寄存器,CS,(代码段)指明,代码段,的起始地址,SS,(堆栈段)指明,堆栈段,的起始地址,DS,(数据段)指明,数据段,的起始地址,ES,(附加段)指明,附加段,的起始地址,每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途,代码段寄存器,CS,(,Code Segment,),代码段用来存放程序的指令序列,代码段寄存器,CS,存放代码段的段地址,指令指针寄存器,IP,指示下条指令的偏移地址,处理器利用,CS:IP,取得下一条要执行的指令,堆栈段寄存器,SS,(,Stack Segment,),堆栈段确定堆栈所在的主存区域,堆栈段寄存器,SS,存放堆栈段的段地址,堆栈指针寄存器,SP,指示堆栈栈顶的偏移地址,处理器利用,SS:SP,操作堆栈顶的数据,数据段寄存器,DS,(,Data Segment,),数据段存放运行程序所用的数据,数据段寄存器,DS,存放数据段的段地址,各种主存寻址方式(有效地址,EA,)得到存储器中操作数的偏移地址,处理器利用,DS:EA,存取数据段中的数据,附加段寄存器,ES,(,Extra Segment,),附加段是附加的数据段,也保存数据:,附加段寄存器,ES,存放附加段的段地址,各种主存寻址方式(有效地址,EA,)得到存储器中操作数的偏移地址,处理器利用,ES:EA,存取附加段中的数据,串操作指令将附加段作为其目的操作数的存放区域,如何分配各个逻辑段,程序的,指令,序列必须安排在代码段,程序使用的,堆栈,一定在堆栈段,程序中的,数据,默认,是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段,数据的存放比较灵活,实际上可以存放在任何一种逻辑段中,段超越前缀指令,没有指明时,一般的数据访问在,DS,段;使用,BP,访问主存,则在,SS,段,默认的情况允许改变,需要使用段超越前缀指令;,8086,指令系统中有,4,个:,CS,:,;代码段超越,使用代码段的数据,SS,:,;堆栈段超越,使用堆栈段的数据,DS,:,;数据段超越,使用数据段的数据,ES,:,;附加段超越,使用附加段的数据,示例,段超越的示例,没有段超越的指令实例:,MOV AX,2000H,;,AXDS:2000H,;从默认的,DS,数据段取出数据,采用段超越前缀的指令实例:,MOV AX,ES:2000H,; AXES:2000H,;,从指定的,ES,附加段取出数据,总结,段寄存器的使用规定,访问存储器的方式,默认,可超越,偏移地址,取指令,CS,无,IP,堆栈操作,SS,无,SP,一般数据访问,DS,CS ES SS,有效地址,EA,BP,基址的寻址方式,SS,CS ES DS,有效地址,EA,串操作的源操作数,DS,CS ES SS,SI,串操作的目的操作数,ES,无,DI,直接寻址,指令中直接给出了操作数的有效地址,例:,MOV SI, 2000H ;SI,(2000H),上例中默认使用数据段,若需使用其他段可使用段超越,明确指示。,例:,MOV SI, ES:2000H,间接寻址,指令中寄存器的值是操作数的有效地址,可间接寻址的寄存器有:,BX,、,BP,、,SI,、,DI,例:,MOV AL, BX ;AL,(BX),演示,演示,直接寻址方式,间接寻址方式,BX,用于间接寻址时,默认段寄存器为,DS,,允许段超越,BP,用于间接寻址时,默认段寄存器为,SS,,允许段超越,SI,用于间接寻址时,默认段寄存器为,DS,,允许段超越,DI,用于间接寻址时,默认段寄存器为,DS,,允许段超越;只有在串操作指令中,默认段寄存器为,ES,,不允许段超越,直接寻址时,默认段寄存器为,DS,,允许段超越,注:,IP,只能在代码段中,(CS),寻址,,SP,只能在堆栈段,(SS),中寻址,相对寻址,基址寻址,操作数的有效地址是一个基址寄存器的内容加上一个,8,位或者,16,位的偏移量,基址寄存器是,BX,或者,BP,。,例:,MOV AX,BX+1000H ;AX,(BX+1000),有时也写成,MOV AX,1000HBX,或,MOV AX,BX1000H,变址寻址,操作数的有效地址是一个变址寄存器的内容加上一个,8,位或者,16,位的偏移量,变址寄存器是,SI,和,DI,。,例:,MOV AX, ARRAYSI ;AX,(SI+ARRAY),C,语言中,常使用全局数组,例如定义了一个全局数组,A3,,具有三个元素,分别为,A0,、,A1,、,A2,,实际上,A,在编译时就转换成具体的在数据段中分配的位置。例如,1000H,,下标,0,、,1,、,2,一般就存放在寄存器中,如,SI,,通过,1000HSI,就可以访问到具体的数据。,演示,相对寻址方式,基址变址寻址,操作数的有效地址是由基址寄存器和变址寄存器的内容相加产生,例:,MOV AX, BX+SI ;AX(BX+SI),相对基址变址寻址,操作数的有效地址是由基址寄存器、变址寄存器和偏移量三者相加产生。,例:,MOV AX, BX+SI+3H,;AX(BX+SI+3H),有时也可写成,MOV AX,3HBXSI,或,MOV AX,3HBX+SI,演示,演示,基址变址寻址方式,相对基址变址寻址方式,数据串寻址,DS:SI,指示源串,,ES:DI,指示目的串,串长度计数用,CX,,并自动修改指针和计数器值,只用于串操作命令。,例:,MOVSB ; (ES:DI),(DS:SI),,,CX=CX-1,,,; SI=SI+1,,,DI=DI+1,(五),I/O,端口寻址,操作数存放在,I/O,端口中,指令执行时必须通过累加器(,AX,或,AL,)实现对端口的访问。,直接端口寻址,指令直接提供,8,位端口的地址。,例:,IN AL, 63H ;AL,(63H),在端口寻址时,地址可以不需要加, ,,当端口地址用一个字节来表示时,可使用直接端口寻址,间接端口寻址,由,DX,寄存器给出,16,位端口地址。,例:,MOV DX, 162H,IN AX, DX,从端口,162H,读取一个字的数据到,AX,中,实质是用,DX,间接表示端口地址。,比较:,MOV AX, DX ;AX,DX,IN AX, DX ;AX,(DX),例:寻址方式对比,设,BX=0158H,DI=10A5H,位移量,=1000H,,,DS=2100H,假设没有使用段前缀,各种寻址方式下,产生的有效地址和物理地址。,1.,直接寻址,MOV AX,1000H,有效地址,= 1000H,物理地址,= 21000H+1000H=22000H,2.,寄存器间接寻址(寄存器为,BX,),MOV AX,BX,有效地址,= 0158H,物理地址,= 21000H+0158H=21158H,3.,寄存器间接寻址(寄存器为,DI,),MOV AX,DI,有效地址,= 10A5H,物理地址,= 21000H+10A5H=220A5H,4.,相对基址寻址,MOV AX,BX 1000H,有效地址,= 0158H+1000H=1158H,物理地址,= 21000H+1158H=22158H,5.,相对变址寻址,MOV AX,1000HDI,有效地址,= 10A5H+1000H=20A5H,物理地址,= 21000H+20A5H=230A5H,6 .,基址变址寻址,MOV AX,BX+DI,有效地址,= 0158H+10A5H=11FDH,物理地址,= 21000H+11FDH=221FDH,7 .,相对基址变址寻址,MOV AX,1000HBXDI,有效地址,= 0158H+10A5H+1000H=21FDH,物理地址,= 21000H+21FDH=231FDH,BX=0158H,DI=10A5H,位移量,=1000H,,,DS=2100H,程序寻址方式,(一)段内直接寻址,(,相对寻址,),转移目标地址是当前,IP,寄存器内容和一个,8,或,16,位的位移量之和,这个位移量是指令代码的一部分,这种寻址方式适用于条件转移及无条件转移指令,但是当它用于条件转移指令时,位移量只允许,8,位。,短跳转:把,IP,的内容加上一个字节的补码数作为新,IP,,往前最多跳,-128,个字节,往后最多跳,127,个字节。,例:,JMP SHORT HELLO,HELLO: MOV AL,03H,近跳转:把,IP,的内容加上两字节的补码数作新,IP,,往前最多跳,-32768,个字节,往后最多跳,32767,个字节。,例:,JMP NEAR PTR HELLO,HELLO: MOV AL,03H,(二)段内间接寻址,这种方式也是在段内,其转移的目标地址是寄存器或存储单元的内容,即将寄存器或存储器操作数的内容赋给,IP,,所以是绝对偏移量。,若目标地址为存储单元内容,则该存储单元本身可由上述与存储器操作数有关的任何寻址方式寻址,只是它里面的内容为新的,IP,值。,这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。即条件转移指令只能使用段内直接寻址的,8,位位移量,而,JMP,和,CALL,指令则可用四种寻址方式中的任何一种。段内间接寻址转移指令的汇编格式可以表示为:,JMP BX JMP WORD PTR BP+TABLE,其中,WORD PTR,为操作符,用以指出其后的寻址方式所取得的地址是一个字的有效地址,也就是说它是一种段内转移。以上两种寻址方式均为段内转移,所以直接把求得的转移的有效地址送到,IP,寄存器就可以了。如果需要计算转移的物理地址,则计算公式应该是: 物理地址,=16d(CS)+EA,其中,EA,即为上述转移的有效地址。,(三)段间直接寻址,直接在指令中给出新的,CS,和,IP,内容,指令中直接提供了转向段地址和偏移地址,故只要用指令中指定的偏取代,IP,寄存器的内容,用指令中指定的段地址取代,CS,寄存器的内容就完成了从一个段到另一个段的转移操作。,例:,C1 SEGMENT,JMP NEXT_PROG,;,4000H:3000H,C1 ENDS,C2 SEGMENT,NEXT_PROC:,C2 ENDS,(四)段间间接寻址,用存储器操作数的内容赋给,CS,和,IP,当前,CS,和,IP,由存储器中连续的两个字更新,低位地址的字更新,IP,,高位地址的字更新,CS,,存放新,IP,和,CS,的存储单元地址由前述存储器操作数的寻址方式决定。,例如:,JMP DWORD PTR INTER+BX,;取,DS,段中偏移为,INTER+BX,处的双字作为新的,CS,和,IP,。,例:,JMP DWORD PTR SP+DI,3.3 8086,指令格式,汇编语言的两种语句格式,执行性语句,执行性语句用于表达处理器指令,(,也称为硬指令,),,汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体,标号,:,硬指令助记符 操作数,操作数,;,注释,说明性语句,说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等,名字 伪指令助记符 参数,参数, ;,注释,指令格式,指令一般由,1,6,个字节组成,具体格式如下:,7,6,5,4,3,2,1,0,OPCODE,D,W,7,6,5,4,3,2,1,0,MOD,REG,R/M,字节,1,字节,2,字节,3,字节,4,LOW DISP,或,DATA,HIGH DISP,或,DATA,字节,5,字节,6,LOW DATA,HIGH DATA,(一)说明,字节,1,OPCODE,:指令操作码,D,:操作数传输方向,(,立即数指令和串操作指令除外,),D=0,,,Reg,为源操作数,D=1,,,Reg,为目的操作数,W,:操作数字节长度,W=0,,字节操作,W=1,,字操作,字节,2,,寻址方式,MOD,:寻址方式字段,00,存储器方式,指令中无偏移量,01,存储器方式,指令中有,8,位偏移量,10,存储器方式,指令中有,16,位偏移量,11,寄存器方式,指令中无偏移量,Reg,:寄存器编码字段,000=AL/AX 100=AH/SP,001=CL/CX 101=CH/BP,010=DL/DX 110=DH/SI,011=BL/BX 111=BH/DI,R/M,:寄存器,/,存储器字段,在,MOD=11,寄存器模式下,,R/M,给出,第二个操作数的寄存器编码。,在,MOD11,存储器模式下,,R/M,给出计算有效地址的方法。,R/M,W=0,W=1,R/M,MOD=00,MOD=01,MOD=10,000,AL,AX,000,BX+SI,BX+SI+D8,BX+SI+D16,001,CL,CX,001,BX+DI,BX+DI+D8,BX+DI+D16,010,DL,DX,010,BP+SI,BP+SI+D8,BP+SI+D16,011,BL,BX,011,BP+DI,BP+DI+D8,BP+DI+D16,100,AH,SP,100,SI,SI+D8,SI+D16,101,CH,BP,101,DI,DI+D8,DI+D16,110,DH,SI,110,直接地址,BP+D8,BP+D16,111,BH,DI,111,BX,BX+D8,BX+D16,MOD=11,MOD,11,有效地址计算方法,字节,3,字节,6,DISP,:存储器操作数地址偏移量,长度由,MOD,字段定义,DATA,:指令中的立即数,例:,MOV AX, BX,指令码为:,8B 07,MOV BX+SI+2000H, 2345H,指令码为:,C7 80 00 20 45 23,MOV AX, BX,指令码为:,89 D8,3.4 8086,指令系统,操作数的符号表示,1,DST,:目的操作数,SRC,:源操作数,TARGET,:循环、转移和调用指令中目的操作数,REG,:寄存器操作数,字节或字,REG8,:,8,位寄存器操作数,字节,REG16,:,16,位寄存器操作数,字,MEM,:存储器操作数,字节或字,MEM8,:,8,位存储器操作数,字节,MEM16,:,16,位存储器操作数,字,MEM32,:,32,位存储器操作数,双字,操作数的符号表示,2,ACC,:累加器,AL,或,AX,SEG_REG,:段寄存器,IMM,:立即操作数,字节或字,IMM8,:立即操作数,字节,IMM16,:立即操作数,字,SHORT_LABEL,:短标号,,8,位偏移量,NEAR_LABLE,:近标号,,16,位地址或偏移量,FAR_LABLE,:远标号,,32,位地址,操作指令分类,8086 CPU,共有,133,条指令,根据操作性质,可分为:,数据传送类指令,算术类指令,逻辑类指令,串操作类指令,转移类指令,控制类指令,数据传送类指令,(一)通用数据传送指令,MOV DST, SRC,操作:,DST,SRC,说明:,DST,和,SRC,的组合关系是:,REG/MEM, IMM,REG/MEM REG,REG/MEM SEG_REG,CS,不能做,目的操作数,不能进行,MEM, MEM,的直接传送,数据位数由寄存器决定或用说明符指出:,字节操作(,8,位)说明符,: BYTE PTR,字操作(,16,位)说明符:,WORD PTR,例:,MOV BYTE PTR 2000H,AL ;DEBUG,下一定加说明符,修改,SS,寄存器时,系统会自动禁止外部中断,直至本条和下条指令执行之后,自动恢复对,SS,寄存器赋值前的中断开放情况,修改,SS,和,SP,一定要连续进行,MOV,指令不改变源操作数,不影响,FLAGS,的状态标志,演示,MOV,指令的功能,MOV,指令立即数传送,mov cl,4,;,cl4,,字节传送,mov dx,0,ffh,;,dx00ffh,,字传送,mov si,200h,;,si0200h,,字传送,mov bvar,0ah,;,字节传送,;假设,bvar,是一个字节变量,定义如下:,bvar,db,0,mov wvar,0bh,;,字传送,;假设,wvar,是一个字变量,定义如下:,wvar,dw,0,明确指令是字节操作还是字操作,以字母开头的常数要有前导,0,MOV,指令寄存器传送,mov ah,al,;,ahal,,字节传送,mov bvar,ch,;,bvarch,,字节传送,mov ax,bx,;,axbx,,字传送,mov ds,ax,;,dsax,,字传送,mov bx,al,;,bxal,,字节传送,寄存器具有明确的字节和字类型,MOV,指令存储器传送,mov al,bx,;,alds:bx,mov dx,bp,;,dxss:bp+0,mov dx,bp+4,;,dxss:bp+4,mov es,si,;,esds:si,不存在存储器向存储器的传送指令,MOV,指令段寄存器传送,mov si,ds,mov ax,ds,;,axds,mov es,ax,;,esaxds,对段寄存器的操作不灵活,MOV,指令也并非任意传送,!,立即数,段寄存器,CS DS ES SS,通用寄存器,AX BX CX DX,BP SP SI DI,存,储,器,非法指令的主要现象:,两个操作数的类型不一致,无法确定是字节量还是字量操作,两个操作数都是存储器,段寄存器的操作有一些限制,MOV,指令传送功能图解,MOV,指令举例,合法指令:,MOV,AX, SI,;AX (SI),MOV,AL, SI ;AL (SI),MOV,DS, AX ;DS ,AX,MOV,AX, DS ;AX ,DS,MOV SI, 2000H ;SI,2000H,MOV,SI, 2000H ;SI (2000H),MOV,SI, SI+6 ;SI (SI+6),MOV,AX,B,X ;AX ,B,X,非法指令:,MOV SI, 2000H,MOV CS, BX,MOV DS, 2000H,非法指令两个操作数类型不一致,在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令,MOV AL, 050AH,;非法指令,,修正:,;,mov ax,050ah,MOV SI, DL,;非法指令,,修正:,;,mov dh,0,;,mov si,dx,非法指令无法确定是字节量还是字量操作,当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明,MOV BX+SI, 55,;非法指令,,修正:,;,mov,byte ptr bx+si, 55,;,byte ptr,说明是字节操作,;,mov,word ptr bx+si, 55,;,word ptr,说明是字操作,非法指令两个操作数都是存储器,8086,指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数),MOV buf2, buf1,;非法指令,,修正:,;假设,buf2,和,buf1,是两个字变量,;,mov ax,buf1,;,mov buf2,ax,;假设,buf2,和,buf1,是两个字节变量,;,mov al,buf1,;,mov buf2,al,非法指令段寄存器的操作有一些限制,8086,指令系统中,能直接对段寄存器操作的指令只有,MOV,等个别传送指令,并且不灵活,MOV DS, ES,;非法指令,,修正:,;,mov ax,es,;,mov ds,ax,MOV DS, 100H,;非法指令,,修正:,;,mov ax,100h,;,mov ds,ax,MOV CS, SI,;非法指令,;指令存在,但不能执行,(二)堆栈操作,堆栈是一个“后进先出,FILO”,(或说“先进后出,FILO”,)的主存区域,位于堆栈段中;,SS,段寄存器,记录其段地址,堆栈只有一个出口,即当前栈顶;用,堆栈指针寄存器,SP,指定,堆栈只有两种基本操作:进栈和出栈,对应两条指令,PUSH,和,POP,图示,堆栈的图示,SS,SP,0000H,(栈顶),存储器,高地址,堆栈段,SP,总是指向栈顶,即最后压入堆栈的信息单元,PUSH SRC,进栈指令,操作:,SP, SP-2,;,先使堆栈指针,SP,减,2,,,(SP+1, SP) SRC,;,把一个字操作数存入,;堆栈顶部,低位字节在较低地址单元,说明:按字进行,没有字节进行的操作命令。,具体指令:,PUSH REG16,PUSH SEG_REG,PUSH MEM16,例:,push ax,push 2000h,演示,PUSH,指令的功能,POP DST,出栈指令,操作:,DST, (SP+1, SP),;,栈顶的一个字传送,;,至指定的目的操作数,SP SP+2,;,堆栈指针,SP,加,2,具体指令,POP REG16,POP SEG_REG,POP MEM16,例:,pop ax,pop wvar,说明,堆栈的存储原则是,LIFO,堆栈操作以字为单位,POP,的操作数不能为,CS,字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节,演示,POP,指令的功能,堆栈的应用,堆栈主要用于子程序调用、中断子程序的现场保护和恢复、参数传递等。,例:保护现场,Fun: PUSH DS,PUSH ES,PUSH AX,PUSH BX,;,子程序处理,POP BX,POP AX,POP ES,POP DS,RET,Memory,DS,ES,AX,BX,SS:SP,初始位置,0100,00FE,00FC,00FA,00F8,SS:SP,(三)交换指令,XCHG,指令,格式:,XCHG DST, SRC,操作:,DST, SRC,说明:,两个操作数中必须至少有一个在寄存器中,可以在寄存器之间、寄存器与存储器之间交换信息,不能在存储器与存储器之间对换数据,不能用于段寄存器,具体指令:,XCHG REG, REG,XCHG REG, MEM,XCHG MEM, REG,例:,XCHG AL,2000H ;AL,(DS:2000H),演示,XCHG,指令的功能,例:数据交换,mov ax,1199h ; ax=1199h,xchg ah,al,; ax=9911h,;等同于,xchg al,ah,mov wvar,5566h ; wvar,是一个字量变量,xchg ax,wvar,; ax=5566h,,,wvar=9911h,;,等同于,xchg wvar,ax,xchg al,byte ptr wvar+1,; ax=5599h,,,wvar=6611h,; “byte ptr wvar+1”,强制为字节量,,;,只取高字节与,AL,类型交换,,;,否则数据类型不匹配,(四),I/O,端口传送指令,IN,输入指令,操作:,AL/AX, (PORT)/(DX),PORT,为,8,位直接端口地址,具体指令:,INAL, PORT,INAX, PORT,INAL, DX,INAX, DX,OUT,输出指令,操作:,(PORT)/(DX),AL/AX,PORT,为,8,位直接端口地址,具体指令:,OUTPORT, AL,OUTPORT, AX,OUTDX, AL,OUTDX, AX,说明,I/O,端口地址有直接寻址和间接寻址(只能通过,DX,)两种寻址方式,对,I/O,端口操作须通过累加器,AX,或,AL,来完成,例:输入输出,IN AL,50H ;,将,50H,端口的字节读入,AL,IN AX,70H ;,将,70H,、,71H,端口的字读入,AX,,,; 70H,端口的字节读入,AL,; 71H,端口的字节读入,AH,OUT 50H, AL ;,将,AL,中的字节送入,50H,端口,OUT 70H, AX ;,将,AX,中的内容送入,70H,、,71H,端口,;,将,AL,中的字节送入,70H,端口,;,将,AH,中的字节送入,71H,端口,(五)换码指令,XLAT,换码指令,将,BX,指定缓冲区中、,AL,指定位移处的一个字节,AL,具体指令:,XLAT,操作:,AL, (BX+AL),换码指令执行前:,在主存建立一个,字节量表格,,内含要转换成的目的代码,表格首地址,存放于,BX,,,AL,存放相对表格首地址的,位移量,换码指令执行后:,将,AL,寄存器的内容转换为,目标代码,例:,MOV AL, 3,MOV BX, offset TABLE,XLAT,TABLE DB,0A,H,DB 0BH,DB 1BH,DB 2CH,DB,3C,H,DB,4D,H,0A,H,0B,H,1B,H,Memory,TABLE,2C,H,3C,H,4D,H,演示,XLAT,指令的功能,(六)有效地址,(EA),传送指令,LEA (Load Effective Address),有效地址送到寄存器,具体指令:,LEA REG16, SRC,操作:,REG16, SRC,的有效地址,说明:该指令将源操作数的有效地址送给寄存器,例:,有效地址的获取,mov BX,400h,mov SI,3ch,lea BX,BX+SI+0f62h,;,BX400H,3CH,0F62H,139EH,例:,MSG db HELLO,LEA BX, MSG ; MOV BX, OFFSET MSG,;,执行后,BX=2000H,MOV DX, MSG; DH=E,DL=H,MOV AL, 0,XLAT ;AL=H,H,E,L,L,O,MSG,wvar dw 4142h,;假设偏移地址为,04H,mov ax,wvar,;内容传送:,AX,4142H,lea si,wvar,;地址传送:,SI,0004H,;等同于,lea si, 0004h,mov cx,si,;内容传送:,CX,4142H,mov di,offset wvar,;等同于,mov di,0004h,;利用操作符,OFFSET,获取变量的有效地址,mov dx,di,;内容传送:,DX,4142H,LDS (Load DS With Pointer),指针送寄存器和,DS,具体指令:,LDS REG16, MEM32,操作:,REG16, (MEM32),,,DS (MEM32+2),说明:将源操作数的,4,个字节,分别传送到指定的寄存器和,DS,中,例:,VECT dw 1234H,dw 0ABCDH,LDS BX, VECT,执行后:,BX=1234H, DS=0ABCDH,34H,12H,CDH,ABH,VECT,LES (Load ES With Pointer),指针送寄存器和,ES,具体指令:,LES REG16, MEM32,操作:,REG16, (MEM32),,,ES (MEM32+2),说明:将源操作数的,4,个字节,分别传送到指定的寄存器和,ES,中,(七)标志寄存器传送指令,LAHF,(Load AH with Flags),标志送,AH,格式:,LAHF,操作:,AH,标志寄存器的,低八位,SAHF,(Store AH into Flags) AH,送标志寄存器,格式:,SAHF,操作:标志寄存器的,低八位,AH,D7,D6,D4,D2,D0,PUSHF (Push the Flags),标志寄存器进栈,格式:,PUSHF,操作:,SP,SP-2,(SP+1,SP)FLAG,栈以字为单位,POPF (Pop the Flags),标志寄存器出栈,格式:,POPF,操作:,FLAG,(,SP+1,SP,),,,SPSP+2,说明:传送类指令除了,SAHF,和,POPF,外都不影响标志寄存器内容,算术类指令,算术运算类指令用来执行二进制的算术运算:,加减乘除,。,这类指令会根据运算结果影响,状态标志,,有时要利用某些标志才能得到正确的结果,故须留心运算后的状态标志,算术运算指令涉及两种类型的数据:无符号数和有符号数,8,位无符号数:,0 255,8,位,有符号数,:,-128 +127,加、减法无符号数和有符号数采用同一套指令;,乘法、除法无符号数和有符号数采用两套指令;,8,位无符号数,0-00H, 127-7FH; 128-80H; 255-FFH,8,位有符号数,0-00H, +127-7FH; -128-80H; -1-FFH,16,位无符号数,0-0000H, 32767-7FFFH;,32768-8000H; 65535-FFFFH,16,位有符号数,0-0000H, +32767-7FFFH;,-32768-8000H; -1-FFFFH,返回,无符号数和有符号数采用同一套加、减法指令条件:,参与运算的加数、被加数、减数、被减数必须同为无符号数或有符号数;,要用不同的方法检测无符号数或有符号数运算是否溢出。,结论:,如果,CF=1,,无符号数运算产生溢出;,如果,OF=1,,有符号数运算产生溢出;,例:,0000 0101 b (,无符号数:,5,,有符号数:,+5),+ 0000 1010 b (,无符号数:,10,,有符号数:,+10),0000 1111 b (,无符号数:,15,,有符号数:,+15),CF=0;OF=0,例:,0000 1000 b (,无符号数:,8,,有符号数:,+8),+ 1111 1011 b (,无符号数:,251,,有符号数:,-5),1 0000 0011 b (,无符号数:,3,,有符号数:,+3),CF=1;OF=0,。,。,例:,0000 1000 b (,无符号数:,8,,有符号数:,+8),+ 0111 1100 b (,无符号数:,124,,有符号数:,+124),1000 0100 b (,无符号数:,132,,有符号数:,-124),CF=0;OF=1,。,运算对标志状态的影响:,如果无符号数运算产生溢出,,CF=1,;,如果有符号数运算产生溢出,,OF=1,;,如果运算结果最高位为,1,,,SF=1,;,如果运算结果为,0,,,ZF=1,;,如果运算结果中有偶数个,1,,,PF=1,;,(一)加法指令,ADD,加法,格式:,ADD DST, SRC,操作:,DST, SRC + DST,说明:,ADD,指令使目的操作数加上源操作数,和的结果送到目的操作数,具体指令,ADD,REG,REG,ADD,REG,MEM,ADD,MEM,REG,ADD,REG,IMM,ADD,MEM,IMM,例:,mov,ax,7348h,;,AX,7348H,add,al,27h,;,AL,48H,27H,6FH,,,AX,736FH,;,OF,0,,,SF,0,,,ZF,0,,,PF,1,,,CF,0,add,ax,3fffh,;,AX,736FH,3FFFH,B36EH,;,OF,1,,,SF,1,,,ZF,0,,,PF,0,,,CF,0,ADC (Add With Carry),带进位加法,格式:,ADC DST, SRC,操作:,DST, SRC + DST,+ CF,说明:,ADC,指令除完成,ADD,加法运算外,还要加上进位,CF,,结果送到目的操作数,具体指令,AD,C,REG,REG,AD,C,REG,MEM,AD,C,MEM,REG,AD,C,REG,IMM,AD,C,MEM,IMM,INC (Increment),加,1,格式:,INC DST,操作:,DST, DST,+ 1,具体指令,INC,REG,INC,MEM,说明:,INC,指令,是单操作数指令,INC,指令,影响,除,CF,以外,的所有状态标志,加法类指令影响,FLAG,的状态标志,(二)减法指令,SUB (Subtract),减法,格式:,SUB DST, SRC,操作:,DST,DST,SRC,说明:,SUB,指令使目的操作数减去源操作数,差的结果送到目的操作数,源和目的操作数不能同时为存储器操作数,立即数不能作为目的操作数,具体指令,SUB,REG,REG,SUB,REG,MEM,SUB,MEM,REG,SUB,REG,IMM,SUB,MEM,IMM,例:,mov,ax,0b36eh,sub,ah,0f0h,;,AH,B3H,F0H,C3H,,,AX,C36EH,;,OF,0,,,SF,1,,,ZF,0,,,PF,1,,,CF,1,mov,word ptr200h,0ef00h,;,200H,EF00H,,标志不变,sub,200h,ax,;,200H,EF00H,C36EH,2B92H,;,OF,0,,,SF,0,,,ZF,0,,,PF,0,,,CF,0,sub,si,si,;,SI,0,;,OF,0,,,SF,0,,,ZF,1,,,PF,1,,,CF,0,SBB (Subtract With Borrow),带借位减法,格式:,SBB DST, SRC,操作:,DST,DST,SRC CF,说明:,SBB,指令除完成,SUB,减法运算外,还要减去借位,CF,,结果送到目的操作数,具体指令,SBB,REG,REG,SBB,REG,MEM,SBB,MEM,REG,SBB,REG,IMM,SBB,MEM,IMM,例:无符号双字加法和减法,mov ax,7856h;AX,7856H,mov dx,8234h;DX,8234H,add ax,8998h;AX,01EEH,,,CF,1,adc dx,1234h;DX,9469H,,,CF,0,sub ax,4491h;AX,BD5DH,,,CF,1,sbb dx,8000h;DX,1468H,,,CF,0,DX.AX,8234 7856H,1234 8998H,8000 4491H,1468 BD5DH,DEC (Decrement),减,1,格式:,DEC DST,操作:,DST, DST, 1,具体指令,DEC,REG,DEC,MEM,说明:,DEC,指令影响,除,CF,以外,的所有状态标志,inc si,;,sisi,1,dec byte ptr si,;,sisi,1,NEG,求补运算,格式:,NEG DST,操作:,DST,模,DST,说明:,字节的模为,100H,,字的模为,10000H,求补运算也可以表达成:,将操作数按位取反后加,1,NEG,指令对标志的影响与用零作减法的,SUB,指令一样,通常使,CF=1,除非操作数为,0,,,CF=0,NEG,指令也是一个单操作数指令,具体指令,NEG,REG,NEG,MEM,例: 求补运算,mov ax,0ff64h,neg al,;,AL,0,64H,9CH,,,AX,FF9CH,;,OF,0, SF,1,,,ZF,0,,,PF,1,,,CF,1,sub al,9dh,;,AL,9CH,9DH,FFH,,,AX,FFFFH,;,OF,0,,,SF,1,,,ZF,0,,,PF,1,,,CF,1,neg ax,;,AX,0,FFFFH,0001H,;,OF,0,,,SF,0,,,ZF,0,,,PF,0,,,CF,1,dec al,;,AL,01H,1,0,,,AX,0000H,;,OF,0,,,SF,0,,,ZF,1,,,PF,1,,,CF,1,neg ax,;,AX,0,0,0,;,OF,0,,,SF,0,,,ZF,1,,,PF,1,,,CF,0,SUB/SBB,对标志位,(CF/OF/ZF/SF),的影响,CF=1,表示无符号数减法溢出。,OF=1,表示带符号数减法溢出。,NEG,指令对,CF/OF,的影响:,CF,:操作数为,0,时,求补的结果使,CF=0,,否则,CF=1,。,OF,:字节运算对,-128,求补或字运算对,-32768,求补时,OF=1,,,否则,OF=0,。,1,被减数的最高有效位有向高位的借位,0,否则,CF,=,1,两个操作数符号相反,而结果的符号与减数相同,0,否则,OF,=,CMP,比较指令,格式:,CMP DST,,,SRC,操作:,DST ,S,RC,具体指令,CMP,REG, REG,CMP,REG, MEM,CMP,MEM,REG,CMP,REG,IMM,CMP,MEM,IMM,说明:做减法操作,仅影响标志位,不保存结果,ZF=1,两数相等;,两个无符号数比较,CF=1,被减
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 等级考试


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!