资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章,微型计算机的指令系统,指令的构成和操作数的类型,一、指令构成,一条指令由操怍码字段和操作数字段构成。,1,、操作码字段,操作码字段表明指令执行何种性质的操作。,2,、操作数字段,操作数字段是指明指令执行的操作所需要的操作数,.,该字段中,可以是操作数本身或是操作数地址。,二、操作数类型,操作数有以下三种类型:立即数操作数、寄存器操 作数和存储器操作数。,1,、立即数操作数,立即数只能作为源操作数,而不能作为目标操作数。立即数可以是,8,位和,16,位带符号数或者无符号数,并只能是整数,不能是小数。,2,、寄存器操作数,寄存器操作数可以存放于,CPU,内部寄存器中,即通用寄存器、地址指针寄存器、变址寄存器、段寄存器。所有的通用寄存器和地址指针寄存器既可以用作源操作数,又可以用作目标操作数。,3,、存储器操作数,存储器操作数的数据可能是,8,位、,16,位和,32,位的二进制数。在指令中,存储器操作数可以分别作为源操作数和目标操作数,但是不允许二者同时都为存储器操作数。,2,8086,的寻址方式,一、立即寻址,操作数包含在指令中,此操作数又称为立即数,,(,立 即数只能作源操作数,),立即数可为,8,位,也可为,16,位,它用来给寄存器存贮器赋初值。,二、寄存器寻址,操作数在某一寄存器中。一条指令中,可以对源 操作数采用寄存器寻址,也可对目的操作数采用 寄存器寻址,还可两者都用寄存器寻址。,寄存器可为:,AX,BX,CX,DX,SI,DI,SP,BP AH,AL,BH,BL,CH,CL,DH,DL,。,三、直接寻址,操作数的地址包含在指令中。,(,注意:此地址为,16,位偏移地址,),通常操作数一般在数据段区域中,如果要对其他段,寄存器所指出的存贮区进行寻址,(,所谓段超越),,则在本条指令中,须用前缀指出段寄存器名。,四、寄存器间接寻址,操作数的地址在某寄存器中, 这些寄存器可以为:,BX,BP,SI,DI,之一。,有效地址:,EA=BX,或,BP,或,SI,或,DI,注:如果指令前没有用前缀指明具体的段寄存器,则 寻址时默认为,DS/SS,。,采用寄存器间址允许在指令中指定一个位移量,(8,位 或,16,位,),。其有效地址,EA,为寄存器内容加上此位移 量。,(,称寄存器相对寻址,),有效地址:,EA=,(,BX,或,BP,或,SI,或,DI,)位移量,(,带符号数,),、数据段基址寻址,用,BX,寄存器进行间接寻址 。,、,堆栈段基址寻址,用,BP,寄存器进行间接寻址。,、,变址寻址,用,SI,DI,寄存器进行间接寻址。,、,基址加变址寻址,用,BX,、,BP,和,SI,、,DI,寄存器组合起来进行间接寻址。,有效地址,EA=,(,BX,或,BP,)(,SI,或,DI,),注:只要用上,BP,寄存器,那么默认的段寄存器就是,SS,在其他情况,则为,DS,。,否则应用前缀指出相应段,寄存器名。,附:几种常见的书写形式,MOV AX,VALUE MOV AX,VALUE,(VALUE,为符号地址,),MOV AX,ES:VALUE MOV AX,ES:VALUE,MOV AX,COUNTSI MOV AX,COUNT+SI,(COUNT,为位移量的符号地址,),MOV AX,BXDI MOV AX,BX+DI,MOV AX,MASKBXSI MOV AX,MASKBX+SI MOV AX,MASK+BX+SI,、例,1,:,DS=2000H, ES=2100H, SS=1500H,SI=00A0H, BX=0100H, BP=0010H,,,VAL=0050H,,,请指出下列的源操作数字段,是什么寻址方式? 它的物理地址是多少?,、,MOV AX,OABH,B,、,MOV AX,BX,、,MOV AX,VAL+100H,D,、,MOV AX,BX,E,、,MOV AX,ES:BX,F,、,MOV AX,BP,G,、,MOV AX,SI,H,、,MOV AX,VAL+BX+SI,例:根据以下要求写出相应的汇编语言指令,、把数,OB5H,与,(AL),相加,结果送回,AL,中。,、把,BX,和,DX,内容相加,结果存入,DX,中。,、用位移量,0524H,的直接寻址方式把存贮器中一个字 与数,2A59,相加,结果送回存贮单元中。,、用,BX,和,SI,的基址变址寻址方式,把存贮器中一个字 节与,AL,内容相加,结果存入,AL,中。,、用,BX,和位移量,OB2H,的寄存器相对寻址方式把存贮 器中一个字和,CX,相加,结果存入内存单元中。,8086/8088CPU,指令系统,一、数据传送指令,、通用数据传送指令, MOV,传送指令,格式:,MOV DST, SRC,DST,:,目的操作,操作,:,DST SRC,SRC,:,源操,、立即数到寄存器存贮器,reg, data,注:不包括段寄,mem, data,B,、从寄存器到寄存器,reg,reg,从存贮器到寄存器,mem,reg,从寄存器到存贮器,reg,mem,注:不包括段寄,、从存贮器寄存器到段寄存器,(,mem/reg,segreg,),注,:,不能往,CS,中传送数据,.,、从段寄存器到存贮器寄存器,(,segreg,mem/reg,),注:,1,不影响标志,2,不允许两操作数都使用存储器,3,不允许往,CS,中送数,4,8,位传送,16,位传送决定于指令中寄存器及立 即数形式,5,凡给,SS,赋值时,系统会自动禁止中断,等下 条指令执行完后才会恢复,E,、例:一批数的传送, PUSH,进栈与,POP,出栈指令,、堆栈,堆栈是以“后进先出”方式工作的一个存贮区。它存在于堆栈段中,.,堆栈在计算机工作中起着重要作用,它在子程序结构的程序以及中断程序中是不可少的。堆栈指针寄存器,SP,用来指示堆栈在那里。它始终指向当前堆栈的栈顶。,注:在,8086,中堆栈的存取是以字为单位进行的,、,PUSH/POP,指令格式与操作,格式:,PUSH SRC,操作:,1,SP-1 SP 2,高字节,(SP),3,SP-1 SP 4,低字节,(SP),格式:,POP DST,操作:,1,低字节 弹出,2,SP+1 SP,3,高字节 弹出,4,SP+1 SP,C,、注:,PUSH/POP,指令可使用除立即数以外的所有寻址 方式。指令也可以指定段寄为操作数,但,POP,指 令不允许用,CS,寄存器。,所有标志不受影响。,D,、,例,1,:两寄存器内容交换,分析下面程序段:,设,SP=2000H,SS=1000H,ST,:,PUSH BX,PUSH CX,POP BX,POP CX,例,2,:设,BX=2A0CH, CX=A530H, SS=2000H,程序执行后,,BX= AX= CX= SP=,ST,:,MOV SP, 1000H,PUSH BX,PUSH CX,MOV AX, 62CEH,ADD AX, SP,POP BX,HLT,例,3,:分析下面程序:,ST,:,MOV CX,,,5 POP CX,L1,:,PUSH CX DEC CX,MOV CX,,,10 JNZ L1,L2,:,DEC CX HLT,JNZ L2, XCHG,指令,(,交换,),、,XCHG,指令格式与操作,XCHG OPR1, OPR2 OPR1OPR2,、,XCHG,指令可以在寄存器之间或寄存器与存贮器之 间交换信息。,C,、,例,注:不允许使用段寄。该指令不影响标志位。,、累加器专用传送指令, IN/OUT,输入输出指令,、指令的格式与操作,长格式:,IN AL, PORT AL (PORT),IN AX, PORT AX (PORT+1,PORT),OUT PORT,AL (PORT) AL,OUT PORT,AX (PORT+1,PORT) AX,短格式:,IN AL,DX AL (DX),IN AX,DX AX ,(,DX+1,DX,),OUT DX,AL (DX,),AL,OUT DX,AX (DX+1,DX)AX,注:,I/O,指令中只能用,AX/AL,与,DX,和,8,位的端口地址。,、 用长格式时可以在指令中直接指定端口号,但只限 于外设的前,256,个端口,当端口号,256,时,只能使 用短格式,,(,间接,),,必须注意端口号即为外设地 址,它与段寄无关。,I/O,指令不影响标志位。,C,、,例,1,:,D,、,例,2,:,OUT DX, AL, XLAT,换码指令,、指令格式与操作,XLAT OPR,或,XLAT AL BX + AL ,、注:使用,XLAT,指令,应先建立一个表格。,表格首址存入,BX,中,需转换的代码应是相对于 表格首址的位移量(即项号)也提前放入,AL,中。,表格的内容(即项值)则是所要换取的代码它将存入,AL,中。,指令格式中的,OPR,为表格首址(符号地址)。,所有标志不受影响。,、例 设:,BX=0040H, AL=02H,,,DS=F000H,项号项值,表格:,0 (F0040H)=11H,(,0040H,为表格首址),1 (F0041H)=22H,2 (F0042H)=33H,3 (F0043H)=44H,4 (F0044H)=55H,5 (F0045H)=66H,则:执行,XLAT,后,,AL=,、地址传送指令 、指令格式与操作,偏移地址送寄存器,LEA REG,REG,SRC,把源操作数的偏移地址送寄存器,。,指针送寄存器和,DS LDS REG,SRC,REG (SRC),DS (SRC+2),把源操作数提供的,32,位数送寄存器与段寄,DS,指针送寄存器和,ES LES REG,SRC,REG (SRC),ES (SRC+2),把源操作数提供的,32,位数送寄存器与段寄,ES,注:所有标志不受影响,REG,必须为,16,位通用寄存器,SRC,为内存单元地址。,、例,LEA BX,BX+SI,执行前:,BX=0400H SI=003CH,执行后:,BX=,LDS SI,10H,执行前:,DS=C000H, (C0010H)=0180H,(0012H)=2000H,执行后:,SI= DS=,LES DI,BX,执行前:,DS=B000H, BX=080AH,(B080AH)=05AEH, (B080CH)=4000H,执行后:,DI= ES=,、标志寄存器传送指令,标志送,AH,:,LAHF AH PSW,的低字节,AH,送标寄:,SAHF PSW,的低字节,AH,标志进栈:,PUSHF SPSP-2;,(,SP+1,SP,),PSW,标志出栈:,POPF PSW,(,SP+1,SP,),SP SP+2,PSW,15 8 7 0,AH,/,/,/,/,OF,DF,IF,TF,SF,ZF,/,AF,/,PF,/,CF,/,/,/,三、算术运算指令,、加法指令,加:,ADD DST,SRC,DSTSRC+DST,reg,reg,;,reg,mem,;,mem,reg,reg,data,;,mem,data,; ac,data,带进位加:,ADC DST,SRC,(DST) (SRC)+(DST)+CF,reg,reg,;,reg,mem,;,mem,reg,reg,data,;,mem,data,; ac,data,加,1,:,INC OPR,(OPR) (OPR)+1 (,reg;mem,),注:,INC,指令不影响,CF,标志,、减法指令,减:,SUB DST,SRC,DSTDST-SRC,带借位减:,SBB DST,SRC,OSTDST-SRC-CF,减:,DEC OPR,OPROPR-1,求补:,NEG OPR,OPR0-DPR,比较:,CMP OPR1,OPR2,OPR1 - OPR2,注:,CMP,指令执行减操作,但它不保存结果,只是 根据操作结果设置条件标志位。,CMP,指令后 往往跟着一条条件快移指令,实现程序分支。,DEC,指令不影响,CF,标志。,、乘法指令,格式:,无符号数乘,MUL SRC,(,reg/mem,),带符号数乘,IMVL SRC,操作:字节操作,AL*(SRC) AX,字操作,AX*(SRC) DX,AX,注:,执行前,必须将被乘数送入,AX/AL,中。,MUL,:,当积的高位为,0,,则,CF=0,OF=0,否则均为,1,。,IMVL,:,当积的高一半是低一半的符号扩展则,CF=OF=0,,,否则为,1,。,例:,设,AL=04H BH=02H AH=E5H,则 执行,MUL BH,后,AX=,、除法指令,格式:,无符号数除,DIV SRC,(,reg/mem,),带符号数除,IDIV SRC,操作:字节操作:,AX(SRC),商,AL,,余,AH,字操作:,DX,AX(SRC),商,AX,,余,DX,注:,IDIV,、,DIV,执行前,必须将被除数送入指定寄存器,AX,DX,中。,用除法指令时,必须注意它要求商为,8,位,(,字节,),16,位,(,字,),,如果被除数的高,8,位,(,字节,),或,16,位,(,字,),大于除数的绝对值,商就会产生溢出,此时 会作除数为,0,的情况来处理。,例:设,AX=0009H BH=02H,则 执行,DIV BH,后,AL= AH=,D,、,字节转换为字指令:,格式:,CBW,操作:,AL,的内容符号扩展到,AH,。,字转换为双字指令:,格式:,CWD,操作:,AX,的内容符号扩展到,DX,。,注:,CBW,CWD,指令不影响条件码。,例:,设有两个,16,位数存于,AX,BX,中,求,Z=AX/BX,、,十进制调整指令,、压缩的,BCD,码:,用,4,位,2,进制表示一个十进制数位。,如,502D0101,0000,0010B,非压缩的,BCD,码:,以,8,位为一组表示一个十进制数 位,其中低,4,位为,BCD,码,高,4,位没 有意义,如:,502D00110101,00110000,0011,0010B,。,注:,ASCII,码是一种非压缩的,BCD,码。,、压缩的,BCD,码调正指令,DAA,:,条件:用,ADD,或,ADC,将两个压缩,BCD,码 相加,和存于,AL,中。,操作:将和,AL,调正到压缩的,BCD,格式存入,AL,中。,DAS,:,条件:用,SUB,或,SBB,将两个压缩,BCD,码 相减,差存于,AL,中。,操作:将,AL,中的差调正到压缩的,BCD,格 式存入,AL,中。,注:,DAA/DAS,对,OF,标志无定义对其他标志有影响。,例,1,:,设:,AL=28H, BL=68H,执行:,ADD AL,BL,DAA,指令后:,AL= CF= AF=,例,2,:,设:,AL=86H, BL=07H,执行:,SUB AL,BL,DAS,指令后:,AL= CF= AF=,、非压缩的,BCD,码调整指令,AAA,:,加法的,ASCII,调正指令,条件:用,ADD/ADC,将,2,个非压缩,BCD,码相加, 和存于,AL,中。,操作:将,AL,中和调正到非压缩的,BCD,格式。将 调正产生的进位值加到,AH,中。,AAS,:,减法的,ASCII,调正指令,条件:用,SUB/SBB,将,2,个非压缩,BCD,码相减, 差存于,AL,中。,操作:将,AL,中差调正到非压缩,BCD,格式,其调 正产生的借位从,AH,中减去。,AAM,:,乘法的,ASCII,调正指令。,(,对结果调正,),条件: 用,MUL,将,2,个非压缩,BCD,码相乘,(,要求高,4,位为,0),, 结果存于,AL,中。,操作: 将,AL,内容除以,OAH,,,其商存于,AH,中,余 数存于,AL,中。,AAD,:,除法的,ASCII,调整指令,(,对被除数必须进行调整,),操作:,AH*10+ALAL,;,0AH,将,AX,中的被除数,(,非压缩,BCD,码,高,4,位为,0),调 整成二进制数,例:,a,、设:,AX=0505H , BL=09H,执行:,ADD AL,BL,AAA,后:,AX=,b,、设:,AL=07H, BL=09H,执行:,MUL AL,BL,AAM,后:,AH= AL=,c,、设:,AX=0604H,执行:,AAD,后:,AX=,6,、举例,A,、试编一程序计算一批数中,,0,的个数。,B,、设有,100,个无符号字节数存于以,TAB,为首址的单元,中,试将其最大值存于,AL,中,.,最小值存于,BL,中。,C,、 试分析下面程序功能:,ST,:,LEA SI,DATA1 LEA DI,DATA2 MOV CX,5 CLC L1,:,MOV AL,SI MOV BL,DI ADC AL, BL DAA MOV SI,AL INC SI INC DI LOOP L1 MOV AL, 0 ADC AL, 0 MOV SI, AL HLT,四、逻辑运算和移位指令,、逻辑运算指令,(,按位操作,),逻辑与:,AND DST,SRC,DST DSTSRC,reg,reg,reg,mem,mem,reg,reg,data,mem,data,逻辑或:,OR DST,SRC,DST DSTURC,逻辑非:,NOT OPR,OPR, OPR,异或:,XOR DST,SRC,DSTDST V SRC,测试:,TEST OPR1,OPR2,OPR1OPR2,注:,NOT,不影响标志位,其余,4,条将使,CF=OF=0,,,AF,无 定义,对,SF,ZF,PF,有影响。,逻辑运算指令对处理操作数的某些位很有用。它可 屏蔽某些位,可使某些位置“”,可测试某些位等,.,、移位指令,逻辑左移:,SHL OPR,CNT,逻辑右移:,SHR OPR,CNT,算术左移:,SAL OPR,CNT,算术右移:,SAR OPR,CNT,循环左移:,ROL OPR,CNT,循环右移:,ROR OPR,CNT,带进位循环左移:,RCL OPR,CNT,带进位循环右移:,RCR OPR,CNT,其中,: OPR,:,reg;mem,CNT,:,1,或,CL,注:,移位指令:,OF,位当,CNT=1,有效,在移位后,D7,值发 生变化时,1OF,否则为,o,。,它影响,SF,ZF,PF,对,AF,无定义。,循环指令:不影响除,OF,CF,以外的其它条件标志。,OF,影响同移位指令,例:,a,、设:,SI=1450H,则:执行,MOV CL,2,SHL SI,CL,后, SI= CF=,b,、计算,BX*6,c,、计算,AX/256,结果存于,AL,中,五、串处理指令,串处理指令是指用一条指令实现对一串字符或数据 的操作。,8086,的串处理指令有如下几个特点:,a,、,通过加重复前缀,(REP REPNZ,等,),实现串操作。,b,、,可以对字节字串进行操作,c,、用,SI,对源操作数进行间接寻址,(,在,DS,段中,),用,DI,对 目的操作数进行间接寻址,(,在,ES,段中,),。,d,、,串操作时,地址的修改与方向标志,DF,有关,当,DF=1,时,,SI/DI,作自动减量修改,当,DF=0,时,,SI/DI,作 自动增量修改。,e,、,在执行串操作指令过程中,,IP,保持指向重复前缀,(,前缀本身也是一条指令,),的偏移地址。,、字符串传送指令与重复前缀指令,、,REP,CXCX-1,当,CX=0,退出重复,否则,执行其后的串指令。,、,MOVSB,(DI)(SI),MOVSW,SISI1,或,2 DIDI1,或,2,。,(,DF=0,为,+; DF=1,为,-,),注:,MOVSB(,字节,)/MOVSW(,字,),指令前通常加,REP,该指令不影响,F,标志,。,、例:一批数的传送,a,、,b,、,c,、,、取字符串指令,LODSB,AC(SI),LODSW,SISI1,减,2,(,DF=0,为,+; DF=1,为,-,),注:此指令前,通常不加,REP,,,它不影响,F,标志。,例:数,0,的个数存于,CH,中,、存字符串指令,STOSB,(DI)AC,STOSW,DIDI1,或,2. DF=0,为,+; DF=1,为,-,注:该指令前加,REP,后,可以使一批内存单元,填满 相同的数。 该指令不影响,F,标志。,例:使,0400H,开始的,256,个单元清,0,、 字符串比较指令与相等不相等,为,0,不为,0,,重,复前缀指令,、,REPE,CXCX-1,当,CX=0,或,ZF=0,REPZ,退出重复,否则执行其后的串指令,、,REPNE,CXCX-1,当,CX=0,或,ZF=1,REPNZ,退出重复,否则执行其后的串指令,、,CMPSB,(SI),(DI),CMPSW,SISI1,或,2,;,DIDI1,或,2,。,DF=0,为“,+”; DF=1,为“,-”,、例:判一批数是否与要求的数相同,、字符串检索指令,按累加器中给出的字节字对,ES:DI,所指的字节字,串进行检索,建立相应标志。,、,SCASB,AC -(DI),SCASW,DIDI1,或,2,、例:,100,个字符存于以,TAB,为首址单元中,试检索,A,字符的位置,位置值存于,DX,中,若无,A,字使,A=-1,六、控制转移指令,、转移指令,段内与段间:,段内转移,:,在同一段内进行的转移,段间转移,:,段与段之间进行的转移,转移指令的寻址方式,A,、,段内直接寻址,它是一种相对寻址,其转移的有效地址为,IP,的当前值与位移量,8,位,/16,位,(,带符号数,),之和,其中条件转移指令只能采用这种寻址方式,位移量为,8,位,.,B,、,段内间接寻址:,(,只适用于无条件转移指令,),段内间接寻址的转移有效地址为寄存器的内容或 存贮单元的内容。它可以用数据寻址方式中除立即数以外的任一种寻址方式取得。,C,、,段间直接寻址:,(,只适用无条件转移指令,),段间直接寻址的转移地址的段值和偏移量直接由指令给出。产生转移时,其段值送,CS,偏移量送,IP,。,D,、,段间间接寻址:,(,只适用无条件转移指令,),段间间接寻址用存贮器中,2,个相继字的内容取代,IP,与,CS,内容,以达到段间转移之目的。其中相继字的存贮单元地址将由指令指定的除立即数寄存器方式以外的任一种数据寻址方式取得。,两个相继字中,前一个为偏移量,后一个为段值。,无条件转移指令,JMP SHORT PTR OPR,IPIP+8,位位移量,段内直接短转移,JMP NEAR PTR OPR,IPIP+16,位位移量,段内直接近转移,JMP WORD PTR OPR,IP(EA),段内间接转移,JMP FAR PTR OPR,IPOPR(,偏移地址,),段间直接转移,CSOPR(,段地,),JMP DWORD PTR OPR,IP(EA),段间间接转移,CSEA+2,条件转移指令,、,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,奇转,、无符号数条件转移,JB(JNAE,JC) OPR,条件:,CF=1,小于转,JNP(JAE,JNC)OPR,CF=0,大于等于转,JBE(JNA) OPR,CFVZF=1,小于等于转,JNBE(JA) OPR,CFVZF=0,大于转,、带符号数条件转移,JL(JNGE) OPR,条件:,SFOF=1,小于转,JNL(JGE) OPR,SFOF=0,大于等于转,JLE(JNG) OPR,(SFOF)ZF=1,小于等于转,JNLE(JG) OPR,(SFOF)ZF=0,大于转,、,JCXZ OPR,CX=0 CX=0,转,例:,、,设:,DS=2600H, BX=1256H, SI=528F,TAB(,位移量,)=20A1H PC,当,2000H,232F7H=3280H, 264E5H=2450H,执行,JMP 1000H,后,IP=,JMP BX,后,IP=,JMP BX+TAB,后,IP=,JMP BX+SI,后,IP=,JMP 2000H,:,1000H,后,IP= CS=,、试分析下面程序,ST,:,MOV AL, X,SHL AL,1,JC L2,CMP AL,Y,JNZ L1,MOV Z,0,HLT,L1,:,JB L3,L2,:,MOV Z,1,HLT,L3,:,MOV Z,-1,HLT,、子程序调用和返回指令,、调用指令:,把下一条指令的地址,(CS/IP,即,断点) 压栈,并实现转移(,DST,送,IP/CS),CALL DST,段内直接,SPSP-2,调用,SP+1,SPIP / IPIP+D16,段内间接,SPSP-2,调用,SP+1,SPIP / IPEA,段间直接,SPSP-2 SP+1,SPCS,调用,SPSP-2 SP+1,SPIP,IP,偏移地址,CS,段地址,段间间接,SPSP-2, SP+1,SPCS,调用,SPSP-2, SP+1,SPIP,IP(EA),CS(EA+2),、返回指令,RET,段内返回,IP SP+1,SP,SPSP+2,RET EXP,段内带立即数返回,IPSP+1,SP,SPSP+2,SPSP+D16 (,出栈后修改,SP),RET,IPSP+1,SP,段间返回,SPSP+2 CSSP+1,SP SPSP+2,RET EXP,IPSP+1,SP,段间带立即数返回,SPSP+2,CSSP+1,SP SPSP+D16,注:,EXP,是一个表达式,其值为,D16(,位移量,),。它用来在 返回地址出栈后修改堆栈指针。这便于调用程序在 用,CAIL,之前把子程序所需参数入栈,以便子程序使 用。当子程序返回后,这些参数已不再有用,就可 以修改栈指针使其指向参数入栈以前的值。,C,例:,CALL 1000H,CALL AX,CALL 2500H:3600H,CALL DWORD PTRDI,RET6,、循环控制指令,LOOP OPR,CXCX-1,当,CX0,时:,则:,IPIP+D8,实现循环,否则:,IP,值不变,退出循环,LOOPZ(LOOPE) OPR,CXCX-1,当,CX0,ZF=1,时:,则:,IPIP+D8,实现循环,否则:,IP,值不变,退出循环,LOOPNZ(LOOPNE) OPR,CXCX-1,当,CX0,ZF=0,时:,则:,IPIP+D8,实现循环 否则:,IP,值不变,退出循环,注:循环控制指令不影响条件码。,LOOPZ/LOOPNZ,提供了提前结束循环的可能性。,例:试分析下面程序,ST,:,MOV CX, M,MOV AX, 0,MOV SI, AX,L1,:,ADD AX,ARRAY +SI,ADD SI, 2,LOOP L1,MOV TOTAL, AX,HLT,、中断指令和中断返回指令,、,INT,SPSP-2;SP+1,SPPSW,INT TYPE,SPSP-2;SP+1,SPCS,SPSP-2;SP+1,SPIP IP(TYPE*4) CS(TYPE*4+2),注:,TYPE,为类型号,其值为,0,255,。,(TYPE,不能为,0),INT,是一个字节的中断指令,它隐含的类型号为,3,。,(,断点中断,),INT,指令在执行完上述操作后,将,0IFTF,。,、,INTO,若,OF=1,则:,SPSP- 2;SP+1,SPPSW,SPSP- 2;SP+1,SPCS,SPSP- 2;SP+1,SPIP,IP00010H,00011H,CS00012H,00013H,注:,INTO,为若溢出则中断的指令。,(,类型号为,4),、,IRET,IPSP+1,SP , SPSP+2,CSSP+1,SP , SPSP+2 PSWSP+1,SP , SPSP+2,注:中断指令:保存现场:,PSW,、,CS,、,IP,实现转移:,TYPE*4IP TYPE*4+2CS,、处理器控制指令,、,CLC,0CF,进位位置,0,CMC,CFCF,进位求反,STC,1CF,进位置,1,CLD,0DF,方向标志置,0,STD,1DF,方向标志置,1,CLI,0IF,中断标志置,0,STI,1IF,中断标志置,1,、,NOP,无,(,空,),操作,HLT,停机,WAIT,等待,、,ESC,mem,交权,(,调用协处理器工作,),ESC,指令把,mem,存贮单元的内容送到 数据总线。这条指令在使用协处理器 执行某些操作时,可以从存贮器取得 指令或操作数。,、,LOCK,封锁,该指令是一种前缀,它可以与其它指 令联合,用来维持总线的锁存信号直 到与其联合的指令执行完为止。,当,CPU,与其他处理机协同工作时,该 指令可避免破坏有用信息。,小 结,一、,CPU,结构,1,、,通用寄存器:,AX,BX,CX,DX/AH,AL,BH,BL,CH,CL,DH,DL,专用寄存器:,SP,BP,SI,DI,。,标志寄存器:,F,(AF,CF,OF,SF,PF,ZF/DF,IF,TF,),段地址寄存器:,CS,DS,ES,SS,指针寄存器:,IP,2,、,一个,20,位的物理地址可表示成段地址:偏移地址, 其计算方法如下:,物理地址,(,段地址,X10H ),偏移地址,二、寻址方式,1,、立即寻址:,操作数由指令给出,MOV DX,100H,2,、,寄存器寻址:,操作数在寄存器中,ADD AX,BX,3,、直接寻址:,操作数有效地址由指令给出,MOV AX,100 MOV AX,VAR,4,、,寄存器间接寻址:,操作数的地址在寄存器中,这些寄存器可以,为,BX,BP;SI,DI.,其操作数地址为:,A,、,BX (,数据段基址寻址,),SI,位移量,DS,16 (,变址寻址,),DI (,变址寻址,),BP,位移量,SS,16 (,堆栈段基址寻址,),B,、,SI, ,BX,位移量,DS*16 (,基址加变址,),DI,SI, ,BP,位移量,SS*16 (,基址加变址,),DI,注:只要用上,BP,,,那就默认段寄为,SS,,,其他情况为,DS,5,、,编写指令时应注意的几个问题,A,、,注意区别立即寻址方式和直接寻址方式,如,:,MOV AX,126,与,MOV AX,126,B,、,使用寄存器间址时,应注意和寄存器寻址方式的,区别,如:,MOV AX,BX,与,MOV AX, BX,C,、,在双操作数指令中,源操作数和目的操作数的地 址不能同时为存贮器地址。,如:,M1,和,M2,为两个存贮器变量, 则:,ADD M1, M2,是错误指令。,D,、,代码段寄存器,CS,不能用作指令的目的寄存器。,三、指令,1,、数据传送指令,A,、,MOV DST,SRC (DST:,目的操作数,,SRC,源操作数,),指令的,7,种格式与注意事项。,PUSH SRC,指令的操作过程,,SP,的变化情况,POP DST,指令的操作过程,,SP,的变化情况,XCHG OPR1 ,OPR2 (,交换,),B,、,IN AC,PORT,只能用,AX/AL,DX/64K,空间,OUT PORT, AC,XLAT (,换码,) ALBX + AL,BX,为表格首址,,AL,为项号,C,、,LEA REG,SRC,有效地址送寄存器,REG,为通用寄存器,LDS REG,SRC,指针送寄存器和,DS,LES REG,SRC,指针送寄存器和,ES,D,、,LAHF,标志送,AH,SAHF AH,送标寄,2,、算术运算指令,A,、,ADD DST,SRC,ADC DST,SRC,INC OPR INC,指令不影响,CF,B,、,SUB DST,SRC,SBB DST,SRC,DEC OPR DEC,指令不影响,CF,NEG OPR,CMP OPR1 ,OPR1,建立标志后跟条转,C,、,MUL SRC,字节:,AL*(SRC)AX,字:,AX*(SRC)DX,AX,IMUL SRC,(带符号),DIV SRC,字节:,AX(SRC)AL (,余在,AH),字:,DX,AX(SRC)AX (,余在,DX),IDIV SRC (,带符号,),D,、,CBW (,字节转换为字,),(AL,扩展到,AH),CWD (,字转换为双字,),(AX,扩展到,DX),E,、,DAA (BCD,码加调正压缩码,),DAS (BCD,码减调正压缩码,),AAA (,非压缩,BCD,码加调正,),AAS (,非压缩,BCD,码减调正,),AAM,非压缩,BCD,码乘调正,将,AL,积除,OA,商存,AH;,除数存,AL,中。,AAD,非压缩,BCD,码除调正,将被除数,AX,调正为,2,进制数,;,H*10+ALAL,3,、,逻辑运算和移位指令,A,、,AND DST,SRC,OR DST,SRC,NOT OPR,XOR DST,SRC,TEST OPR1 ,OPR2 (OPR1OPR2),B,、,SHL OPR,CNT (CNT,为,1,或,CL),SAL OPR,CNT,算术左移,SHR OPR,CNT,逻辑右移,SAR OPR,CNT,算术右移,ROL OPR,CNT,循环左移,ROR OPR,CNT,循环右移,RCL OPR,CNT,带进位循环左移,RCR OPR,CNT,带进位循环右移,4,、串处理指令,(,使用串指令的条件,),A,、,REP,重复前缀,CX0,重复,MOVSB,字符串传送 (,DI,),(,SI,),MOVSW,指针自动修改,条件:,SI,DI,CX,及,DF,赋值后,才可用,MOVSB/W),B,、,LODSB,取字符串,AC(SI),LODSW,C,、,STOSB,存字符串,(DI)AC,STOSW,D,、,REPE/REPZ,重复前缀,CX0,ZF=1,时重复,REPNE/REPNZ,重复前缀,CX0,ZF=0,时重复,CMPSB,字符串比较,(SI),(DI),CMPSW,自动修改指针,E,、,SCASB,字符串捡索,AC,(DI),SCASW,关键字要事先存入,AL,AX,中,5,、控制转移指令,A,、,JMP SHORT PTR OPR,段内直接短转移,JMP NEAR PTR OPR,段内直接近转移,JMP WORD PTR OPR,段内间接转移,JMP FAR PTR OPR,段间直接转移,JMP DWORD PRT OPR,段间间接转移,B,、,JZ/JE OPR ZF=1,JNE/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,JB/JNAE/JC OPR CF=1,无符号数小于转,JNB/JAE/JNC OPR CF=0,无符号数,大于等于转,JBE/JNA OPR CFZF=1,无符号数,小于等于转,JNBE/JA OPR CFZF=0,无符号数,大于转,JL(JNGE) OPR SFOF=1,带符号数,小于转,JNL(JGE) OPR SFOF=0,带符号数,大于等于转,JLE/JNG OPR (SFOF)ZF=1,带符号数,小于等于转,JNLE/JG OPR (SFOF)ZF=0,带符号数,大于转,JCXZ OPR (CX)=0 CX=0,转,C,、,CALL DST,指令的操作过程,RET (EXP),指令的操作过程,/EXP,的含义,D,、,LOOP OPR,循环控制,,CX0,转移,LOOPZ/LOOPE OPR,循环控制,CX0;ZF=1,则转移,LOOPNZ/LOOPNE OPR,循环控制,,CX0,;,ZF=0,则转移,E,、,INT,指令操作过程,INT TYPE,INTO,IRET,F,、,CLC,进位位,(CF),置,0,CMC,进位位,(CF),求反,STC,进位位,(CF),置,1,CLD,方向标志置,0,STD,方向标志置,1,CLI,中断标志置,0,STI,中断标志置,1,NOP,HLT,WAIT,等待,ESC,mem,交权,LOCK,封锁,/,前缀,6,、使用指令时,应注意的几个问题,A,、,指令对地址还是对地址中的内容进行操作,,要严加区分。,如,:,LEA BX,MESS MESS,的偏移地址,BX,B,、,使用指令时,要清楚指令隐含的操作寄存器,如:乘法隐含的目的操作数,: AX/AL,除法隐含的目的操作数,: DX,AX/AL,串指令隐含的操作数为:,SI,DI,与,AL,等。,重复前缀,: CX,十进制调正指令隐含地使用了,AL,换码指令,:XLAT BX+ALAL,循环指令,: CX,输入
展开阅读全文