计算机三级偏软包过之三级汇编.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 三级 偏软包 汇编
- 资源描述:
-
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,1/131,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1/131,1/131,8086,寄存器组,8086,有,14,个寄存器,它们都是,16,位的,这些寄存器按功能可为,6,类:,(,1,)通用寄存器(,4,个),(,2,)地址指针寄存器(,2,个),(,3,)变址寄存器(,2,个),(,4,)段寄存器(,4,个),(,5,)指令指针寄存器(,1,个),(,6,)标志寄存器(,1,个),1/131,8086,寄存器组,1/131,1),、通用寄存器,(,1,)数据寄存器(,AX,、,BX,、,CX,、,DX,),数据寄存器用来保存操作数或运算结果等信息。,AX,寄存器称为累加器,。使用频度最高,用于所有的输入,/,输出操作。某些字串操作以及算术运算,如乘法、除法,某些翻译指令也使用,AX,寄存器。,BX,寄存器称为基址寄存器,。常用于存放存储器地址。用于扩展寻址,起变址作用。,CX,寄存器称为计数器,。一般作为循环或串操作等指令中的隐含计数器。,DX,寄存器称为数据寄存器,。常用于字乘法和除法中存放双字数据的高,16,位,或用来存放外设端口地址。,1/131,(,3,)地址指针寄存器,A,、,SP,寄存器,堆栈指针寄存器。在访问堆栈时,段地址在,SS,中,,SP,则表示偏移地址。,B,、,BP,寄存器,基址指针寄存器。在通过堆栈传递数据和地址时,段地址在,SS,,,BP,存放要传递的数据和地址的偏移地址。也可作为通用寄存器用。,当,SI,、,DI,、,BP,不用作变址寄存器和指针寄存器时,也可以作,16,位数据寄存器使用,用来保存操作数和运算结果。,1/131,2),、段寄存器,8086,设立了个,16,位的段寄存器用来保存,4,个当前段的起始基址(省略了地址的低位,即每段从内存段界开始,低位认为是),分别称为代码段寄存器,CS,、数据段寄存器,DS,、堆栈段寄存器,SS,和附加数据段寄存器,ES,。,(,1,),CS,寄存器,代码段寄存器。它含有当前执行程序所在段的首地址,这个段寄存器内容左移位(即乘)再加上指令指针寄存器(,IP,)的内容,就是下一条要执行的指令地址。,(,2,),DS,寄存器,数据段寄存器。它含有当前数据段的首地址,通常数据段用来存放数据和变量,数据段寄存器内容加上指令中的偏移值,即为对数据段指定单元操作的地址。,1/131,(,3,),SS,寄存器,堆栈段寄存器。它保存当前堆栈的首地址。堆栈是存储器中设置的一种数据结构,用于存放数据和地址,有,先进后出,的特点,在调用子程序时,保留返回主程序的地址,也用来保留进入子程序将要改变其值的各寄存器的内容等。,(,4,),ES,寄存器,附加段寄存器。附加段是在进行字符串操作时,作为目的段地址使用,这个附加段是附加的一个数据段,如用,DS,作为数据段段地址,,SI,为源地址偏移,将一个字串从源传送到目的区去,这个目的区可设在附加段中,即,ES,装附加段地址,,DI,寄存目的区地址的偏移。如果要使用附加段,用户程序必须对,ES,初始化,即设置值,否则,ES,DS,,即数据段和附加数据段重合。,1/131,4),、标志寄存器,程序有时需根据上次指令执行的结果,判断以决定执行的方向,为此,8086,设有一个很重要的,16,位标志寄存器,它包含,9,个标志位,共占用,2,个字节。它们主要用于保存一条指令执行后,,CPU,所处状态信息及运算结果的特征,其中六位作为指令执行结果的条件标志,三位用作控制标志。,这些标志位在标志寄存器中的位置如下:,1/131,A,条件标志,(,1,)符号标志,SF,第位。对带符号的数操作时,若产生一个负的结果,则,SF,1,,否则为,0,,当算术、逻辑、移位或循环移位操作时,都将影响此位。,(,2,)零标志,ZF,第,6,位。当运算结果为零时,,ZF,1,,结果非零,则,ZF,0,。,(,3,)溢出标志,OF,第,11,位。当带符号数算术运算时,商位溢出,则,OF,1,,否则为,0,,它用来作错误指示标志。,1/131,B,状态控制标志,(,1,)方向标志,DF,第,10,位。可用指令预置。当,DF,0,时,执行串操作指令后,变址寄存器自动递增,当,DF,1,时,则动递减。即该标志可控制地址朝增加的方向或减少的方向改变。,(,2,)中断允许标志,IF,第,9,位。当用指令置为,1,时,则允许,8088,响应中断请求,若为,0,时,则禁止响应中断请求。,(,3,)跟踪标志,TF,第,8,位。当置为,1,时,则,8088,处于单步执行指令方式,每执行一条指令,自产动产生一个类型为,1,的中断。,1/131,右图表明了存储器中部分存储单元存放信息情况。从图,1.4,可看到,地址为,34560H,的字节的存储单元中的内容是,34H,,而地址为,34561H,的字节存储单元中的内容是,12H,。,1/131,2,、物理地址的形成,8086CPU,的地址线是,20,位的,这样最大可寻址空间应为,2,20,=1MB,,其物理地址范围从,00000H,FFFFFH,。而,8086CPU,寄存器都是,16,位的。那么,这,1MB,空间如何用,16,位寄存器表达呢?,根据要求可把,1M,字节地址空间划成若干逻辑段。每个逻辑段必须满足两个条件:一是逻辑段的起始地址(简称段首址)必须是,16,的倍数,这就使段首址的最低,4,位总为,0,,高,16,位正好装入一个段寄存器中;二是逻辑段的最大长度为,64K,,这样某单元在段内的相对位置可用,16,位段内偏移地址表示。,由于,CPU,只设置了,4,个段寄存器,因此,,CPU,在当前某一时刻最多只能访问,4,个段,即当前代码段、当前堆栈段、当前数据段和当前附加数据段,它们的首址分别由,CS,、,SS,、,DS,、,ES,给出。,1/131,3),、数据和附加数据段,数据段是程序中所使用的数据存储区,分为数据段和附加数据段,其段首址分别由数据段寄存器,DS,与附加数据段寄存器,ES,确定。当访问数据段中某一变量时,其物理地址为:,PA,(,DS,或,ES,),左移,4,位,该变量的偏移地址,4),、段的分配,存储器分段方式并非把,1M,字节划分成,16,个,64K,字节的段使用,而是指,CPU,每次只能访问,4,个段。这,4,个段可以分配在,1M,字节内的任何地方,它们可以是完全重叠的,也可以是部分重叠或不重叠的,而且可以按任意顺序存放在主存的可寻址空间中。,1/131,访问存储器的方式,默认的,段寄存器,可跨越的,段寄存器,偏移地址,取指令,CS,无,IP,堆栈操作,SS,无,SP,一般数据访问,DS CS ES SS,有效地址,EA,BP,作为基址的寻址,SS CS DS ES BP,串操作的源操作数,DS CS ES SS SI,串操作的目的操作数,ES,无,DI,段 寄 存 器 的 使 用 规 定,1/131,跨段前缀示例。,MOVAX,,,DS,:,BP,MOVCX,,,SS,:,SI,该例中,,DS,:,,SS,:均为跨段前缀,此时默认状态无效,操作数的物理地址,PA,由段寄存器内容左移,4,位加偏移,EA,形成。上述,2,条指令的源操作数物理地址分别为:,PA1 =,(,DS,)左移,4,位,+BP,PA2 =,(,SS,)左移,4,位,+SI,1/131,汇编语言指令格式如下:,标号场:,操作场,操作数场,;注释场,其中:,:表示该项内容可要可不要。,标号场,:表示该指令的在代码段中的偏移地址,可以不要,标号后用,“,:,”,与操作场连接。,操作场,:表示该操作的功能,不能省略。,操作数场,:表示该指令所需的操作数,各操作数之间用,“,,,”,隔开。当操作数为两个时,一般地前面的称为目的操作数,DST,,后面的称为源操作数,SRC,。,;注释场,:对该指令进行说明,起到帮助读者阅读理解的作用,不参加指令的执行。,例如,:,NEXT1:MOV AX,0,;,MOVE 0 TO AX,1/131,8086/8088,寻 址 方 式,计算机指令寻找操作数存放地址的方式称为指令的,寻址方式,。,数据类型操作数分为:,(1),立即数操作数,:指令中所需的操作数为立即数,即我们常说的常量或常数。,(2),寄存器操作数,:指令中所需的操作数放在指定的寄存器中。,(3),存储器操作数,:指令中所需的操作数放在指定的存储器中的存储单元中,而指令中的操作数提供存储单元的偏移地址。,(4),I/O,操作数,:指令中所需的操作数来源于,I/O,端口。,1/131,数据传送指令,算术指令,逻辑指令,串处理指令,控制转移指令,处理机控制与杂项操作指令,8086/8088,指令系统,8086,的指令系统可以分为,6,组:,1/131,一、数据传送指令:,通用数据传送指令,MOV,、,PUSH,、,POP,、,XCHG,累加器专用传送指令,IN,、,OUT,、,XLAT,地址传送指令,LEA,、,LDS,、,LES,标志寄存器传送指令,LAHF,、,SAHF,、,PUSHF,、,POPF,类型转换指令,CBW,、,CWD,1/131,(1),传送指令,:,MOV DST,SRC,执行操作:,(DST),(,SRC),注意,:,*,DST,不能是,CS,*,DST,、,SRC,不能同时为段寄存器,MOV DS,ES,*,立即数不能直接送段寄存器,MOV DS,2000H,*,DST,不能是立即数,*,DST,、,SRC,不能同时为存储器寻址,1,、,通用数据传送指令,1/131,例:假设,(AX)=2107 H,执行,PUSH AX,*,*,*,*,(,SP,),PUSH AX,执行前,(,SP,),*,*,*,*,07H,21H,低地址,高地址,PUSH AX,执行后,进栈方向,1/131,(,SP,),*,*,*,*,07H,21H,POP BX,执行,前,(,SP,),*,*,*,*,07H,21H,低地址,高地址,POP BX,执行后,(BX)=2107H,例:,POP BX,出栈方向,1/131,(4),交换指令,:,XCHG OPR1,OPR2,执行操作:,(OPR1),(OPR2),注意,:,*,不影响标志位,*,不允许使用段寄存器,例:,XCHG BX,BP+SI,XCHG AL,BH,1/131,2,、,累加器专用传送指令,(只限使用,AX,或,AL,),(1),输入指令,(,I/O,CPU,),长格式:,IN AL,PORT,(字节),IN AX,PORT,(字),执行操作:,(AL),(PORT),(字节),(AX),(PORT+1,PORT),(字),短格式:,IN AL,DX,(字节),IN AX,DX,(字),执行操作:,(AL),(,DX),(字节),(AX),(,DX)+1,(DX),(字),1/131,(2),输出指令,(,CPU,I/O,),长格式:,OUT PORT,AL,(字节),OUT PORT,AX,(字),执行操作:,(PORT),(AL),(字节),(PORT+1,PORT),(AX),(字),短格式:,OUT DX,AL,(字节),OUT DX,AX,(字),执行操作:,(DX),(AL),(字节),(DX)+1,(DX),(AX),(字),1/131,注意,:,*,不影响标志位,*,前,256,个端口号,00HFFH,可直接在指令中指定(长格式),*,如果,端口号,256,,,端口号,DX,(短格式),例:测试某状态寄存器(端口号,27H,)的第,2,位是否为,1,IN AL,27H,TEST AL,00000100B,JNZ ERROR ;,若,第2位为1,,转,ERROR,处理,1/131,(BX),30 H F0040,31 H F0041,(AL)=,3,32 H F0042,33 H,F0043,TABLE,(DS)=F000H,(3),换码指令,:,XLAT,或,XLAT OPR,执行操作:,(AL),(BX)+(AL),例:,MOV BX,OFFSET TABLE ;(BX)=0040H,MOV AL,3,XLAT TABLE,指令执行后,(AL)=33H,注意,:,*,不影响标志位,*,字节表格,(,长度不超过,256),首地址,(BX),*,需转换代码,(,AL),1/131,3,、,地址传送指令,(1),有效地址送寄存器指令:,LEA REG,SRC,执行操作:,(REG),SRC,(2),指针送寄存器和,DS,指令:,LDS REG,SRC,执行操作:,(REG),(SRC),(DS),(SRC+2),4,个相继字节,寄存器(通常是,SI,)、,DS,(3),指针送寄存器和,ES,指令:,LES REG,SRC,执行操作:,(REG),(SRC),(ES),(SRC+2),4,个相继字节,寄存器(通常是,DI,)、,ES,1/131,4,、,标志寄存器传送指令,(1),标志送,AH,指令:,LAHF,执行操作:,(AH),(PSW,的低字节,),(2)AH,送标志寄存器指令:,SAHF,执行操作:,(PSW,的低字节,),(AH),(3),标志进栈指令:,PUSHF,执行操作:,(SP),(SP)-2,(SP)+1,(SP),(PSW),(4),标志出栈,指令:,POPF,执行操作:,(PSW),(SP)+1,(SP),(SP),(SP)+2,*,影响标志位,1/131,5,、,类型转换指令,(1)CBW,AL,AX,执行操作:若,(AL),的最高有效位为,0,,则,(AH)=00H,若,(AL),的最高有效位为,1,,则,(AH)=0FFH,(2)CWD,AX,(DX,AX),执行操作:若,(AX),的最高有效位为,0,,则,(DX)=0000H,若,(AX),的最高有效位为,1,,则,(DX)=0FFFFH,注意,:,*,无操作数指令,*,隐含对,AL,或,AX,进行符号扩展,*,不影响,条件标志位,1/131,二、算术指令:,加法指令,ADD,、,ADC,、,INC,减法指令,SUB,、,SBB,、,DEC,、,NEG,、,CMP,乘法指令,MUL,、,IMUL,除法指令,DIV,、,IDIV,十进制调整指令,DAA,、,DAS,、,AAA,、,AAS,、,AAM,、,AAD,1/131,1,、,加法指令,(1),加法指令:,ADD DST,SRC,执行操作:,(DST),(SRC)+(DST),(2),带进位加法指令:,ADC DST,SRC,执行操作:,(DST),(SRC)+(DST)+CF,(3),加,1,指令:,INC OPR,执行操作:,(OPR),(OPR)+1,注意,:,*,除,INC,指令,不影响,CF,标志外,均对条件标志位有影响,1/131,加法指令对,条件标志位,(,CF/OF/ZF/SF,)的影响:,CF,位表示,无符号数,相加的溢出。,OF,位表示,带符号数,相加的溢出。,1,结果为负,0,否则,SF=,1,结果为,0,0,否则,ZF=,1,和的最高有效位,有,向高位的进位,0,否则,CF,=,1,两个操作数符号相同,而结果符号与之相反,0,否则,OF,=,1/131,n=8bit,带符号数,(-128127),无符号数,(0255),0 0 0 0 0 1 0 0,+0 0 0 0 1 0 1 1,0 0 0 0 1 1 1 1,带:,(+4)+(+11)=+15 OF=0,无:,4+11=15 CF=0,带符号数和无符号数都不溢出,0 0 0 0 1 0 0 1,+0 1 1 1 1 1 0 0,1 0 0 0 0 1 0 1,带,:(+9)+(+124)=,-123 OF=1,无,:9+124=133 CF=0,带符号数溢出,无符号数溢出,0 0 0 0 0 1 1 1,+1 1 1 1 1 0 1 1,0 0 0 0 0 0 1 0,带:,(+7)+(-5)=+2 OF=0,无:,7+251=,2 CF=1,带符号数和无符号数都溢出,1 0 0 0 0 1 1 1,+1 1 1 1 0 1 0 1,0 1 1 1 1 1 0 0,带:,(-121)+(-11)=,+124 OF=1,无:,135+245=,124 CF=1,1/131,2,、,减法指令,(1),减法指令:,SUB DST,SRC,执行操作:,(DST),(DST)-(SRC),(2),带借位减法指令,:,SBB DST,SRC,执行操作:,(DST),(DST)-(SRC)-CF,(3),减,1,指令:,DEC OPR,执行操作:,(OPR),(OPR)-1,1/131,(4),求补指令:,NEG OPR,执行操作:,(OPR),-(OPR),(5),比较指令:,CMP OPR1,OPR2,执行操作:,(OPR1)-(OPR2),注意,:,*,除,DEC,指令,不影响,CF,标志外,均对条,件标志位有影响。,1/131,减法指令对条件标志位(,CF/OF/ZF/SF,)的影响:,CF,位表示,无符号数,减法的溢出。,OF,位表示,带符号数,减法的溢出。,1,被减数的最高有效位,有,向高位的借位,0,否则,CF,=,1,两个操作数符号相反,而结果的符号与减数相同,0,否则,OF,=,1,减法转换为加法运算时,无,进位,0,否则,CF,=,或,1/131,NEG,指令对,CF/OF,的影响:,0,操作数为,0,1,否则,CF,=,1,操作数为,-128,(字节运算)或,操作数为,-32768,(字运算),0,否则,OF,=,1/131,3,、,乘法指令,(1),无符号数乘法指令:,MUL SRC,执行操作:,字节操作数,(AX),(AL)*(SRC),字操作数,(DX,AX),(AX)*(SRC),(2),带符号数乘法指令:,IMUL SRC,执行操作:同上,注意,:,*,AL(AX),为隐含的乘数寄存器。,*,AX(DX,AX),为隐含的乘积寄存器。,*,SRC,不能为立即数。,*,除,CF,和,OF,外,对条件标志位,无定义,。,1/131,乘法指令对,CF/OF,的影响:,00,乘积的高一半为零,11,否则,MUL,指令,:CF/OF=,00,乘积的高一半是,低一半的符号扩展,11,否则,IMUL,指令,:CF/OF=,1/131,4,、除法指令,无符号数除法指令:,DIV SRC,执行操作:,字节操作,(AL),(AX)/(SRC),的商,(AH),(AX)/(SRC),的余数,字操作,(AX),(DX,AX)/(SRC),的商,(DX),(DX,AX)/(SRC),的余数,带符号数除法指令:,IDIV SRC,注意,:,*,AX(DX,AX),为隐含的被除数寄存器。,*,AL(AX),为隐含的商寄存器。,*,AH(DX),为隐含的余数寄存器。,*,SRC,不能为立即数。,*,对所有条件标志位均,无定义,。,1/131,5,、,十进制调整指令,BCD,码,:用二进制编码的十进制数,,又称,二,-,十进制数,压缩的,BCD,码:用,4,位二进制数表示,1,位十进制数,例:,(59),10,(0101 1001),BCD,非压缩的,BCD,码:用,8,位二进制数表示,1,位十进制数,例:,(59),10,(0000 0101 0000 1001),BCD,数字的,ASCII,码是一种,非压缩的,BCD,码,DIGIT ASCII BCD,030H0011 0000,131H0011 0001,939H0011 1001,1/131,例:写出,(3590),10,的压缩,BCD,码和非压缩,BCD,码,并分别,把它们存入数据区,PAKED,和,UNPAK,压缩,BCD,:,(3590),10,(0011 0101 1001 0000),BCD,非压缩,BCD,:,(3590),10,(00000 00001),BCD,PAKED,90H,35H,UNPAK,00H,09H,05H,03H,1/131,问题的提出:,十进制调整指令,19,压缩,BCD:0001 1001,27,0010 0001,+110,+08 +0000 1000,(0010 0111),BCD,AF=1,1/131,A,、压缩,BCD,码调整指令:,加法的压缩,BCD,码调整指令,DAA,减法的压缩,BCD,码调整指令,DAS,1/131,(,1,)加法的十进制调整指令,DAA,调整指令:,DAA,执行操作:,如果,AL,寄存器中低,4,位大于,9,或辅助进位(,AF,),=1,,则(,AL,),=,(,AL,),+6,且(,AF,),=1,;,如果(,AL,),=0A0H,或(,CF,),=1,,则(,AL,),=,(,AL,),+60H,且(,CF,),=1,。同时,,SF,、,ZF,、,PF,均有影响。,例:,压缩,BCD,码的加法运算。,MOV AL,,,68H,;(,AL,),=68H,,表示压缩,BCD,码,68,MOV BL,,,28H,;(,BL,),=28H,,表示压缩,BCD,码,28,ADD AL,,,BL,;二进制加法:(,AL,),=68H+28H=90H,DAA,;十进制调整:(,AL,),=96H,;实现压缩,BCD,码加法:,68+28=96,1/131,(,2,)减法的十进制调整指令,DAS,调整指令:,DAS,执行操作:,如果(,AF,),=1,或,AL,寄存器中低,4,位大于,9,,则(,AL,),=,(,AL,),6,且(,AF,),=1,;,如果(,AL,),=0A0H,或(,CF,),=1,,则(,AL,),=,(,AL,),60H,且(,CF,),=1,。同时,SF,、,ZF,、,PF,均受影响。,例:,压缩,BCD,码的减法运算。,MOV AL,,,68H,;,(,AL,),=68H,,表示压缩,BCD,码,68,MOV BL,,,29H,;,(,BL,),=29H,,表示压缩,BCD,码,29,SUB AL,,,BL,;二进制减法:,(,AL,),=68H,29H=03FH,DAS,;十进制调整:,(,AL,),=39H,;实现压缩,BCD,码减法:,68,29=39,1/131,B,、非压缩,BCD,码调整指令,:,加法的非压缩,BCD,码调整指令,AAA,减法的非压缩,BCD,码调整指令,AAS,乘法的非压缩,BCD,码调整指令,AAM,除法的非压缩,BCD,码调整指令,AAD,1/131,(,1,)加法的非压缩,BCD,码调整指令,AAA,语句格式,:,AAA,指令功能:,如果,AL,的低,4,位大于,9,或(,AF,),=1,,则:,(,AL,),=,(,AL,),+6,(,AH,),=,(,AH,),+1,(,AF,),=,(,CF,),=1,且,AL,高,4,位清零。,否则:,(,CF,),=,(,AF,),=0,AL,高,4,位清零。,1/131,(,2,)减法的非压缩,BCD,码调整指令,AAS,语句格式:,AAS,指令功能:,如果,AL,的低,4,位大于,9,或(,AF,),=1,,则:,(,AL,),=,(,AL,),6,(,AH,),=,(,AH,),1,(,AF,),=,(,CF,),=1,AL,高,4,位清零。,否则:(,CF,),=,(,AF,),=0,AL,高,4,位清零。,其他标志位,OF,、,PF,、,SF,、,ZF,不确定。,1/131,(,3,)乘法的非压缩,BCD,码调整指令,AAM,语句格式,:,AAM,指令功能,:,被调整的乘积在,AX,中,对,AL,按,10,取模,则:,(,AL,),0AHAH,(商):,AL,(余数),其中,AH,为商,,AL,为余数,标志位,AF,、,CF,、,OF,、,PF,、,SF,、,ZF,受影响。,1/131,(,4,)除法的非压缩,BCD,码调整指令,AAD,语句格式,:,AAD,指令功能,:,除法运算前,先调整被除数,AX,内容,使:,(,AL,),=,(,AL,),+,(,AH,)*,0AH,(,AH,),=0,即把非压缩型十进制数变成二进制数。,1/131,三、逻辑指令:,逻辑运算指令,AND,、,OR,、,NOT,、,XOR,、,TEST,移位指令,SHL,、,SHR,、,SAL,、,SAR,、,ROL,、,ROR,、,RCL,、,RCR,1/131,逻辑非指令:,NOT OPR,*OPR,不能为立即数,执行操作:,(OPR),(OPR),*,不影响标志位,逻辑与指令:,AND DST,SRC,执行操作:,(DST),(DST),(SRC),逻辑或指令:,OR DST,SRC,执行操作:,(DST),(DST),(SRC),异或指令:,XOR DST,SRC,执行操作:,(DST),(DST),(SRC),测试指令:,TEST OPR1,OPR2,执行操作:,(OPR1),(OPR2),CF OF SF ZF PF AF,0 0 *,无定义,根据运算结果设置,1,、,逻辑运算指令,1/131,例:屏蔽,AL,的第,0,、,1,两位,AND AL,0FCH,例:置,AL,的第,5,位为,1,OR AL,20H,例:使,AL,的第,0,、,1,位变反,XOR AL,3,例:测试某些位是,0,是,1,TEST AL,1,JZ EVEN,*,OR 0 0 1 0 0 0 0 0,*1*,*,*,XOR 0 0 0 0 0 0 1 1,*,*,*,AND 1 1 1 1 1 1 0 0,*0 0,1/131,2,、,移位指令,逻辑左移,SHL OPR,CNT,逻辑右移,SHR OPR,CNT,算术左移,SAL OPR,CNT,(同逻辑左移),算术右移,SAR OPR,CNT,CF 0,0 CF,CF,1/131,循环左移,ROL OPR,CNT,循环右移,ROR OPR,CNT,带进位循环左移,RCL OPR,CNT,带进位循环右移,RCR OPR,CNT,CF,CF,CF,CF,1/131,注意,:,*,OPR,可用除立即数以外的任何寻址方式,*,CNT=1,,,SHL OPR,1,CNT1,,,MOV CL,CNT,SHL OPR,CL ;,以,SHL,为例,*,条件标志位:,CF=,移入的数值,1,CNT=1,时,最高有效位的值发生变化,0,CNT=1,时,最高有效位的值不变,移位指令:,SF,、,ZF,、,PF,根据移位结果设置,,AF,无定义,循环移位指令:,不影响,SF,、,ZF,、,PF,、,AF,OF=,1/131,四、串处理指令:,设置方向标志指令,CLD,、,STD,串处理指令,串重复前缀,MOVSB /MOVSW REP,STOSB /STOSW,REPE /REPZ,LODSB /LODSW,REPNE /REPNZ,CMPSB /CMPSW,SCASB /SCASW,1/131,与,REP,配合工作的,MOVS,/,STOS,/,LODS,REP MOVS/STOS/LODS,执行操作:,(1),如,(CX)=0,则退出,REP,,否则转,(2),(2)(CX),(CX)-1,(3),执行,MOVS/STOS/LODS,(4),重复,(1)(3),1/131,1,、,MOVS,串传送指令:,MOVS DST,SRC,MOVSB,(字节),MOVSW,(字),例:,MOVS ES:BYTE PTR DI,DS:SI,执行操作:,(1)(DI),(SI),(2),字节操作:,(SI),(SI),1,(DI),(DI),1,字操作:,(SI),(SI),2,(DI),(DI),2,方向标志,DF=0,时用,+,,,DF=1,时用,-,。,REP MOVS,:将数据段中的整串数据传送到附加段中。,源串(数据段),目的串(附加段),1/131,执行,REP MOVS,之前,应先做好:,(1),源串,首地址,(,末地址,),SI,(2),目的串,首地址,(,末地址,),DI,(3),串长度,CX,(4),建立方向标志,(,CLD,使,DF=0,,,STD,使,DF=1),1/131,(,SI,),(,DI,),DF=0,DF=1,数据段 附加段,(,SI,),(,DI,),1/131,data segment,mess1 db personal_computer,data ends,extra segment,mess2 db 17 dup(?),extra ends,code segment,lea si,mess1,lea di,mess2,mov cx,17,cld,rep movsb,code ends,lea si,mess1+16,lea di,mess2+16,mov cx,17,std,rep movsb,1/131,2,、,STOS,存入串指令:,STOS DST,STOSB,(字节),STOSW,(字),执行操作:,字节操作:,(DI),(AL),(DI),(DI),1,字操作:,(DI),(AX),(DI),(DI),2,例:把,附加段,中的,10,个字节缓冲区置为,20H,lea,di,mess2,mov al,20H,mov cx,10,cld,rep stosb,lea,di,mess2,mov ax,2020H,mov cx,5,cld,rep stosw,1/131,3,、,LODS,从串取指令:,LODS SRC,LODSB,(字节),LODSW,(字),执行操作:,字节操作:,(AL),(SI),(SI),(SI),1,字操作:,(AX),(SI),(SI),(SI),2,注意,:,*,LODS,指令一般不与,REP,联用,*,源串一般在数据段中(允许使用段跨越前缀来修改),,目的串,必须,在附加段中,*,不影响条件标志位,1/131,与,REPE,/,REPZ,(,REPNE,/,REPNZ,)配合工作的,CMPS,和,SCAS,REPE/REPZ,(,REPNE/REPNZ,),CMPS/SCAS,执行操作:,(1),如,(CX)=0,或,ZF=0(ZF=1),则退出,,否则转,(2),(2)(CX)(CX)-1,(3),执行,CMPS/SCAS,(4),重复,(1)(3),1/131,4,、,CMPS,串比较指令:,CMPS SRC,DST,CMPSB,(字节),CMPSW,(字),执行操作:,(1)(SI)-(DI),根据比较结果置条件标志位:相等,ZF=1,不等,ZF=0,(2),字节操作:,(SI),(SI),1,(DI),(DI),1,字操作:,(SI),(SI),2,(DI),(DI),2,1/131,5,、,SCAS,串扫描指令:,SCAS DST,SCASB,(字节),SCASW,(字),执行操作:,字节操作:,(AL)-(DI),(DI),(DI),1,字操作:,(AX)-(DI),(DI),(DI),2,1/131,五、控制转移指令:,无条件转移指令,JMP,条件转移指令,JZ/JNZ,、,JE/JNE,、,JS/JNS,、,JO/JNO,、,JP/JNP,、,JB/JNB,、,JL/JNL,、,JBE/JNBE,、,JLE/JNLE,、,JCXZ,循环指令,LOOP,、,LOOPZ/LOOPE,、,LOOPNZ/LOOPNE,子程序调用和返回指令,CALL,、,RET,中断与中断返回指令,INT,、,INTO,、,IRET,1/131,1,、无条件转移指令:,段内,直接短转移:,JMP SHORT OPR,执行操作:,(IP),(IP)+8,位位移量,段内,直接近转移:,JMP NEAR PTR OPR,执行操作:,(IP),(IP)+16,位位移量,段内,间接转移:,JMP WORD PTR OPR,执行操作:,(IP),(EA),1/131,段间,直接远转移:,JMP FAR PTR OPR,执行操作:,(IP),OPR,的段内偏移地址,(CS),OPR,所在段的段地址,段间,间接转移:,JMP DWORD PTR OPR,执行操作:,(IP),(EA),(CS),(EA+2),1/131,2,、条件转移指令:,(1),根据单个条件标志的设置情况转移,格式 测试条件,JZ(JE)OPR ZF=1,JNZ(JNE)OPR ZF=0,JS OPR SF=1,JNS OPR SF=0,JO OPR OF=1,JNO OPR OF=0,JP OPR PF=1,JNP OPR PF=0,JC OPR CF=1,JNC OPR CF=0,1/131,(2),比较两个,无符号数,,并根据比较结果转移,*,格式 测试条件,=,JNB(JAE,JNC)OPR CF=0,JNBE(J,A,)OPR CF,ZF=0,*,适用于地址或双精度数低位字的比较,1/131,(3),比较两个,带符号数,,并根据比较结果转移,*,格式 测试条件,=,JNL(JGE)OPR SF,OF=0,JNLE(J,G,)OPR (SF,OF),ZF=0,*,适用于带符号数的比较,(4),测试,CX,的值为,0,则转移,格式 测试条件,JCXZ OPR (CX)=0,1/131,例:如果,X50,,转到,TOO_HIGH,;,计算,X-Y,,如果溢出,转到,OVERFLOW,,否则,|X-Y|,RESULT,JG,JO,JNS,MOV AX,X,CMP AX,50,TOO_HIGH,SUB AX,Y,OVERFLOW,NONNEG,NEG AX,NONNEG:,MOV RESULT,AX,TOO_HIGH:,OVERFLOW:,1/131,3,、循环指令:,注意:,*,CX,中存放循环次数,*,只能使用段内直接寻址的,8,位位移量,LOOP,LOOPZ,/,LOOPE,LOOPNZ,/,LOOPNE,执行步骤:,(1)(CX)(CX)-1,(2),检查是否满足,测试条件,,如满足则,(IP),(IP)+8,位位移量,实行循环;,不满足则,IP,不变,退出循环。,先减,cx,,,再判断,1/131,循环指令:,LOOP OPR,测试条件:,(CX),0,为零或相等时循环指令:,LOOPZ(LOOPE)OPR,测试条件:,ZF=1,且,(CX),0,不为零或不相等时循环指令:,LOOPNZ(LOOPNE)OPR,测试条件:,ZF=0,且,(CX),0,LOOP AGAIN,DEC CX,JNZ AGAIN,1/131,RET,返回指令,段内近,返回:,RET,执行操作:,(IP),(SP)+1,(SP),(SP),(SP)+2,段内带立即数近,返回:,RET EXP,段间远,返回:,RET,执行操作:,(IP),(SP)+1,(SP),(SP),(SP)+2,(CS),(SP)+1,(SP),(SP),(SP)+2,段间带立即数远,返回:,RET EXP,1/131,六、处理机控制与杂项操作指令:,标志处理指令,CLC,、,STC,、,CMC,、,CLD,、,STD,、,CLI,、,STI,其他,处理机控制与杂项操作指令,NOP,、,HLT,、,WAIT,、,ESC,、,LOCK,1/131,1,、标志处理指令:,CLC,CF,0,CMC,CF,CF,STC,CF,1,CLD,DF,0,STD,DF,1,CLI,IF,0,STI,IF,1,注意,:,*,只影响本指令指定的标志,1/131,2,、其他,处理机控制与杂项操作指令:,NOP,无操作,(,机器码占一个字节,),HLT,暂停机,(,等待一次外中断,之后继续执行程,序,),WAIT,等待,(,等待外中断,之后仍继续等待,),ESC,换码,LOCK,封锁,(,维持总线的锁存信号,直到其后的指,令执行完,),注意,:,*,不影响条件标志,1/131,一、伪操作(伪指令),伪操作是汇编程序对源程序进行,汇编,时处理的,操作,完成处理器选择、存储模式定义、数据定义、,存储器分配、指示程序开始结束等功能。,Directives,8086/8088,伪指令展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


计算机三级偏软包过之三级汇编.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14661089.html