微机原理3-3指令系统Ⅴ控制转移.ppt_第1页
微机原理3-3指令系统Ⅴ控制转移.ppt_第2页
微机原理3-3指令系统Ⅴ控制转移.ppt_第3页
微机原理3-3指令系统Ⅴ控制转移.ppt_第4页
微机原理3-3指令系统Ⅴ控制转移.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

,第二部分 8086/8088指令系统 四 程序控制转移指令 程序控制转移类指令用来控制程序的执行顺序。程序的执行顺序是由CS和IP确定的 (一)无条件转移指令 JMP (二)条件转移指令 (三)循环控制指令 (四)子程序调用与返回指令 (五)中断指令,(一) 无条件转移指令JMP 格式: JMP OPRD 功能: 若OPRD为16位数,则IPOPRD,实现段内转移; 若OPRD为32位数,则IPOPRD低16, CSOPRD高16,段间转移。 注解: (1)OPRD常是标号Lable,即某条指令的符号地址。 先定义标号,后引用,为“向后引用”; 先引用标号,后定义,为“向前引用”。,(2)该指令有如下5种形式: 、JMP SHORT Lable ;段内短转移 SHORT为短转移运算符(可以省略),标号为短标号8bit,范围不超过-128+127。 执行:IPOFFSET 标号Lable,CS不变。 、JMP NEAR PTR Lable;段内直接转移 NEAR PTR为近距离属性运算符,标号是近标号16bit。范围不超过-32768+32767。 执行:IPOFFSET 标号Lable,CS不变。,、JMP R16 /MEM16;段内间接转移 OPRD是16bit的寄存器或者存储器地址。范围是段内任何地方。 执行:IP(R16),CS内容不变。 、JMP FAR PTR Lable ;段间直接转移 FAR Lable是远距离属性运算符,Lable是远标号,在另一个代码段内。 执行:IPOFFSET Lable,CS SEG Lable。,、JMP MEM32:段间间接转移 MEM32为双字单元的存储器地址,不能够用Reg替代。转移范围可达1MB。 执行:IP(MEM低16,前2字节),CS(MEM高16,后2字节)。,例: JMP SHORT Again ;段内短转移 JMP NEAR PTR Begin ;段内直接转移 JMP WORD PTR BP DI ;段内间接转移 JMP BX ;段内间接转移 JMP FAR PTR Next ;段间直接转移 JMP DWORD PTR BX DI ;段间间接转移,第二部分 8086/8088指令系统 四 程序控制转移指令 (一)无条件转移指令JMP (二)条件转移指令19条 1、基于算术标志位的的条件转移指令10条 JC/JNC JO/JNO JS/JNS JE/JNE(JZ/JNZ) JP/JNP(JPE/JPO) 2、基于无符号数的条件转移指令4条 JA/JNBE JAE/JNB JB/JNAE JBE/JNA 3、基于有符号数的条件转移指令4条 JG/JNLE JGE/JNL JL/JNGE JLE/JNG 4、计数器为0条件转移指令1条 JCXZ (三)循环控制指令 (四)子程序调用与返回指令 (五)中断指令,格式: J SHORT Lable 功能:IP(IP)+disp(8bit) CS 不变 根据FR中标志位来判断是否需要转移。 如满足转移条件,则转移到指定的目标地址。 如不满足转移条件,则顺序执行下一条指令。 注解: (1)全部条件转移指令都是段内直接短转移,转移地址的偏移量限制在-128+127范围内。,(2)条件转移指令中,条件缩写字母的含义是: AAbove 高于 BBelow 低于 CCarry 进位 EEqual 等于 GGreater 大于 LLess 小于 NNot 无 OOver 溢出 SSign 符号 JJump 跳转 PE/POParity Even奇偶性偶/奇,1、基于算术标志位的的条件转移指令,(1)JC有进位/借位转移指令 形式:JC 标号 功能:CF=1转移到标号处执行,否则顺序执行。,(2)JNC无进位/借位转移指令 形式:JNC 标号 功能:CF=0转移到标号处执行,否则顺序执行。,(4)JNO无溢出转移指令 形式:JNO 标号 功能:未溢出(OF=0)转移到标号处执行,否则顺序执行。,(3)JO溢出转移指令 形式:JO 标号 功能:溢出(OF=1)转移到标号处执行,否则顺序执行。,(5)JS负数转移指令 形式:JS 标号 功能:若结果为负(SF=1)转移到标号处执行,否则顺序执行。,(6)JNS正数转移指令 形式:JNS 标号 功能:若结果为正(SF=0)转移到标号处执行,否则顺序执行。,(7)JE/JZ等于转移指令 形式:JE/JZ 标号 功能:若等于(ZF=1)转移到标号处执行,否则顺序执行。,(8)JNE/JNZ不等于转移指令 形式:JNE/JNZ 标号 功能:若不等于(ZF=0)转移到标号处执行,否则顺序执行。,(10)JNP/JPO奇性转移指令 形式:JNP/JPO 标号 功能:若结果的低8位有奇数个“1”(PF=0)转移到标号处执行,否则顺序执行。,(9)JP/JPE偶性转移指令 形式:JP/JPE 标号 功能:若结果的低8位有偶数个“1”(PF=1)转移到标号处执行,否则顺序执行。,该组指令需要检测单个位,常与TEST连用,2、基于无符号数的条件转移指令,(1)JA/JNBE大于/不低于不等于转移指令(AB) 形式:JA/JNBE 标号 功能:若大于( CF=0 且 ZF=0)转移到标号处执行,否则顺序执行。,(2)JAE/JNB大于等于/不低于转移指令(AB) 形式:JAE/JNB 标号 功能:若大于等于( CF=0 或 ZF=1)转移到标号处执行,否则顺序执行。,(4)JBE/JNA低于等于/不高于转移指令(AB) 形式:JBE/JNA 标号 功能:若小于( CF=1 或 ZF=1)转移到标号处执行,否则顺序执行,(3)JB/JNAE低于/不高于不等于转移指令(AB) 形式:JB/JNAE 标号 功能:若小于( CF=1 且 ZF=0)转移到标号处执行,否则顺序执行。,该组指令需要检测CF、ZF位,常与CMP连用,(1)JG/JNLE大于/不小于不等于转移指令(AB) 形式:JG/JNLE 标号 功能:若大于(SF=OF 且 ZF=0)转移到标号处执 行,否则顺序执行。,(2)JGE/JNL大于等于/不小于转移指令(AB) 形式:JGE/JNL 标号 功能:若大于等于(SF=OF 或 ZF=1)转移到标号处 执行,否则顺序执行。,3、基于有符号数的条件转移指令,(3)JL小于/不大于不等于转移指令(AB) 形式:JL/JNGE 标号 功能:若小于(SFOF 且 ZF=0)转移到标号处执 行,否则顺序执行。,(4)JLE小于等于/不大于转移指令(AB) 形式:JLE/JNG 标号 功能:若小于等于(SFOF=1 或 ZF=1)转移到标号处执行,否则顺序执行。,该组指令需要检测SF、OF、ZF位,常与CMP连用,JCXZ计数零转移指令 形式:JCXZ 标号 功能:若CX=0,转移到标号处执行,否则顺序执行。,4、计数器为0条件转移指令,MOV AL,1000H TEST AL,01H JZ NO MOV CL,0 JMP EXIT NO:MOV CL,1 EXIT: HLT,例: 在存储器的数据段存放了1个8位无符号数,偏移地址为1000H,判断它是否偶数。是,则将CL寄存器置1,否则CL置0。,第二部分 8086/8088指令系统 四 程序控制转移指令 (一)无条件转移指令 JMP (二)条件转移指令 (三)循环控制指令 1、LOOP 2、LOOPE/LOOPZ 3、LOOPNE/LOOPNZ (四)子程序调用与返回指令 (五)中断指令,特点: (1)段内短距离相对转移指令,控制程序段的循环执行。 (2)循环次数由CX指定。 1、循环转移指令 LOOP 形式:LOOP short-lable 功能:CXCX-1 , 若(CX)0,则(IP)=(IP)+disp8,转移到目标地址;否则结束循环,继续执行下一句。 注解:功能相当于:DEC CX JNZ short-lable, 但LOOP对FR无影响。,例:求S = 1 + 2 + 3 + 100,MOV CX,100 MOV AX,0 MOV DX,0001H REPEAT:ADD AX,DX INC DX LOOP REPEAT HLT,2、相等(为零)循环转移指令LOOPE/LOOPZ 形式:LOOPE/LOOPZ short-lable 功能: CXCX-1; 若CX0且ZF=1,则(IP)=(IP)+disp8 ,转移到目标地址循环;否则执行下一条指令。,3、不相等(不为零)循环转移指令 LOOPNE/LOOPNZ 形式:LOOPNE/LOOPNZ short-lable 功能:CXCX-1; 若CX0且ZF=0,则(IP)=(IP)+disp8 ,转移到目标地址;否则执行下一条指令。,例:从0B00H单元开始存放了256字节的字串,里面有若干“#”,请寻找到第一个“#”后送入AL,且将其地址送入DX中。 “#”的ASCII码值为23H,MOV CX,0100H ;(CX)256 MOV SI,OAFFH ;(SI)0AFFH CYCLE: INC SI ;(SI)=0B00H CMP SI,23H ;比较,置FR中ZF位 LOOPNE CYCLE ;没找到就循环CYCLE程序段,找到了就执行下一句 MOV AL,SI ;(AL)23H MOV DX, SI ;(DX)(SI) HLT ;暂停,例:100个8位带符号数存放在2000H开始的单元,统计负数,将个数存在NUM单元中。,MOV NUM,0 ;清0 MOV SI,2000H ;赋首地址 MOV CX,100 ;给循环次数 AGAIN: MOV AL,SI ;取被统计数 OR AL,AL ;影响FR的SF JNS NOT-NUM ;非负,转移 INC NUM ;负数数量+1 NOT-NUM:INC SI ;地址指向下一个数 LOOP AGAIN ;CX-1不为0则循环 HLT ;程序暂停,第二部分 8086/8088指令系统 四 程序控制转移指令 (一)无条件转移指令 JMP (二)条件转移指令 (三)循环控制指令 (四)子程序调用与返回指令 1、CALL 2、RET (五)中断指令,定义: 一种非连续而又多次重复的程序段(或叫过程) 特点: 程序中常用到的具有相同功能的部分独立出来形成 。需要时用调用指令CALL进行调用,子程序结束后,用返回指令RET再返回原来调用的地方。 优点: 源程序长度缩短,有利于模块化设计,使程序的编制、阅读和修改都比较方便。,补充: 子 程 序,格式: 子程序定义的格式一般如下: 子程序名 PROC NEAR/FAR 子程序体 RET 子程序名 ENDP 注解: 1、对子程序定义的具体规定如下: “子程序名”必须是一个合法的标识符,并且要前后一致; PROC和ENDP必须是成对出现的关键字,它们分别表示子程序定义开始和结束。,补充: 子 程 序,2、子程序名有3个属性:段值、偏移量和类型。其段值和偏移量对应于子程序的入口地址;子程序的类型有NEAR、FAR之分,其缺省的类型是近调用NEAR型。 3、在编写子程序时,除了要考虑实现子程序程序功能的方法,还要养成编制相应的说明文件的好习惯。其说明信息一般包括以下内容: 子程序功能描述 入口参数和出口参数 子程序中所用寄存器 子程序所采用的算法,补充: 子 程 序,4、调用程序要使用子程序时,仅用语句“CALL 子程序名”即可。此时,调用程序提供给子程序的相应的数据称为子程序的“入口参数”。 子程序接受数据,进行加工、运算、处理,将结果数据(称为“出口参数”)返回调用程序。 调用程序与子程序之间传递参数的方法有: 约定某个存储器单元 Mem 约定某个寄存器 Reg 约定堆栈传递(SS:SP),补充: 子 程 序,1、调用指令CALL 形式:CALL OPRD 功能:先保存断点地址(断点的CS、IP入栈),再用子程序所在的段的段基值和偏移量修改原来的CS、IP值。,(1)若OPRD为16位数时,先保留返回地址IP于栈中: SP(SP)-2 (SS:SP)(IP) 再,修改IP,实现段内转移: IPOPRD(OFFSET PROC) (2)若OPRD为32位数时,先保留返回地址CS:IP于栈中: SP(SP)-2 (SS:SP)(CS) SP(SP)-2 (SS:SP)(IP) 再,修改IP、CS,实现段间转移: IPOPRD低16 CS OPRD高16。,注解: 由于子程可能与主程序同在一个段内,也可能不同在一个段内,与JMP指令类似,调用指令也分如下四种: 段内直接调用 例: CALL 0120H ;调用地址由指令给出. 执行的操作为: (SP)-1:(SP)-2)(IP) ;IP压栈 (SP)(SP)-2 ;修改SP (IP)(IP)+偏移量 ;修改IP,段内间接调用 例:CALL AX;调用地址由AX给出. CALL SI;调用地址由存储器给出. 指令的操作为: (SP)-1:(SP)-2)(IP) (SP)(SP)-2 (IP)(reg16)/(mem16),段间直接调用 例:CALL 2000H:1000H 指令的操作为:先CS后IP (SP)-1,(SP)-2)(CS) ;CS压栈 (SP)(SP)-2 ;修改SP (CS)段地址 ;(CS)给定段地址 (SP)-1,(SP)-2)(IP) ;IP压栈 (SP)(SP)-2 ;修改SP (IP)偏移地址 ; (IP)给定偏址,段间间接调用 例:CALL DWORD PTRDI; 调用地址在DI,DI+1,DI+2,DI+3所指的存储单元中,前两个字节内容为偏移地址,后两个字节内容为段地址. 执行的操作与段间直接调用类似。,2、返回指令 RET 形式1:RET 功 能:从堆栈取断点地址送入IP、CS中。 若为近过程NEAR返回指令,则: (IP)(SP)+1:SP) (SP)(SP)+2 若为远过程FAR返回指令,则: (IP)(SP)+1:SP) (SP)(SP)+2 (CS)(SP)+1:SP) (SP)(SP)+2,形式2:RET n 功 能:带弹出值的返回指令 弹出断点地址(段内返回弹出2字节,段间返回弹出4字节) (IP)(SP)+1:SP) (SP)(SP)+2 或:(IP)(SP)+1:SP) (SP)(SP)+2 (CS)(SP)+1:SP) (SP)(SP)+2 用n(偶数)修改SP:(SP)(SP)+n 用于将执行CALL指令前压入堆栈的一些参数丢弃。,第二部分 8086/8088指令系统 四 程序控制转移指令 (一)无条件转移指令 JMP (二)条件转移指令 (三)循环控制指令 (四)子程序调用与返回指令 (五)中断指令 1、INT 2、IRET 3、INTO,中断: CPU对某一突发事件的响应,它将使CPU暂停正在执行的程序,自动转去处理该突发事件,待CPU处理完该事件后,再返回到原来的断点,继续执行原来的程序。,中断源: 引起中断的原因或来源。 8086/8088CPU可以处理256种类型的中断,这些中断有些来自CPU内部,有些来自CPU外部,因此可以把中断分为内部中断和外部中断两大类。,中断的相关概念,外部中断: 非CPU内部原因产生的中断的统称。 外部中断又分为非屏蔽中断和可屏蔽中断。 可屏蔽中断产生中断请求时, CPU 是否要响应要受标志寄存器IF标志位控制: 如果IF=1(允许中断), 则可屏蔽中断的请求将被CPU响应; 如果IF=0(禁止中断), 则CPU将不响应这类中断。 非屏蔽中断是不受IF限制的, 不论IF是什么, CPU一定要响应非屏蔽中断,中断的相关概念,内部中断: 由CPU内部引起的中断。主要类型有: 1) 除法出错中断:当除数为0或除法中的商过大时, 将产生这一中断。 2) INT0 溢出中断:这是一条软件中断指令, 当执行这个指令时,若由于前面的运算已产生溢出, 使OF=1, 就会产生一个内部中断; 但如果OF=0, 则不会产生中断。 3) INT n中断指令:这是常用的一条软中断指令。操作系统把一些常用的输入输出、文件处理等基本操作, 编制成子程序提供给程序员在编写的源程序时直接调用。调用这些子程序均要使用中断指令INT, 也就是说,系统把这些子程序作为一种中断服务程序, 以内部中断形式来执行这些基本操作。 4) 单步中断: 这是为调试程序提供的强有力手段。 若标志寄存器中单步标志位TF=1, 则CPU将进入单步工作方式, 即每执行一条指令就自动产生内部中断, 暂停执行程序, 以便用户检查程序执行结果。,中断的相关概念,中断号: 为了便于管理8086/8088的256种中断,系统为每一个中断源都分配了一个中断号,其编号为00FF。 0031号中断系统使用 3296号中断被DOS和BIOS使用或保留 128-240号被BASIC使用或保留 其余中断号可以用户自行确定使用,中断的相关概念,中断向量表: 不同的中断源要求的中断处理是不相同的,每一个中断都要有一个中断处理程序。8086/8088 把各中断源所对应的中断处理程序入口地址存放在其中内存最低的1K空间内,建立了一个中断向量表。 每个入口地址由四个字节组成: 两个低字节存放入口地址的偏移量 两个高字节存放入口地址的段地址,中断的相关概念,中断的相关概念,中断向量表内的每个入口地址顺序对应一个中断类型,当有中断产生时, 就可以方便地从表中找到该

温馨提示

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

评论

0/150

提交评论