微机原理PPT演示课件_第1页
微机原理PPT演示课件_第2页
微机原理PPT演示课件_第3页
微机原理PPT演示课件_第4页
微机原理PPT演示课件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

上节回顾:算术运算指令(5类20条)加法类指令减法类指令乘法类指令除法类指令,本节主要内容:1.BCD码调整指令2.逻辑运算与移位类指令,(一)压缩BCD码调整指令,1.加法(执行完ADD、ADC后的)十进制调整指令DAA,虽然我们用4位二进制数成功的表示了09十个数字,但机器在做加法时,仍按二进制运算,也就是说我们想的是逢十进一,而机器还是逢十六进一,解决办法是当两位BCD码相加10时,让机器自动加上6,这样就实现了逢十进一,这正是DAA指令的作用。,例如:,7+6=13,0111+0110,10011,1101+0110,又如:9+8=17,1001+1000,10111,10001+0110,3)DAA指令对OF标志没有定义,但影响所有其它标志。,1)DAA指令必须紧跟在ADD、ADC指令之后;2)调整是在AL中进行的,功能为:,当AF=1(半进位位)或者AL中低4位值是AF时,将AL中内容+06H,且AF置1;当CF=1(进位位)或者AL中高4位值是AF时,将AL中内容+60H,且CF置1;,说明:,思考题:1、37+48=?MOVAL,37HMOVBL,48HADDAL,BLDAAHLT,85,2.减法的十进制调整指令DAS与上面的分析一样,对于十进制数的减法我们认为借1当10,而机器是按二进制数计算的,仍是借1当16,所以当BCD码相减出现借位时,只要借过来1位后,让机器自动减去06H即可,这正是DAS指令的作用。,当AF=1或AL中低四位为AFH时,让AL中内容减06H;当CF=1或AL中高四位为AFH时,让AL中内容减60H,3)DAS对OF标志无定义,但影响所有其它标志,说明:,1)DAS指令必须紧跟在SUB、SBB指令之后,2)调整是在AL中进行的,功能是:,(二)非压缩的BCD码调整指令,下面分别介绍,1.加法的ASC调整指令AAA2.减法的ASC调整指令AAS3.乘法的ASC调整指令AAM4.除法的ASC调整指令AAD,非压缩BCD码调整指令也称做ASC调整指令,因为ASC码就是一种非压缩的BCD码,ASC调整指令有4种:,当AL低四位为AF或AF=1时,将AL内容+6,AH内容+1,且AF置1;清除AL中的高4位;AF位的值送入CF(进位标志)。AAA指令影响AF和CF,对其它标志均无定义。,1.加法的ASC调整指令(要紧跟在ADDADC指令之后),指令格式:AAA,功能:,AHAH加上调整产生的进位,ALAL中的和调整为非压缩的BCD格式,调整步骤为:,BCD,0000,AH,XXXX,0000,AL,因为AL向AH进位了,(,0110,AF,09,13,思考题:1、9+4=?MOVAL,9HMOVBL,4HADDAL,BL;AL=0DHAAA;AL=0DH+06H=03H(高位清零),AH=1;CF=1HLT,2.减法的ASC调整指令(要紧跟在SUB或SBB指令之后),指令格式:AAS,功能:,AHAH减去调整产生的借位,ALAL中的差调整为非压缩的BCD格式,当AL低四位为AF或AF=1时,将AL内容-6,AH内容-1,且AF置1;清除AL中的高4位;AF位的值送入CF(借位标志)。AAS指令除影响AF和CF标志外,对其它标志均无定义。,BCD,0000,AH,0000,AL,因为AL向AH借位了,调整步骤为:,(,XXXX,0110,09,0000000000010010=0012H不是非压缩BCD码了,3.乘法的ASC调整指令(紧跟在MUL之后),指令格式:AAM,功能:,AL余数,AHAL中的积0AH的商,说明:,对压缩BCD码,8086没有乘法调整指令,可化为累加求和来做。,必须是两个非压缩的BCD码相乘之后,才能进行这种调整,因为两个非压缩BCD码的高4位均为0,所以积的高8位(AH)=00H;,AAM只对PF、SF、ZF产生影响,对OF、AF、CF无意义;,例:0306=0108,结果应为,0000001100000110,),AX,调整过程见下页:,例0809=0702程序:MOVAL,08MOVBL,09MULBL;(AX)(AL)(BL)AAM;调整后(AX)=0702,调整如下:(AL)0AH=0001001000001010,AH,商1,AL,余数8,结果(AX)=0000000100001000,4.除法的ASC调整指令,与加、减、乘法的调整指令不同,除法的十进制调整是在除法之前进行的,且还有如下条件:,被除数是放在AX中的非压缩BCD码,且AH中放高位,AL中放低位,AH、AL中的高4位均为0。,执行除法DIV前,必需使用AAD指令将AX中被除数化成二进制数存放在AL中,除数是一位非压缩BCD码,且高4位为0。,本指令根据AL中的设置SF、ZF和PF,对其它的标志无定义,指令格式:AAD,功能:,AH0,AL(AH)10+(AL),思考题:1、234=?MOVAX,0203HMOVBL,4HAAD;AX=02H0AH+03H=17HDIVBL;AH=03H(余),AL=05H(商)HLT,0305,(一)逻辑运算指令,(三)循环移位指令,(二)移位指令,与指令AND,或指令OR,异或指令XOR,非指令NOT,测试指令TEST,算术右移指令SAR,逻辑左移指令SHL,逻辑右移指令SHR,循环左移ROL,带进位位循环左移RCL,循环右移ROR,带进位位循环右移RCR,算术左移指令SAL,三、逻辑运算与移位类指令及应用,逻辑运算,逻辑指令:TESTsrcdstNOTANDORXOR001000010011101011110110,一、逻辑指令,ANDdst,srcORdst,srcXORdst,srcNOTdstTESTdst,src,例1、ANDAX,BXANDAH,0FHORAL,0F0H;TESTAL,01;测试AL的D0=1?XORAX,AX;将AX清零,例2、设AH=10011101,对AH的高四位置零,低四位保持不变。ANDAH,0FH10011101AND0000111100001101,例3、ORAH,50HORAX,0FF00H,例4、使AL中的数,第0、1位取反。MOVAL,71H;送操作数XORAL,03H;送特征数00000011HLT;暂停,01010001(AL)XOR0000001101010010,例5、测试AL中的第0、1、2位是否为零。MOVAL,40HTESTAL,07H;测AL的0、1、2位HLT,01001000AND0000011100000000,逻辑指令小结,AND指令用于对一个数据的指定位清零OR指令用于对一个数据的指定位置1NOT指令用于取反码,再加一,得补码XOR指令用于对寄存器清零TEST指令用于测试一个数据的指定位是1还是0,二、非循环移位指令SHLdst,count;逻辑左移SHRdst,count;逻辑右移SALdst,count;算数左移SARdst,count;算数右移,用于带符号数,用于无符号数,注意:,移位指令影响标志位CF、OF、PF、SF和ZF。如果只移一位,指令中用1指出移位的位数,如果超过1位,必须用CL预先指明移位的位数。例1:SALDX,1;DX中的数左移1位MOVCL,4SALAX,CL;AX中的数左移4位SHLAL,CL;SHRAL,CL;AL中的数右移4位,例2、将两个非组合BCD数(高阶存BL,低阶存于AL中),转换成一个组合的BCD数,存于AL中。,程序段:MOVCL,4SHLBL,CLORAL,BLHLT,例2、将AX中的内容乘以10(用移位指令)。10=(2+8)左移一位,乘以2;右移一位,除以2。程序段:MOVBX,AXMOVCL,2SHLAX,CL;左移2位,乘以4ADDAX,BX;AX为原来5倍SHLAX,1;AX为原来的10倍HLT,三、循环移位指令,ROLdst,count;左小循环RORdst,count;右小循环RCLdst,count;左大循环RCRdst,count;右大循环,例1、ROLAL,1AL:1001000100100011例2、MOVCL,2ROLBH,CLBH:1010111110111110,3-3-4、串操作指令,字串传送:MOVSB/MOVSW字串比较:CMPSB/CMPSW字串扫描:SCASB/SCASW字串装入:LODSB/LODSW字串存储:STOSB/STOSB,一、串操作的特点,1)、SI寻址源操作数,段地址在DS,DI寻址目的操作数,段地址在ES;2)、每次操作后,SI、DI自动修改:DF=0,SI和DI加1或(+2),DF=1,SI、DI减一或减二。3)、若源字串和目的字串在同一段中,则把DS和ES设成相同数字。4)、通过重复前缀实现串操作,.,.,.,DS:SI,ES:DI,CX=次数,二、重复前缀:,重复前缀不能单独使用,只能放在串操作指令之前,使之重复执行,重复前缀不影响标志,共有5种:,(2)REPE,(3)REPZ,(4)REPNZ,(5)REPNE,(1)REP,重复后面的操作,且(CX)(CX)-1,直到(CX)=0退出REP;,重复后面的操作,且(CX)(CX)-1,直到(CX)=0或者ZF=0退出REPE;,重复后面的操作,且(CX)(CX)-1,直到(CX)=0或者ZF=1退出REPNE;,二者功能完全相同,常和比较指令连用,相等就继续比较。,二者功能完全相同,常和比较指令连用,不等就继续比较。,三、串传送指令:,格式,功能,MOVSB,传送一个字节,且SI、DI自动1,MOVSW,MOVSdstsrc,传送一个字,且SI、DI自动2,传送一次数,字节还是字由操作数类型,例:将数据段中以AREA1为首地址的100个字,,解:MOVSI,OFFSETAREA1MOVDI,OFFSETAREA2MOVCX,100AGN:MOVSDI,SIDECCXJNZAGN,传送到附加段以AREA2为首地址的单元中。,用重复前缀,这儿可合成一句:REPMOVSDI,SI或REPMOVSW,加CLD,3.串比较指令,格式,功能,CMPSB,比较两个字节,且SI、DI自动1,CMPSW,CMPSdst,src,比较字节或字由dst,src数据类型决定,比较两个字,且SI、DI自动2,例:比较DS段FLAGS为首地址和ES段STATUS为首地址的5个,LEASI,FLAGS;SI指向源串LEADI,STATUS;DI指向目的串MOVCX,0005;置计数值CLDREPECMPSB;重复比较JNEFOUND;ZF=0时转移SAME:RETFOUND:INCCX;计数值回退一字节MOVWORDPTRPOINT,CXJMPSAME,字节,将内容不同处的位置存入DS段的POINT单元中。,使方向标志位DF=0,执行串处理指令时,地址自动增量。,.,.,.,DS:SI,ES:DI,CX=次数,在CMPSW/CMPSB前使用重复前缀:用REPNZ/REPNE,表示两个字串比较不相等时继续下次比较,若相等则退出比较。用REPZ/REPE,表示两个字串比较相等时继续下次比较,若不相等则退出比较。用途:用于比较两个字串,找出第一个相等的字符或不相等的字符,4、字串检索指令:SCASB/SCASW,操作:AL(AX)DIDIDI1(2)用AL或AX中的一个字串和位于ES段由DI指出的内存单元的字节或字比较。功能:从一个字串中查找一个与AL或AX中不同的字符,或寻找一个相同的字符.,例2.从地址为1000单元开始,存放256个字节的字符串,找出第一个字符$(ASCII码24H),将$的第一个地址存入BX中,否则将BX清零.1)分析:要求找指定字符$,可以用指令SCASB;重复前缀用REPNZ,表示表示两个字串比较不相等时继续,否则退出循环$的地址应为多少?,2).程序段:MOVDI,1000H;送目标串首地址MOVCX,256CLD;清方向标志MOVAL,$REPNZSCANBJZZER;没找到$,转DECDI;退回到$所在地址MOVBX,DI;$所在地址送BXJMPST0ZER:MOVBX,0ST0:HLT,使用SCASB/SCASW注意:,目的字串默认在ES段中,字串首址由DI指出。寻找与AL中字节相同的第一个字节,用REPNZSCASB,若找到,退出循环;若字串中没有任何字节与AL的内容相同,退出循环。,5、取字串指令:LODSB/LODSW,执行的操作:AL(AX)SISISI1(2)将位于DS段由SI指出的内存单元的字节或字的内容取到AL或AX中。注意:因为取来的字或字节放在AX或AL中,LODSB/LODSW前面不能加前缀。6、存储指令:STOSB/STOSW,例3:将0404H单元开始的256单元清零。CLD;清方向标志LEADI,0404H;DI指向字串地址MOVCX,256;共256个字节XORAX,AX;AX清零REPSTOSBHLT,执行的操作:DIAL(AX)DIDI1(2)把AL或AX中的一个字串存到位ES段由DI指出的内存单元,并自动修改地址。,例4:检验一段被送过的数据是否与原串完全相同.CLDMOVCX,100;共100字节MOVSI,2400H;源串首地址MOVDI,1200H;目的串首地址REPECMPSB;串比较,直到ZF=0,或CX=0ANDCX,0FFH;100个字串比较完否JZEQQ;都作了比较,DECSI;否则,有不相同字串MOVBX,SI;将不同字串地址送出MOVAL,SI;将不同字串送出JMPSTOPEQQ:MOVBX,0;两字串完全相同STOP:HLT,3-4-5控制转移指令,无条件转移和条件转移指令循环控制指令子程序调用和返回指令中断指令,1.无条件转移类指令,JMPSHORTHELLO,HELLO为语句标号,要求与JMP语句的距离在-128127之内。,所谓转移实质上就是修改CS:IP的当前值,段内转移仅修改IP,段间转移还要修改CS。,(1)跳转指令JMP,1)段内直接短转移,例:,HELLO:MOVAL,3,E8H,08H,B0H,03H,0100H,0101H,010AH,010BH,代码段,(IP)(IP)+8位位移量,位移量08H,执行的操作:,说明:,位移量计算:,e=(IP目标)-(IP源)+2)=010AH-(0100H+2)=08H,e得正,是向下转移;e得负是向回转移(将此负数写成补码,即为位移量),其中的2为JMP指令的长度,JMPNEARPTRTAGET,2)段内直接近转移,例:,TAGET:MOVAL,06H,说明:,TAGET为语句标号要求与JMP语句的距离在-3276832767之间,3)段内间接转移,JMPWORDPTRSI,JMPBX,例:,例:,(IP)(IP)+16位位移量,执行的操作:,有效转移地址EA放在一个寄存器中或者一个存储单元里,说明:,(IP)(EA),执行的操作:,4)段间直接转移,例:JMPFARPTRLABEL,说明:,此时的语句标号LABEL在另一个代码段内,执行的操作:,(CS)LABEL所在的段地址,(IP)LABEL的段内偏移量,是用存储单元的内容给出新的段地址和偏移量DOWRDPTR为双字指针运算符。,5)段间间接转移,例:JMPDWORDPTRBXSI,执行的操作:,(CS)(BX)+(SI)+2所指的存储单元内容,(IP)(BX)+(SI)所指的存储单元内容,说明:,.条件转移类指令,JO当OF=1时转移JNO当OF=1时转移,(1)根据单个标志位状态转移的指令(有10条),JB/JNAE/JC当CF=1时转移JNB/JAE/JNC当CF=0时转移,JE/JZ当ZF=1时转移JNE/JNZ当ZF=0时转移,JS当SF=1时转移JNS当SF=0时转移,JP/JPE当PF=1时转移JNP/JPO当PF=0时转移,格式:JXX语句标号,(2)根据多个标志位状态组合而转移的指令,判断无符号数大小,JA/JNBE当CF或上ZF=0时,转移JNA/JBE当CF或上ZF=1时,转移,判断带符号数大小,JG/JNLE当(SF异或OF)再或上ZF得0,转移JLE/JNG当(SF异或OF)再或上ZF得1,转移JGE/JNL当(SF异或OF)=0,转移JL/JNGE当(SF异或OF)=1,转移,根据CX寄存器转移,JCXZ当(CX=0)时,转移,CF=0是无借位ZF=0是不相等,即大于时,转移,大于时,转移,小于等于时,转移,大于等于时,转移,小于时,转移,小于等于时,转移,3、循环指令,1)LOOP目标地址,每执行一次循环都有(CX)(CX)-1,(CX)0时,循环;(CX)=0停止循环。,每执行一次循环都有(CX)(CX)-1,(CX)0且ZF=0时,循环;(CX)=0或者ZF=1停止循环。,每执行一次循环都有(CX)(CX)-1,(CX)0且ZF=1时,循环;(CX)=0或ZF=0停止循环。,3)LOOPNZ/LOOPNE目标地址,2)LOOPZ/LOOPNE目标地址,例2:延迟子程序:MOVCX,0100H;设循环次数KKK:LOOPKKK;CX-1,CX;不为零,循环或:MOVCX,0100HKKK:DECCXJNZKKKHLT,例:字节数组ARRAY中有8个元素,请找出第一个非零元素,将序号存入NO单元。,MOVCX,8MOVSI,-1;数组元素序号从0开始,先设成-1NEXT:INCSICMPSBYTEPTRSI,O;该元素为0吗?LOOPZNEXT;为0(即ZF=1)且(CX)0时循环JNZOREN;找到第一个非0元素时,转走。RET;当整个数组都是0,就退出。OREN:INCCX;退回一个序号MOVWORDPTRNO,CX;存序号RET,解:,如果是段间调用,机器自动完成步;如果是段内调用,机器只自动完成步CALL与JMP指令的区别在于:CALL指令保存返回地址,比JMP指令多执行第步。,4、子程序调用和返回指令,格式:CALLdst,当被调用的子程序和CALL指令在同一个段内时,称为段内调用;当被调用的子程序和CALL指令不在同一个段时,称为段间调用。,执行的操作是:,(SP)+1、(SP)(CS),(SP)(SP)-2,即当前段地址入栈,栈指针向上移一个字,(CS)seg,新的段地址,(SP)+1、(SP)(IP),(SP)(SP)-2,(IP)dst,CALL下面指令的偏移量,说明:,CALL1000HCALLNEARPTRROUTCALLBXCALL2500H:1400HCALLFARPTRSUBRCALLDWORDPTRDI,调用形式举例:,段间直接调用,段内直接调用,段内间接调用,段间间接调用,1.段内返回和段间返回都用RET指令,属于哪种,由配对的CALL决定;2.RET指令可带一立即数,但必须是偶数。,使用场合是:主程序和子程序常用堆栈传送数据,调子程序前把子程序需要的一些参数压入栈,子程序执行完后,栈中的这些参数已没用,了,采用RETN可以冲掉栈中这些没用的参数。,如:RET4,返回时,操作为:,(SP)(SP)+4,(3)返回指令RET,说明:,返回指令放在子程序的末尾,它的功能是使机器从子程序结尾处返回到CALL指令下面的一条指令,接着执行程序。,执行的操作是:,(IP)(SP)+1、(SP),(SP)(SP)+2,(CS)(SP)+1、(SP),若为段间返回还有3、4步,(SP)(SP)+2,1.无条件转移指令,2.条件转移指令,3.循环控制指令,(1)跳转指令JMP,(2)调用指令CALL,(3)返回指令RET,1)段内直接短转移JMPSHORT8位偏移量2)段内直接近转移JMPNEARPTR16位偏移量3)段内间接转移JMPWORDPTR目标地址4)段间直接远转移JMPFARPTR其它段内的地址5)段内间间接转移JMPDWORDPTR目标地址,(1)根据单个标志位状态转移的指令10条(2)根据多个标志位状态组合转移的指令7条,(1)LOOP(2)LOOPLOOPZLOOPE(3)LOOPNZLOOPNE,3-4-6、处理器控制指令,1、标志操作指令CLC:CF=0;清进位标志CMC:对CF求反;对进位取反STC:CF=1;置一进位标志CLD:DF=0;清方向标志STD:DF=1;置一方向标志CLI:IF=0;清中断标志STI:IF=1;置一中断标志,2、暂停指令,HLT:与中断过程联系在一起。CPU执行HLT指令时,CS和IP指向HLT的下一条指令,而CPU什么都不干。只有外部中断、对系统复位,才会使CPU暂时退出暂停状态。3、交权指令和等待指令交权指令:ESC在最大模式下才有这条指令,表示8086调用协处理器工作。,等待指令:WAIT,和ESC配合使用,8086用ESC指令使协处理器工作时,自己还可以执行一些其他操作。在8086中可以安排一条等待指令,CPU等协处理器工作结束后,便退出等待。4、总线封锁指令LOCK8086在最大模式下才有这条指令,8086CPU的LOCK与总线控制器的输入端相连。LOCK指令可以放在任何指令之前。CPU在执行LOCK后的指令时,总线控制器会封锁

温馨提示

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

评论

0/150

提交评论