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

下载本文档

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

文档简介

淡泊明智淡泊明智1第二部分8086/8088指令系统四. 程序控制转移指令程序控制转移类指令用来控制程序的执行顺序。程序的执行顺序是由CS和IP确定的

(一)无条件转移指令JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令(五)中断指令第二部分8086/8088指令系统2(一)无条件转移指令JMP

格式:JMPOPRD功能:

若OPRD为16位数,则IPOPRD,实现段内转移;若OPRD为32位数,则IPOPRD低16,CSOPRD高16,段间转移。注解:(1)OPRD常是标号Lable,即某条指令的符号地址。

先定义标号,后引用,为“向后引用”;

先引用标号,后定义,为“向前引用”。(一)无条件转移指令JMP3(2)该指令有如下5种形式:

①、JMPSHORTLable;段内短转移SHORT为短转移运算符(可以省略),标号为短标号8bit,范围不超过-128~+127。执行:IPOFFSET标号Lable,CS不变。②、JMPNEARPTRLable;段内直接转移NEARPTR为近距离属性运算符,标号是近标号16bit。范围不超过-32768~+32767。执行:IPOFFSET标号Lable,CS不变。(2)该指令有如下5种形式:4③、JMPR16

/MEM16;段内间接转移

OPRD是16bit的寄存器或者存储器地址。范围是段内任何地方。

执行:IP(R16),CS内容不变。

④、JMPFARPTRLable;段间直接转移FARLable是远距离属性运算符,Lable是远标号,在另一个代码段内。执行:IPOFFSETLable,CS

SEGLable。③、JMPR16/MEM16;段内间接5⑤、JMPMEM32:段间间接转移MEM32为双字单元的存储器地址,不能够用Reg替代。转移范围可达1MB。执行:IP(MEM低16,前2字节),CS(MEM高16,后2字节)。例:JMPSHORTAgain;段内短转移JMPNEARPTRBegin;段内直接转移JMPWORDPTR[BP][DI];段内间接转移JMPBX;段内间接转移JMPFARPTRNext;段间直接转移JMPDWORDPTR[BX][DI];段间间接转移⑤、JMPMEM32:段间间接转移例:6第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP

(二)条件转移指令19条

1、基于算术标志位的的条件转移指令10条JC/JNCJO/JNOJS/JNSJE/JNE(JZ/JNZ)JP/JNP(JPE/JPO)2、基于无符号数的条件转移指令4条

JA/JNBEJAE/JNBJB/JNAEJBE/JNA3、基于有符号数的条件转移指令4条JG/JNLEJGE/JNLJL/JNGEJLE/JNG4、计数器为0条件转移指令1条JCXZ

(三)循环控制指令(四)子程序调用与返回指令(五)中断指令第二部分8086/8088指令系统7格式:J××SHORTLable功能:IP←(IP)+disp(8bit)CS不变①根据FR中标志位来判断是否需要转移。②如满足转移条件,则转移到指定的目标地址。③如不满足转移条件,则顺序执行下一条指令。注解:(1)全部条件转移指令都是段内直接短转移,转移地址的偏移量限制在-128~+127范围内。格式:J××SHORTLable8(2)条件转移指令中,条件缩写字母的含义是:A—Above高于B—Below低于C—Carry进位E—Equal等于G—Greater大于L—Less小于N—Not无O—Over溢出S—Sign符号J—Jump跳转PE/PO—ParityEven奇偶性偶/奇

(2)条件转移指令中,条件缩写字母的含义是:91、基于算术标志位的的条件转移指令(1)JC—有进位/借位转移指令形式:JC标号功能:CF=1转移到标号处执行,否则顺序执行。(2)JNC—无进位/借位转移指令形式:JNC标号功能:CF=0转移到标号处执行,否则顺序执行。1、基于算术标志位的的条件转移指令(1)JC—有进位/借位转10(4)JNO—无溢出转移指令形式:JNO标号功能:未溢出(OF=0)转移到标号处执行,否则顺序执行。(3)JO—溢出转移指令形式:JO标号功能:溢出(OF=1)转移到标号处执行,否则顺序执行。(4)JNO—无溢出转移指令(3)JO—溢出转移指令11(5)JS—负数转移指令形式:JS标号功能:若结果为负(SF=1)转移到标号处执行,否则顺序执行。(6)JNS—正数转移指令形式:JNS标号功能:若结果为正(SF=0)转移到标号处执行,否则顺序执行。(5)JS—负数转移指令(6)JNS—正数转移指令12(7)JE/JZ—等于转移指令形式:JE/JZ标号功能:若等于(ZF=1)转移到标号处执行,否则顺序执行。(8)JNE/JNZ—不等于转移指令形式:JNE/JNZ标号功能:若不等于(ZF=0)转移到标号处执行,否则顺序执行。(7)JE/JZ—等于转移指令(8)JNE/JNZ—不等于转13(10)JNP/JPO—奇性转移指令形式:JNP/JPO标号功能:若结果的低8位有奇数个“1”(PF=0)转移到标号处执行,否则顺序执行。(9)JP/JPE—偶性转移指令形式:JP/JPE标号功能:若结果的低8位有偶数个“1”(PF=1)转移到标号处执行,否则顺序执行。该组指令需要检测单个位,常与TEST连用(10)JNP/JPO—奇性转移指令(9)JP/JPE—偶性142、基于无符号数的条件转移指令

(1)JA/JNBE—大于/不低于不等于转移指令(A>B)形式:JA/JNBE标号功能:若大于(CF=0且ZF=0)转移到标号处执行,否则顺序执行。(2)JAE/JNB—大于等于/不低于转移指令(A≥B)形式:JAE/JNB标号功能:若大于等于(CF=0或ZF=1)转移到标号处执行,否则顺序执行。2、基于无符号数的条件转移指令(1)JA/JNBE—大于15(4)JBE/JNA—低于等于/不高于转移指令(A≤B)形式:JBE/JNA标号功能:若小于(CF=1或ZF=1)转移到标号处执行,否则顺序执行(3)JB/JNAE—低于/不高于不等于转移指令(A<B)形式:JB/JNAE标号功能:若小于(CF=1且ZF=0)转移到标号处执行,否则顺序执行。该组指令需要检测CF、ZF位,常与CMP连用(4)JBE/JNA—低于等于/不高于转移指令(A≤B)(316(1)JG/JNLE—大于/不小于不等于转移指令(A>B)形式:JG/JNLE 标号功能:若大于(SF=OF且ZF=0)转移到标号处执行,否则顺序执行。(2)JGE/JNL—大于等于/不小于转移指令(A≥B)形式:JGE/JNL 标号功能:若大于等于(SF=OF或ZF=1)转移到标号处执行,否则顺序执行。3、基于有符号数的条件转移指令(1)JG/JNLE—大于/不小于不等于转移指令(A>B)(17(3)JL—小于/不大于不等于转移指令(A<B)形式:JL/JNGE 标号功能:若小于(SF≠OF且ZF=0)转移到标号处执行,否则顺序执行。(4)JLE—小于等于/不大于转移指令(A≤B)形式:JLE/JNG 标号功能:若小于等于(SF≠OF=1或ZF=1)转移到标号处执行,否则顺序执行。该组指令需要检测SF、OF、ZF位,常与CMP连用(3)JL—小于/不大于不等于转移指令(A<B)(4)JLE18JCXZ—计数零转移指令形式:JCXZ 标号功能:若CX=0,转移到标号处执行,否则顺序执行。4、计数器为0条件转移指令

MOVAL,[1000H]TESTAL,01HJZNOMOVCL,0JMPEXITNO:MOVCL,1EXIT:HLT例:在存储器的数据段存放了1个8位无符号数,偏移地址为1000H,判断它是否偶数。是,则将CL寄存器置1,否则CL置0。JCXZ—计数零转移指令4、计数器为0条件转移指令19第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP(二)条件转移指令

(三)循环控制指令1、LOOP2、LOOPE/LOOPZ3、LOOPNE/LOOPNZ(四)子程序调用与返回指令(五)中断指令第二部分8086/8088指令系统20特点:(1)段内短距离相对转移指令,控制程序段的循环执行。(2)循环次数由CX指定。1、循环转移指令LOOP形式:LOOP short-lable功能:CX←CX-1,若(CX)≠0,则(IP)=(IP)+disp8,转移到目标地址;否则结束循环,继续执行下一句。注解:功能相当于:DECCXJNZshort-lable,但LOOP对FR无影响。特点:21例:求S=1+2+3+……+100MOVCX,100MOVAX,0MOVDX,0001HREPEAT:ADDAX,DXINCDXLOOPREPEATHLT例:求S=1+2+3+……+100222、相等(为零)循环转移指令LOOPE/LOOPZ

形式:LOOPE/LOOPZshort-lable功能:CX←CX-1;若CX≠0且ZF=1,则(IP)=(IP)+disp8,转移到目标地址循环;否则执行下一条指令。3、不相等(不为零)循环转移指令LOOPNE/LOOPNZ

形式:LOOPNE/LOOPNZshort-lable功能:CX←CX-1;若CX≠0且ZF=0,则(IP)=(IP)+disp8,转移到目标地址;否则执行下一条指令。2、相等(为零)循环转移指令LOOPE/LOOPZ3、23例:从0B00H单元开始存放了256字节的字串,里面有若干“#”,请寻找到第一个“#”后送入AL,且将其地址送入DX中。

“#”的ASCII码值为23H

MOVCX,0100H;(CX)←256

MOVSI,OAFFH;(SI)←0AFFHCYCLE:INCSI;(SI)=0B00H

CMP[SI],23H;比较,置FR中ZF位

LOOPNE

CYCLE;没找到就循环CYCLE程序段,找到了就执行下一句

MOVAL,[SI];(AL)←23H

MOVDX,SI;(DX)←(SI)

HLT

;暂停例:从0B00H单元开始存放了256字节的字串,里面有若干“24例:100个8位带符号数存放在2000H开始的单元,统计负数,将个数存在NUM单元中。MOVNUM,0;清0MOVSI,2000H;赋首地址MOVCX,100;给循环次数AGAIN:MOVAL,[SI];取被统计数ORAL,AL;影响FR的SFJNSNOT-NUM;非负,转移INCNUM;负数数量+1NOT-NUM:INCSI;地址指向下一个数LOOPAGAIN;CX-1不为0则循环HLT;程序暂停例:100个8位带符号数存放在2000H开始的单元,统计负数25第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP(二)条件转移指令

(三)循环控制指令

(四)子程序调用与返回指令1、CALL2、RET(五)中断指令第二部分8086/8088指令系统26定义:

一种非连续而又多次重复的程序段(或叫过程)特点:

程序中常用到的具有相同功能的部分独立出来形成。需要时用调用指令CALL进行调用,子程序结束后,用返回指令RET再返回原来调用的地方。优点:

源程序长度缩短,有利于模块化设计,使程序的编制、阅读和修改都比较方便。补充:子程序定义:补充:子程序27格式:子程序定义的格式一般如下:

子程序名 PROC [NEAR/FAR]

子程序体RET子程序名 ENDP注解:1、对子程序定义的具体规定如下:①“子程序名”必须是一个合法的标识符,并且要前后一致;②PROC和ENDP必须是成对出现的关键字,它们分别表示子程序定义开始和结束。补充:子程序格式:补充:子程序282、子程序名有3个属性:段值、偏移量和类型。其段值和偏移量对应于子程序的入口地址;子程序的类型有NEAR、FAR之分,其缺省的类型是近调用NEAR型。3、在编写子程序时,除了要考虑实现子程序程序功能的方法,还要养成编制相应的说明文件的好习惯。其说明信息一般包括以下内容:

①子程序功能描述②入口参数和出口参数③子程序中所用寄存器④子程序所采用的算法补充:子程序2、子程序名有3个属性:段值、偏移量和类型。其段值和294、调用程序要使用子程序时,仅用语句“CALL子程序名”即可。此时,调用程序提供给子程序的相应的数据称为子程序的“入口参数”。子程序接受数据,进行加工、运算、处理,将结果数据(称为“出口参数”)返回调用程序。调用程序与子程序之间传递参数的方法有:

①约定某个存储器单元Mem②约定某个寄存器Reg③约定堆栈传递(SS:SP)补充:子程序4、调用程序要使用子程序时,仅用语句“CALL子程301、调用指令CALL

形式:CALL OPRD

功能:先保存断点地址(断点的CS、IP入栈),再用子程序所在的段的段基值和偏移量修改原来的CS、IP值。(1)若OPRD为16位数时,先保留返回地址IP于栈中:SP(SP)-2(SS:SP)(IP)

再,修改IP,实现段内转移:IPOPRD(OFFSETPROC)(2)若OPRD为32位数时,先保留返回地址CS:IP于栈中:SP(SP)-2(SS:SP)(CS)SP(SP)-2(SS:SP)(IP)

再,修改IP、CS,实现段间转移:IPOPRD低16CSOPRD高16。1、调用指令CALL(1)若OPRD为16位数时,先保留31注解:由于子程可能与主程序同在一个段内,也可能不同在一个段内,与JMP指令类似,调用指令也分如下四种:

①段内直接调用例:CALL0120H;调用地址由指令给出.执行的操作为:

((SP)-1:(SP)-2)←(IP);IP压栈

(SP)←(SP)-2;修改SP

(IP)←(IP)+偏移量;修改IP注解:32②段内间接调用例:CALLAX;调用地址由AX给出.CALL[SI];调用地址由存储器给出.指令的操作为:

((SP)-1:(SP)-2)←(IP)(SP)←(SP)-2(IP)←(reg16)/(mem16)②段内间接调用33③段间直接调用例:CALL2000H: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)←给定偏址③段间直接调用34④段间间接调用例:CALLDWORDPTR[DI];调用地址在DI,DI+1,DI+2,DI+3所指的存储单元中,前两个字节内容为偏移地址,后两个字节内容为段地址.执行的操作与段间直接调用类似。④段间间接调用352、返回指令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)+22、返回指令RET36形式2:RETn功能:带弹出值的返回指令①弹出断点地址(段内返回弹出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指令前压入堆栈的一些参数丢弃。形式2:RETn37第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令

(五)中断指令1、INT2、IRET3、INTO第二部分8086/8088指令系统38中断:CPU对某一突发事件的响应,它将使CPU暂停正在执行的程序,自动转去处理该突发事件,待CPU处理完该事件后,再返回到原来的断点,继续执行原来的程序。中断源:

引起中断的原因或来源。8086/8088CPU可以处理256种类型的中断,这些中断有些来自CPU内部,有些来自CPU外部,因此可以把中断分为内部中断和外部中断两大类。

中断的相关概念中断:中断源:中断的相关概念39外部中断:

非CPU内部原因产生的中断的统称。外部中断又分为非屏蔽中断和可屏蔽中断。

可屏蔽中断产生中断请求时,CPU是否要响应要受标志寄存器IF标志位控制:如果IF=1(允许中断),则可屏蔽中断的请求将被CPU响应;如果IF=0(禁止中断),则CPU将不响应这类中断。

非屏蔽中断是不受IF限制的,不论IF是什么,CPU一定要响应非屏蔽中断中断的相关概念外部中断:中断的相关概念40内部中断:由CPU内部引起的中断。主要类型有:

1)除法出错中断:当除数为0或除法中的商过大时,将产生这一中断。

2)INT0溢出中断:这是一条软件中断指令,当执行这个指令时,若由于前面的运算已产生溢出,使OF=1,就会产生一个内部中断;但如果OF=0,则不会产生中断。

3)INTn中断指令:这是常用的一条软中断指令。操作系统把一些常用的输入输出、文件处理等基本操作,编制成子程序提供给程序员在编写的源程序时直接调用。调用这些子程序均要使用中断指令INT,也就是说,系统把这些子程序作为一种中断服务程序,以内部中断形式来执行这些基本操作。

4)单步中断:这是为调试程序提供的强有力手段。若标志寄存器中单步标志位TF=1,则CPU将进入单步工作方式,即每执行一条指令就自动产生内部中断,暂停执行程序,以便用户检查程序执行结果。中断的相关概念内部中断:中断的相关概念41中断号:为了便于管理8086/8088的256种中断,系统为每一个中断源都分配了一个中断号,其编号为00~FF。

00~31号中断系统使用

32~96号中断被DOS和BIOS使用或保留

128--240号被BASIC使用或保留

其余中断号可以用户自行确定使用中断的相关概念中断号:中断的相关概念42中断向量表:不同的中断源要求的中断处理是不相同的,每一个中断都要有一个中断处理程序。8086/8088把各中断源所对应的中断处理程序入口地址存放在其中内存最低的1K空间内,建立了一个中断向量表。每个入口地址由四个字节组成:

两个低字节存放入口地址的偏移量

两个高字节存放入口地址的段地址

中断的相关概念中断向量表:中断的相关概念43中断的相关概念中断号CS255IP255CS254IP254………CS2IP2CS1IP1CS0IP0入口地址0000H0004H0008H03F8H03FCH0400H内存中断向量表内的每个入口地址顺序对应一个中断类型当有中断产生时,就可以方便地从表中找到该中断源所对应的处理程序入口地址。:设中断号为N,则其中断处理程序的入口偏移地址存放在(4*N)字单元中,段地址放在(4*N+2)字单元中。当CPU响应中断后,将把表中对应的四个字节内容分别送入IP和CS,完成程序的转移。中断的相关概念中断号CS255IP255CS254IP244中断指令1、软件中断指令INT

形式:INTn

功能:n为中断号。①SP(SP)-2,(SS:SP)FR;保护FR②IF0,TF0;清除标志位IF和TF,非单步执行

③SP(SP)-2,(SS:SP)CS;当前CS压栈保护④SP(SP)-2,(SS:SP)IP;当前IP压栈保护⑤CS(0000:n4+2),IP(0000:n4);送中断n的处理程序的入口地址到CS、IP寄存器中

中断指令1、软件中断指令INT452、中断返回指令IRET

形式:IRET

功能:从中断处理程序返回,用在中断处理程序最后。①IP(SS:SP),SP(SP)+2;恢复IP②CS(SS:SP),SP(SP)+2;恢复CS③FR(SS:SP),SP(SP)+2;恢复FR现场恢复次序:先入后出后入先出:IP-CS-FR2、中断返回指令IRET463、溢出中断指令INTO形式:INTO功能:该指令检查溢出标志OF,如果OF=1,则启动INT4的中断,给出出错标志,如果OF=0,不做任何操作。

注解:(1)通常INTO指令在有符号数加、减运算指令后。(2)INT4的中断向量为4×4=16=10H3、溢出中断指令INTO47中断和子程序的区别是什么?

(1)子程序的调用直接通过CALL指令来实现,

中断的调用须先把中断服务程序入口地址存入0000:n4起始的4个内存单元,INTn才能正确调用。(2)子程序的返回指令是RET,

中断服务程序的返回指令是IRET。(3)子程序通常是由应用程序的开发者编写的,

中断服务程序是由系统软件设计者编写的。如ROMBIOS内程序、DOS调用程序。(4)子程序是在执行时才调入内存,

中断服务程序是常驻内存的。中断和子程序的区别是什么?48淡泊明智淡泊明智49第二部分8086/8088指令系统四. 程序控制转移指令程序控制转移类指令用来控制程序的执行顺序。程序的执行顺序是由CS和IP确定的

(一)无条件转移指令JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令(五)中断指令第二部分8086/8088指令系统50(一)无条件转移指令JMP

格式:JMPOPRD功能:

若OPRD为16位数,则IPOPRD,实现段内转移;若OPRD为32位数,则IPOPRD低16,CSOPRD高16,段间转移。注解:(1)OPRD常是标号Lable,即某条指令的符号地址。

先定义标号,后引用,为“向后引用”;

先引用标号,后定义,为“向前引用”。(一)无条件转移指令JMP51(2)该指令有如下5种形式:

①、JMPSHORTLable;段内短转移SHORT为短转移运算符(可以省略),标号为短标号8bit,范围不超过-128~+127。执行:IPOFFSET标号Lable,CS不变。②、JMPNEARPTRLable;段内直接转移NEARPTR为近距离属性运算符,标号是近标号16bit。范围不超过-32768~+32767。执行:IPOFFSET标号Lable,CS不变。(2)该指令有如下5种形式:52③、JMPR16

/MEM16;段内间接转移

OPRD是16bit的寄存器或者存储器地址。范围是段内任何地方。

执行:IP(R16),CS内容不变。

④、JMPFARPTRLable;段间直接转移FARLable是远距离属性运算符,Lable是远标号,在另一个代码段内。执行:IPOFFSETLable,CS

SEGLable。③、JMPR16/MEM16;段内间接53⑤、JMPMEM32:段间间接转移MEM32为双字单元的存储器地址,不能够用Reg替代。转移范围可达1MB。执行:IP(MEM低16,前2字节),CS(MEM高16,后2字节)。例:JMPSHORTAgain;段内短转移JMPNEARPTRBegin;段内直接转移JMPWORDPTR[BP][DI];段内间接转移JMPBX;段内间接转移JMPFARPTRNext;段间直接转移JMPDWORDPTR[BX][DI];段间间接转移⑤、JMPMEM32:段间间接转移例:54第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP

(二)条件转移指令19条

1、基于算术标志位的的条件转移指令10条JC/JNCJO/JNOJS/JNSJE/JNE(JZ/JNZ)JP/JNP(JPE/JPO)2、基于无符号数的条件转移指令4条

JA/JNBEJAE/JNBJB/JNAEJBE/JNA3、基于有符号数的条件转移指令4条JG/JNLEJGE/JNLJL/JNGEJLE/JNG4、计数器为0条件转移指令1条JCXZ

(三)循环控制指令(四)子程序调用与返回指令(五)中断指令第二部分8086/8088指令系统55格式:J××SHORTLable功能:IP←(IP)+disp(8bit)CS不变①根据FR中标志位来判断是否需要转移。②如满足转移条件,则转移到指定的目标地址。③如不满足转移条件,则顺序执行下一条指令。注解:(1)全部条件转移指令都是段内直接短转移,转移地址的偏移量限制在-128~+127范围内。格式:J××SHORTLable56(2)条件转移指令中,条件缩写字母的含义是:A—Above高于B—Below低于C—Carry进位E—Equal等于G—Greater大于L—Less小于N—Not无O—Over溢出S—Sign符号J—Jump跳转PE/PO—ParityEven奇偶性偶/奇

(2)条件转移指令中,条件缩写字母的含义是:571、基于算术标志位的的条件转移指令(1)JC—有进位/借位转移指令形式:JC标号功能:CF=1转移到标号处执行,否则顺序执行。(2)JNC—无进位/借位转移指令形式:JNC标号功能:CF=0转移到标号处执行,否则顺序执行。1、基于算术标志位的的条件转移指令(1)JC—有进位/借位转58(4)JNO—无溢出转移指令形式:JNO标号功能:未溢出(OF=0)转移到标号处执行,否则顺序执行。(3)JO—溢出转移指令形式:JO标号功能:溢出(OF=1)转移到标号处执行,否则顺序执行。(4)JNO—无溢出转移指令(3)JO—溢出转移指令59(5)JS—负数转移指令形式:JS标号功能:若结果为负(SF=1)转移到标号处执行,否则顺序执行。(6)JNS—正数转移指令形式:JNS标号功能:若结果为正(SF=0)转移到标号处执行,否则顺序执行。(5)JS—负数转移指令(6)JNS—正数转移指令60(7)JE/JZ—等于转移指令形式:JE/JZ标号功能:若等于(ZF=1)转移到标号处执行,否则顺序执行。(8)JNE/JNZ—不等于转移指令形式:JNE/JNZ标号功能:若不等于(ZF=0)转移到标号处执行,否则顺序执行。(7)JE/JZ—等于转移指令(8)JNE/JNZ—不等于转61(10)JNP/JPO—奇性转移指令形式:JNP/JPO标号功能:若结果的低8位有奇数个“1”(PF=0)转移到标号处执行,否则顺序执行。(9)JP/JPE—偶性转移指令形式:JP/JPE标号功能:若结果的低8位有偶数个“1”(PF=1)转移到标号处执行,否则顺序执行。该组指令需要检测单个位,常与TEST连用(10)JNP/JPO—奇性转移指令(9)JP/JPE—偶性622、基于无符号数的条件转移指令

(1)JA/JNBE—大于/不低于不等于转移指令(A>B)形式:JA/JNBE标号功能:若大于(CF=0且ZF=0)转移到标号处执行,否则顺序执行。(2)JAE/JNB—大于等于/不低于转移指令(A≥B)形式:JAE/JNB标号功能:若大于等于(CF=0或ZF=1)转移到标号处执行,否则顺序执行。2、基于无符号数的条件转移指令(1)JA/JNBE—大于63(4)JBE/JNA—低于等于/不高于转移指令(A≤B)形式:JBE/JNA标号功能:若小于(CF=1或ZF=1)转移到标号处执行,否则顺序执行(3)JB/JNAE—低于/不高于不等于转移指令(A<B)形式:JB/JNAE标号功能:若小于(CF=1且ZF=0)转移到标号处执行,否则顺序执行。该组指令需要检测CF、ZF位,常与CMP连用(4)JBE/JNA—低于等于/不高于转移指令(A≤B)(364(1)JG/JNLE—大于/不小于不等于转移指令(A>B)形式:JG/JNLE 标号功能:若大于(SF=OF且ZF=0)转移到标号处执行,否则顺序执行。(2)JGE/JNL—大于等于/不小于转移指令(A≥B)形式:JGE/JNL 标号功能:若大于等于(SF=OF或ZF=1)转移到标号处执行,否则顺序执行。3、基于有符号数的条件转移指令(1)JG/JNLE—大于/不小于不等于转移指令(A>B)(65(3)JL—小于/不大于不等于转移指令(A<B)形式:JL/JNGE 标号功能:若小于(SF≠OF且ZF=0)转移到标号处执行,否则顺序执行。(4)JLE—小于等于/不大于转移指令(A≤B)形式:JLE/JNG 标号功能:若小于等于(SF≠OF=1或ZF=1)转移到标号处执行,否则顺序执行。该组指令需要检测SF、OF、ZF位,常与CMP连用(3)JL—小于/不大于不等于转移指令(A<B)(4)JLE66JCXZ—计数零转移指令形式:JCXZ 标号功能:若CX=0,转移到标号处执行,否则顺序执行。4、计数器为0条件转移指令

MOVAL,[1000H]TESTAL,01HJZNOMOVCL,0JMPEXITNO:MOVCL,1EXIT:HLT例:在存储器的数据段存放了1个8位无符号数,偏移地址为1000H,判断它是否偶数。是,则将CL寄存器置1,否则CL置0。JCXZ—计数零转移指令4、计数器为0条件转移指令67第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP(二)条件转移指令

(三)循环控制指令1、LOOP2、LOOPE/LOOPZ3、LOOPNE/LOOPNZ(四)子程序调用与返回指令(五)中断指令第二部分8086/8088指令系统68特点:(1)段内短距离相对转移指令,控制程序段的循环执行。(2)循环次数由CX指定。1、循环转移指令LOOP形式:LOOP short-lable功能:CX←CX-1,若(CX)≠0,则(IP)=(IP)+disp8,转移到目标地址;否则结束循环,继续执行下一句。注解:功能相当于:DECCXJNZshort-lable,但LOOP对FR无影响。特点:69例:求S=1+2+3+……+100MOVCX,100MOVAX,0MOVDX,0001HREPEAT:ADDAX,DXINCDXLOOPREPEATHLT例:求S=1+2+3+……+100702、相等(为零)循环转移指令LOOPE/LOOPZ

形式:LOOPE/LOOPZshort-lable功能:CX←CX-1;若CX≠0且ZF=1,则(IP)=(IP)+disp8,转移到目标地址循环;否则执行下一条指令。3、不相等(不为零)循环转移指令LOOPNE/LOOPNZ

形式:LOOPNE/LOOPNZshort-lable功能:CX←CX-1;若CX≠0且ZF=0,则(IP)=(IP)+disp8,转移到目标地址;否则执行下一条指令。2、相等(为零)循环转移指令LOOPE/LOOPZ3、71例:从0B00H单元开始存放了256字节的字串,里面有若干“#”,请寻找到第一个“#”后送入AL,且将其地址送入DX中。

“#”的ASCII码值为23H

MOVCX,0100H;(CX)←256

MOVSI,OAFFH;(SI)←0AFFHCYCLE:INCSI;(SI)=0B00H

CMP[SI],23H;比较,置FR中ZF位

LOOPNE

CYCLE;没找到就循环CYCLE程序段,找到了就执行下一句

MOVAL,[SI];(AL)←23H

MOVDX,SI;(DX)←(SI)

HLT

;暂停例:从0B00H单元开始存放了256字节的字串,里面有若干“72例:100个8位带符号数存放在2000H开始的单元,统计负数,将个数存在NUM单元中。MOVNUM,0;清0MOVSI,2000H;赋首地址MOVCX,100;给循环次数AGAIN:MOVAL,[SI];取被统计数ORAL,AL;影响FR的SFJNSNOT-NUM;非负,转移INCNUM;负数数量+1NOT-NUM:INCSI;地址指向下一个数LOOPAGAIN;CX-1不为0则循环HLT;程序暂停例:100个8位带符号数存放在2000H开始的单元,统计负数73第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP(二)条件转移指令

(三)循环控制指令

(四)子程序调用与返回指令1、CALL2、RET(五)中断指令第二部分8086/8088指令系统74定义:

一种非连续而又多次重复的程序段(或叫过程)特点:

程序中常用到的具有相同功能的部分独立出来形成。需要时用调用指令CALL进行调用,子程序结束后,用返回指令RET再返回原来调用的地方。优点:

源程序长度缩短,有利于模块化设计,使程序的编制、阅读和修改都比较方便。补充:子程序定义:补充:子程序75格式:子程序定义的格式一般如下:

子程序名 PROC [NEAR/FAR]

子程序体RET子程序名 ENDP注解:1、对子程序定义的具体规定如下:①“子程序名”必须是一个合法的标识符,并且要前后一致;②PROC和ENDP必须是成对出现的关键字,它们分别表示子程序定义开始和结束。补充:子程序格式:补充:子程序762、子程序名有3个属性:段值、偏移量和类型。其段值和偏移量对应于子程序的入口地址;子程序的类型有NEAR、FAR之分,其缺省的类型是近调用NEAR型。3、在编写子程序时,除了要考虑实现子程序程序功能的方法,还要养成编制相应的说明文件的好习惯。其说明信息一般包括以下内容:

①子程序功能描述②入口参数和出口参数③子程序中所用寄存器④子程序所采用的算法补充:子程序2、子程序名有3个属性:段值、偏移量和类型。其段值和774、调用程序要使用子程序时,仅用语句“CALL子程序名”即可。此时,调用程序提供给子程序的相应的数据称为子程序的“入口参数”。子程序接受数据,进行加工、运算、处理,将结果数据(称为“出口参数”)返回调用程序。调用程序与子程序之间传递参数的方法有:

①约定某个存储器单元Mem②约定某个寄存器Reg③约定堆栈传递(SS:SP)补充:子程序4、调用程序要使用子程序时,仅用语句“CALL子程781、调用指令CALL

形式:CALL OPRD

功能:先保存断点地址(断点的CS、IP入栈),再用子程序所在的段的段基值和偏移量修改原来的CS、IP值。(1)若OPRD为16位数时,先保留返回地址IP于栈中:SP(SP)-2(SS:SP)(IP)

再,修改IP,实现段内转移:IPOPRD(OFFSETPROC)(2)若OPRD为32位数时,先保留返回地址CS:IP于栈中:SP(SP)-2(SS:SP)(CS)SP(SP)-2(SS:SP)(IP)

再,修改IP、CS,实现段间转移:IPOPRD低16CSOPRD高16。1、调用指令CALL(1)若OPRD为16位数时,先保留79注解:由于子程可能与主程序同在一个段内,也可能不同在一个段内,与JMP指令类似,调用指令也分如下四种:

①段内直接调用例:CALL0120H;调用地址由指令给出.执行的操作为:

((SP)-1:(SP)-2)←(IP);IP压栈

(SP)←(SP)-2;修改SP

(IP)←(IP)+偏移量;修改IP注解:80②段内间接调用例:CALLAX;调用地址由AX给出.CALL[SI];调用地址由存储器给出.指令的操作为:

((SP)-1:(SP)-2)←(IP)(SP)←(SP)-2(IP)←(reg16)/(mem16)②段内间接调用81③段间直接调用例:CALL2000H: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)←给定偏址③段间直接调用82④段间间接调用例:CALLDWORDPTR[DI];调用地址在DI,DI+1,DI+2,DI+3所指的存储单元中,前两个字节内容为偏移地址,后两个字节内容为段地址.执行的操作与段间直接调用类似。④段间间接调用832、返回指令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)+22、返回指令RET84形式2:RETn功能:带弹出值的返回指令①弹出断点地址(段内返回弹出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指令前压入堆栈的一些参数丢弃。形式2:RETn85第二部分8086/8088指令系统四. 程序控制转移指令

(一)无条件转移指令JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令

(五)中断指令1、INT2、IRET3、INTO第二部分8086/8088指令系统86中断:CPU对某一突发事件的响应,它将使CPU暂停正在执行的程序,自动转去处理该突发事件,待CPU处理完该事件后,再返回到原来的断点,继续执行原来的程序。中断源:

引起中断的原因或来源。8086/8088CPU可以处理256种类型的中断,这些中断有些来自CPU内部,有些来自CPU外部,因此可以把中断分为内部中断和外部中断两大类。

温馨提示

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

最新文档

评论

0/150

提交评论