欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《程序控制指令》PPT课件.ppt

    • 资源ID:5564349       资源大小:314.99KB        全文页数:59页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《程序控制指令》PPT课件.ppt

    1,程序控制指令,控制转移指令分为:转移指令循环控制指令调用和返回指令中断指令,2,转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。,3.2.转移指令,3,(1)无条件转移指令-JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。段内直接转移:JMP disp 指令中给出的8/16位的位移量加到IP。CS保持不变。段内间接转移:JMP reg/mem reg/mem中的16位偏移地址送IP。CS保持不变。段间直接转移 JMP segment:offset 指令中给出的16位的段和16位的偏移地址送到CS和IP。段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP。,4,转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于IP的位移量:位移量 转移范围 汇编语言中格式 8位-128+127 JMP SHORT OPRD 16位-32768+32767 JMP NEAR PTR OPRD例:JMP0120H;直接转向0120H JMPSHORT LP;转向LP JMPNEAR PTR BBB;转向BBB由于是段内转移,故转移后CS内容保持不变,段内直接转移,5,段内间接转移转移的目标地址由寄存器或存储单元的内容给出。例1:JMP SI若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行。注意:目标地址以段内偏移的形式给出,而不是相对于IP的位移量,所以它是一个16位的操作数。,6,例2:JMP BX+DI设指令执行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H;则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成:JMPWORD PTRBX+DI表示所取得的目标地址是一个字。,7,段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址。例:JMP2000H:1000H执行时,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR。例:JMP FAR PTR far_label其中的far_label为远类型的标号。,8,转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如:JMPDWORD PTRSI设指令执行前:(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H则指令执行后:(IP)=1000H,(CS)=4A00H于是转到4B000H处开始执行指令。例中的DWORD PTR表示转移地址是一个双字。,段间间接转移,9,4000,1212,+),41212,DS,SI,00,10,00,4A,41212412134121441215,1000,4A00,IP,CS,段间间接转移操作示意图,11111111,11101100,JMP DWORD PTR SI的机器码,DS:SI,10,条件转移指令可实现程序的条件分支。条件转移指令根据标志位的状态来决定是否进行分支转移。格式:JXX label;xx为条件名称缩写指令的转移范围为-128+127字节。主要的条件转移指令参见p142表3-7。,(2)条件转移指令-JXX,11,根据单个标志位设置的条件转移指令JB/JC;低于,或CF=1,则转移JNB/JNC/JAE;高于或等于,或CF=0,则转移JP/JPE;奇偶标志PF=1(偶),则转移JNP/JPO;奇偶标志PF=0(奇),则转移JZ/JE;结果为零(ZF=1),则转移JNZ/JNE;结果不为零(ZF=0),则转移JS;SF=1,则转移JNS;SF=0,则转移JO;OF=1,则转移JNO;OF=0,则转移,12,这类指令主要用来判断两个数的大小。一般指令序列为:CMP dist,src;比较 Jxx label;根据比较结果转移 判断无符号数的大小JA 高于则转移(distsrc)转移条件为:CF=0ZF=0JNA/JBE 低于或等于则转移(distsrc)转移条件为:CF=1ZF=1,根据组合条件设置的条件转移指令,13,JG;大于则转移(distsrc)转移条件为:(SFOF=0)ZF=0JGE;大于或等于则转移(distsrc)转移条件为:(SFOF=0)ZF=1JL;小于则转移(distsrc)转移条件为:(SFOF=1)ZF=0JLE;小于或等于则转移(distsrc)转移条件为:(SFOF=1)ZF=1,判断有符号数的大小,14,根据CX内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。,15,条件转移指令举例:以十六进制数形式显示BX中的内容。MOVBX,1234HMOVCH,4;CH做循环计数器ROT:MOVCL,4;CL做移位计数器 ROLBX,CL;将最高4位移到低4位 MOVAL,BL ANDAL,0FH;取出低4位 ADDAL,30H;转换为ASCII码 CMPAL,39H;与 9 比较 JBE DISP;若(AL)9,则转显示 ADDAL,7;若(AL)9,再加7转为A-FDISP:MOVDL,AL;(DL)字符 MOVAH,2 INT21H;显示输出 DECCH;4个十六进制数显示完否?JNZROT;没有,循环 MOVDL,48H;H MOVAH,2 INT21H;最后显示H,16,看P86 例3.8,17,3.3.循环控制指令,用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128+127的范围之内。循环控制指令不影响标志位。,18,(1)LOOP格式:LOOP label操作:(CX)-1CX;若(CX)0,则转至label处执行;否则退出循环,执行LOOP后面的指令。注:LOOP指令与下面的指令段等价:DEC CX JNZ label,19,(2)LOOPZ(LOOPE)格式:LOOPZ label操作:(CX)-1CX;若(CX)0ZF=1,则转至label处执行;否则退出循环,执行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZ label操作:(CX)-1CX;若(CX)0ZF=0,则转至label处执行;否则退出循环,执行LOOP后面的指令。,20,例1:给1A000H开始的256个内存单元均减去1,若 发现某个单元减为0则立即退出循环,其后的单元不再减1。程序段如下:(逻辑地址为1A00:0H)MOV AX,1A00H MOV DS,AX;1A00H段 MOV DI,-1 MOV CX,256 GOON:INC DI DEC BYTE PTRDI LOOPNZ GOON HLT,21,例2:在8000H开始的长度为1000字节的字符串中 查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。MOV DI,8000H MOV CX,1000 MOV AL,S MOV ADDR,0FFFFH GOON:SCASB LOOPNZ GOON JNZ DONE DEC DI MOV ADDR,DI DONE:HLT,22,看P94 例3.10P96 例3.13P102 例3.16,23,3.4 串操作指令,串:顺序放在内存中的一组相同类型的数据。串操作:对串中的元素进行相同的操作。串操作的寻址方式:源操作数指针DS:SI(DS可超越)目的操作数指针ES:DI每次串操作后:串操作指令自动修改SI和DI字节1,字2。DF标志决定。(注意:退出串操作后,指针指向最后操作的元素的下一个元素)可完成两个存储单元之间的传送和比较操作(也仅是串指令可以),24,重复前缀有的串操作指令前面可加上重复前缀REP。当使用REP前缀时,该指令重复执行,重复执行次数由CX决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。重复前缀包括:REP CX0 时重复执行REPE/REPZ CX0ZF=1时重复执行REPNE/REPNZ CX0ZF=0时重复执行,25,串指令使用的一般方法,设置源串地址,设置目标串地址,设置串长度,设置操作方向DF,串指令,MOV SI,源串首地址(或LEA SI,源串),MOV DI,目的串首地址(或LEA DI,目的串),MOV CX,串长度,CLD(或STD),串指令,26,指令执行的操作为:MOVSB:(ES):(DI)(DS):(SI)SI1,DI1 MOVSW:(ES):(DI+1)(DI)(DS):(SI+1)(SI)SI2,DI2 指令也可写成:MOVS dest,src但要求:src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由操作数的类型决定,串传送指令MOVSB/MOVSW,27,串传送指令使用举例,用串传送指令实现200个字节的数据传送:LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,28,串比较指令CMPSB/CMPSW,指令执行的操作为:CMPSB:(DS):(SI)-(ES):(DI)SI1,DI1 CMPSW:(DS):(SI+1)(SI)-(ES):(DI+1)(DI)SI2,DI2 指令也可写成:CMPS dest,src比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。,29,串扫描SCASB/SCASW,执行的操作:对字节:(AL)(ES):(DI)DI1 对字:(AX)(ES):(DI1)(DI)DI2搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。,30,SCAS指令加上重复前缀后,可对串进行连续扫描比较:若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。,31,例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图)在屏幕上显示一个字符的指令段如下:(参见附录C.3)MOV DL,MOV AH,2 INT 21H 实现题目要求的程序段见下页:,1000H,41,42,43,44,45,46,A,B,C,D,F,.,ES段,E,32,MOV DI,1000H;(DI)串偏移地址 MOV CX,0AH;(CX)串长度 MOV AL,E;搜索关键字=E CLD;从低地址到高地址进行搜索 REPNZ SCASB;若未找到,继续搜索 JZ FOUND;找到,转至FOUND MOV DL,N;串中无E,(DL)N JMP DONE;转至DONEFOUND:DEC DI;指针回退 MOV ADDR,DI;ADDRE的地址 SUB DI,1000H MOV NUM,DI;NUM搜索次数 MOV DL,Y;(DL)YDONE:MOV AH,2 INT 21H;显示字符 HLT,33,执行的操作为:对字节:(AL)(DS):(SI)SI1 对字:(AX)(DS):(SI+1)(SI)SI2 串装入指令通常不加重复前缀。LODSB等价于:LODSW等价于:MOV AL,SI MOV AX,SI INC SI INC SI INC SI,串装入指令LODSB/LODSW,34,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加数,加数,数据段,8,5,6,2,9,1,6,3,SUM,结果,.,.,07H,07H,02H,06H,35,下面要求将和的结果送显示,为此,要先化成ASCII码再送显示,程序段如下:LEA SI,SUM+3;(SI)SUM+3 MOV CX,4;(CX)和长度 STD;置DF=1,减量修改SI MOV AH,02;(AH)功能号LP:LODSB;取BCD码至AL,且(SI)(SI)-1 ADD AL,30H;转换为ASCII码 MOV DL,AL;(DL)字符 INT 21H;显示字符 DEC CX JNZ LP,36,指令的操作为:对字节:(ES):(DI)(AL)DI1 对字:(ES):(DI+1)(DI)(AX)DI2本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。存储区域的首地址要预先设置到ES:DI中。要存储到串中的数据要预先存到AL(AX)中。,串存储指令STOSB/STOSW,37,例1:把从A000H开始的2KB内存单元清零。程序段如下:MOV DI,0A000H MOV AX,0 MOV CX,1024 CLD REP STOSW,38,例2:把1000H开始的100个存储单元填入 ASCII码2AH(*)。程序段如下:MOV DI,1000H;首地址 MOV AL,2AH;*MOV CX,100;重复执行100次 CLD;增量修改DI REPSTOSB,39,3.5 子程序设计过程调用和返回指令,过程(子程序)一段具有特定功能的,供其它程序调用的公用程序。特点调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。子程序执行结束后一般均要返回调用程序。一次定义,多次调用;可带参数调用,以完成不同的功能。优点 程序代码短,结构清晰,便于编程、调试、修改和阅读。两条相关指令:子程序调用指令 CALL 子程序返回指令 RET,40,一般格式:CALL sub;sub为子程序的入口根据子程序入口的寻址方式,子程序调用有四类。段内直接调用子程序的偏移地址直接由CALL指令给出。格式:CALL near_proc CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上。注:汇编以后的调用地址是相对于CALL的下一条指令的位移量。例:CALL 0120H;子程序偏移地址由指令给出,(1)调用指令CALL,41,位移量由汇编程序在汇编时进行计算,如下例:CS:0102CALL 0120H;3字节 CS:0105 则位移量为:0120-0105H=001BH于是CALL0120H的机器码为E8 1B 00 CS:0102E8 CS:01031B CALL 0120H CS:010400 CS:0105,42,子程序的偏移地址在寄存器或存储器中。格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。例:CALLBX;子程序地址由BX给出 CALLWORD PTRSI;子程序地址在存储器中,段内间接调用,43,IPH IPL,代码段,数据段,CALL WORD PTR SI指令的操作图示:假定:(DS)=8000H,(SI)=1200H,81200H,81201H,44,子程序的段地址和偏移地址直接由CALL指令给出。格式:CALL far_proc;far_proc为远过程的地址指令的操作为:CS内容压栈 IP内容压栈 CS段地址 IP偏移地址例:CALL 2000H:1000H CALL TIMER;TIMER为远过程,段间直接调用,45,子程序的段和偏移地址为存储器的连续4个单元中的内容。格式:CALL mem32指令的操作为:SP(SP)-2(SP)+1,(SP)(CS);CS压栈 CS(mem32+2)SP(SP)-2(SP)+1,(SP)(IP);IP压栈 IP(mem32)例:CALL DWORD PTRDI调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。,段间间接调用,46,CALL,代码段,数据段,IPH IPL,CSH CSL,DI,DI+1,DI+2,DI+3,段间间接调用示意图,CALL DWORD PTRDI,47,例:下面的程序执行后,(AX)=?(DX)=?CS:2000H MOV AX,2012H 2003H MOV CX,200CH 2006H PUSH CX 2007H CALL 4000H 200AH ADD AX,BX 200CH ADD AX,DX 200EH HLT CS:4000H MOV BX,200AH POP DX RET,48,段内返回指令RET的操作为:恢复子程序执行前IP的内容。段间返回指令RET的操作为:恢复子程序执行前IP和CS的内容。另有一种带立即数的返回指令“RET n”,其中n为偶数,表示从栈顶弹出地址后另外丢弃的字节数。例:RET 4;返回后再丢弃栈顶的4个字节,(2)返回指令RET,49,4.中断指令,8086/8088 CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情况将在第六章讨论。中断指令共有三条:(1)INT n 执行类型n的中断服务程序,N=0255(2)INTO 执行溢出中断的中断服务程序(3)IRET 从中断服务程序返回调用程序,50,(1)INT n,格式:INT n说明:n4=向量地址。该向量地址中的内容即为中断服务程序入口地址(段:偏移),入口地址也称为“中断向量”。,0000:n4,XXH,XXH,YYH,YYH,中断服务程序入口的偏移地址(IP),中断服务程序入口的段地址(CS),中断类型码n=0255,内存,中断向量,51,INT指令的操作:将FLAGS压入堆栈;将INT指令下一条指令的地址压栈(即把CS和IP的内容压栈);取中断服务程序入口地址送入CS和IP。INT指令只影响IF和TF,对其余标志位无影响INT指令可用于调用系统服务程序,如INT 21H,52,INT指令的操作例:,INT 21H,IPL,IPH,CSL,CSH,SP=1200,FLAGSL,FLAGSH,SP=11FA,执行INT 21H指令后,保护断点,堆栈,执行INT 21H指令前,53,INT指令的操作例(续):,执行INT 21H指令后,CS=?IP=?因为n=21H,所以n4=84H。下图中,(0:0084H)=2000H:1123H所以:CS=2000H IP=1123H,0000:0084H,23H,11H,00H,20H,IP,CS,0000:21H4,54,INTO检查溢出标志OF,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。通常INTO指令安排在有符号数算术运算指令后面。如IMULDXINTO;若溢出,则启动INT 4,否则往下执行MOVRESULT,AXMOVRESULT+2,DX,(2)溢出中断INTO,55,用于从中断服务程序返回被中断的程序。IRET负责恢复断点(CS和IP)和恢复标志寄存器内容。任何中断服务程序不管是外部中断引起的,还是内部中断引起的,最后都要用IRET返回。IRET指令执行的操作为:栈顶内容弹出到IP 栈顶内容弹出到CS 栈顶内容弹出到FLAG,(3)中断返回指令IRET,56,3.6 处理器控制指令,1.标志操作指令 用来设置标志位的状态。(1)CF设置指令 CLC 0CF STC 1CF CMC CF变反(2)DF设置指令 CLD 0DF(串操作的指针移动方向从低到高)STD 1DF(串操作的指针移动方向从高到低)(3)IF设置指令CLI 0IF(禁止INTR中断)STI 1IF(开放INTR中断),57,执行HLT指令时,CPU进入暂停状态,设置该指令通常是为了等待中断。外部中断(包括IF=1时的可屏蔽中断请求INTR及非屏蔽中断请求NMI)或复位信号可让CPU退出暂停状态。HLT不影响标志位。,2.外部同步指令,(1)暂停指令HLT,58,(2)空操作指令NOP,NOP指令不做任何实质性的操作,但占用3个时钟周期,然后执行下一条指令。多用于延时或预留存储空间(占位子)。,59,作业:,

    注意事项

    本文(《程序控制指令》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开