1、第三章第三章 80C51单片机指令系统单片机指令系统本讲教学内容:本讲教学内容:控制转移类指令控制转移类指令磨砺当如百炼之金,急就者,非邃养;控制转移类指令控制转移类指令程序的顺序执行是由程序的顺序执行是由PC自动加自动加1来实现的来实现的,但在,但在应用系统中,往往会遇到一些情况,需要强迫改变程应用系统中,往往会遇到一些情况,需要强迫改变程序执行顺序,比如调用子程序,比如根据检测值与设序执行顺序,比如调用子程序,比如根据检测值与设定值的比较结果要求程序转移到不同的分支入口等。定值的比较结果要求程序转移到不同的分支入口等。要改变程序的执行顺序进行分支转向,应通过强迫修要改变程序的执行顺序进行分
2、支转向,应通过强迫修正正PC值得方法来实现,这就是控制转移类指令的基本值得方法来实现,这就是控制转移类指令的基本功能。功能。80C5设有丰富的控制转移指令,可分为无条件转设有丰富的控制转移指令,可分为无条件转移指令、移指令、条件转移指令条件转移指令、循环转移指令、子程序调用、循环转移指令、子程序调用和返回指令及空操作指令等。和返回指令及空操作指令等。采用助记符有:采用助记符有:AJMP、LJMP、SJMP、JZ、JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP等等1313种。种。磨砺当如百炼之金,急就者,非邃养;条件转移指令仅仅在满足指令中规定的条件条件转移指令仅仅
3、在满足指令中规定的条件(如累如累加器内容是否为零,两个操作数是否相等加器内容是否为零,两个操作数是否相等)时才执行无时才执行无条件转移,否则程序顺序执行。条件转移,否则程序顺序执行。6条指令可分为条指令可分为累加器判零转移指令累加器判零转移指令、数值比较数值比较转移指令转移指令和和减减1条件转移指令条件转移指令。条件转移指令条件转移指令磨砺当如百炼之金,急就者,非邃养;累加器判零转移指令累加器判零转移指令JZrel;若;若(A)=0,则,则(PC)=(PC+2)+rel;若;若(A)0,则,则(PC)=(PC)+2JNZ rel;若;若(A)0,则,则(PC)=(PC+2)+rel;若;若(A
4、)=0,则,则(PC)=(PC)+2 满足各自条件时,程序转向指定的目标地址执行满足各自条件时,程序转向指定的目标地址执行(相当于执相当于执行行SJMP rel)。当不满足各自条件时,程序顺序往下执行。当不满足各自条件时,程序顺序往下执行。偏移量偏移量rel是用补码形式表示的带符号的是用补码形式表示的带符号的8 位数,因此程序位数,因此程序转移的目标地址为指令前转移的目标地址为指令前128 B或指令后或指令后 127 B。这些指令执行后不影响任何操作数和标志位。这些指令执行后不影响任何操作数和标志位。磨砺当如百炼之金,急就者,非邃养;数值比较转移指令数值比较转移指令 CJNE A,direct
5、,rel CJNE A,data,rel CJNE Rn,data,relCJNE Ri,data,rel其指令格式为:其指令格式为:CJNE(操作数(操作数1),(操作数),(操作数2),),rel数值比较转移指令是三字节指令,是数值比较转移指令是三字节指令,是80C51单片微机单片微机指令系统中仅有的四条三个操作数的指令,在程序设计中非指令系统中仅有的四条三个操作数的指令,在程序设计中非常有用。同时具有比较转移和数值大小比较的功能。常有用。同时具有比较转移和数值大小比较的功能。磨砺当如百炼之金,急就者,非邃养;这组指令的功能是对指定的两操作数进行比较,即这组指令的功能是对指定的两操作数进行
6、比较,即(操作数操作数1)(操作数操作数2),但比较结果均不改变两个操作数,但比较结果均不改变两个操作数的值,仅影响标志位的值,仅影响标志位CY。若不等,程序转移到若不等,程序转移到(PC)十十3加上第三字节带符号加上第三字节带符号 的的8位偏移量(位偏移量(rel)所指向的目标地址;)所指向的目标地址;若若(操作数操作数1)(操作数操作数2),清进位标志(,清进位标志(CY)。)。若若(操作数操作数1)(操作数操作数2),则置位进位标志(,则置位进位标志(CY)。)。值相等,程序继续执行。值相等,程序继续执行。程序转移的范围是从(程序转移的范围是从(PC)3为起始的为起始的127一一128B
7、的单元地址。的单元地址。比如比如 CJNE Rn,#data,rel指令指令 磨砺当如百炼之金,急就者,非邃养;例:温度控制程序例:温度控制程序 某温度控制系统,某温度控制系统,A中存温度采样值中存温度采样值Ta,(20H)=温度下限温度下限值值T20,(30H)=温度上限值温度上限值T30。若。若TaT30,程序转降温,程序转降温JW,若若TaT20,程序转升温,程序转升温SW,若,若T30TaT20程序转程序转FH返回主程返回主程序。序。CJNE A,30H,LOOP AJMP FH ;等于;等于T30,转,转FH LOOP:JNC JW ;大于;大于T30,降温,降温CJNE A,20
8、H,LOOP1 AJMP FH ;等于;等于T20,转,转FH LOOP1:JC SW ;小于;小于T20,升温,升温 FH:-;保温;保温 JW:-;降温降温 SW:-;升温升温磨砺当如百炼之金,急就者,非邃养;DJNZ Rn,relDJNZ direct,rel 指令功能是:每执行一次本指令,先将指定的指令功能是:每执行一次本指令,先将指定的Rn或或direct的内容减的内容减1,再判别其内容是否为,再判别其内容是否为0。若不为。若不为0,转向目标地址,继续执行循环程序;若为转向目标地址,继续执行循环程序;若为0,则结束,则结束循环程序段,程序往下执行。循环程序段,程序往下执行。减减1 1
9、条件转移指令条件转移指令磨砺当如百炼之金,急就者,非邃养;例:某应用系统外扩了例:某应用系统外扩了8K字节字节RAM,要求把内部,要求把内部RAM的的20H2FH单元内容发送到外部单元内容发送到外部RAM的的800H80FH单元中。单元中。执行指令:执行指令:MOV DPTR,#800H MOV R0,#20H MOV R7,#10HAGAIN:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,AGAIN?:?:请将以上循环控制改用请将以上循环控制改用CJNE指令来实现指令来实现?:?:请将以上循环控制改用请将以上循环控制改用JZ指令来实现指令来实现 磨
10、砺当如百炼之金,急就者,非邃养;请看请看Keil C下演示实例,程序段如下:下演示实例,程序段如下:ORG 0000HLJMP MAINORG 0030HMAIN:MOV A,#01HJZ Lable1DEC AJZ Lable2NOPLable1:NOPLable2:MOV B,#0FFHEND磨砺当如百炼之金,急就者,非邃养;指令指令 SJMP rel AJMP addr11 LJMP addrl6 JMP ADPTR 这类指令的功能是程序这类指令的功能是程序无条件地转移到无条件地转移到各自指定各自指定的目标地址去执行,不同的指令形成的目标地址不同。的目标地址去执行,不同的指令形成的目标地
11、址不同。无条件转移指令无条件转移指令磨砺当如百炼之金,急就者,非邃养;1.长转移指令长转移指令 LJMP addr16该指令提供该指令提供16位地址,目标地址由指令第二字位地址,目标地址由指令第二字节节(高高8位地址位地址)和第三字节和第三字节(低低8位地址位地址)组成。因此,程组成。因此,程序转向的目标地址可以包含程序存储器的整个序转向的目标地址可以包含程序存储器的整个64 KB空间。空间。例:设(例:设(PC)0123H,标号,标号ADR所指单元地址为所指单元地址为3456H。执行指令执行指令 LJMP ADR执行结果为(执行结果为(PC)3456H程序转向程序转向3456H单元执行。单元
12、执行。磨砺当如百炼之金,急就者,非邃养;绝对转移指令绝对转移指令AJMP addr11 该指令提供该指令提供11位地址,目标地址由指令提供的位地址,目标地址由指令提供的11位地址去取代当前位地址去取代当前PC的低的低11位,形成新的位,形成新的PC值,值,即为本绝对转移地址。因此,程序的目标地址必须包即为本绝对转移地址。因此,程序的目标地址必须包含含AJMP指令后第一条指令的第一个字节指令后第一条指令的第一个字节(即当前即当前PC地址地址)在内的在内的2 KB范围内范围内(即高即高5位地址必须相同位地址必须相同)。磨砺当如百炼之金,急就者,非邃养;例:设(例:设(PC)0456H,标号,标号A
13、DR所指的单元为所指的单元为0123H。执行指令执行指令 AJMP ADR执行结果程序转向为(执行结果程序转向为(PC)0123H。例:例:0000H 21 11 AJMP 0111H;转移有效;转移有效 07FEH 81 10 AJMP 0C10H;当前;当前PC值为值为0800H ;转移有效;转移有效 0100H AJMP 0B11H ;转移无效;转移无效磨砺当如百炼之金,急就者,非邃养;3短转移指令短转移指令:SJMP rel 其目标地址是由当前其目标地址是由当前PC(程序计数器)值和指令的第(程序计数器)值和指令的第二字节提供的二字节提供的8位带符号的相对地址相加而成的。指令位带符号的
14、相对地址相加而成的。指令可转向指令前可转向指令前128 B或指令后或指令后127 B。rel为为8位带符号数。位带符号数。(PC)=(PC)+2+rel 磨砺当如百炼之金,急就者,非邃养;例:例:2100H 80 FE HERE:SJMP HERE rel:2100H2102H=FFFEH。高。高8 8位是位是FFH,表示表示负跳负跳,偏移量为偏移量为FEH(2)。这是一条原地踏步指令。这是一条原地踏步指令。可用作程序结束或中断等待。可用作程序结束或中断等待。当相对地址为当相对地址为FEH(-02)FEH(-02)时,时,SJMPSJMP指令实现原地转圈指令实现原地转圈的运行状态。的运行状态。
15、磨砺当如百炼之金,急就者,非邃养;间接转移指令间接转移指令JMPA+DPTR其目标地址是将累加器其目标地址是将累加器A中的中的8位无符号数与位无符号数与数据指针数据指针DPTR的内容相加而得的内容相加而得(在程序运行时动态决在程序运行时动态决定定)。相加运算不影响累加器。相加运算不影响累加器A和数据指针和数据指针DPTR的原的原内容。若相加的结果大于内容。若相加的结果大于64 KB,则从程序存储器的,则从程序存储器的零地址往下延续。当零地址往下延续。当DPTR的值固定,而给的值固定,而给A赋以不赋以不同的值,即可实现程序的多分支转移。如实现键盘译同的值,即可实现程序的多分支转移。如实现键盘译码
16、散转功能。码散转功能。磨砺当如百炼之金,急就者,非邃养;例:设(例:设(A)5,(,(DPTR)4567H。执行指令为执行指令为 JMP ADPTR执行结果为执行结果为:(PC)(A)(DPTR)05H 4567H456CH程序转向程序转向456CH单元执行。单元执行。磨砺当如百炼之金,急就者,非邃养;绝对调用指令绝对调用指令 ACALLaddr11 无条件地调用首址为无条件地调用首址为addr11处的子程序。操作不影响处的子程序。操作不影响标志位标志位。断点地址自动压栈:把断点地址自动压栈:把PC加加2以获得下一条指令的地以获得下一条指令的地址址(当前当前PC),将这将这16位的地址压进堆栈
17、位的地址压进堆栈(先先PCL,后,后PCH),同时栈指针加同时栈指针加2。然后将指令提供的。然后将指令提供的 11位目标地位目标地址,送入址,送入PC10PC0,而,而 PC15PC11的值不变,程的值不变,程序转向子程序的首地址开始执行。目标地址由指令第序转向子程序的首地址开始执行。目标地址由指令第一字节的高三位和指令第二字节所组成;一字节的高三位和指令第二字节所组成;所调用的子程序的首地址必须与所调用的子程序的首地址必须与ACALL后面指令的后面指令的第一个字节在同一个第一个字节在同一个2 KB区域内。区域内。3.5.4 子程序调用指令子程序调用与返回指令组子程序调用与返回指令组磨砺当如百
18、炼之金,急就者,非邃养;例:设(例:设(SP)60H,(,(PC)0123H,子程序,子程序SUBRTN的首地址为的首地址为0456H。执行指令为执行指令为ACALL SUBRTN 执行结果为(执行结果为(PC)20123H20125H(PC),),将(将(PC)=0125H压入堆栈:压入堆栈:25H压入(压入(SP)161H,01H压入(压入(SP)十)十l62H,此时(,此时(SP)62H。addr11 PC100 ,PC=0456H 磨砺当如百炼之金,急就者,非邃养;长调用指令长调用指令LCALLaddr16 无条件地调用首址为无条件地调用首址为addr16处的子程序。操作不影响标志处的
19、子程序。操作不影响标志位。位。断点地址自动压栈:把断点地址自动压栈:把 PC加加 3以获得下一条指令的地址,以获得下一条指令的地址,将这将这16位的地址压进堆栈(先位的地址压进堆栈(先PCL,后,后PCH),同时栈指针),同时栈指针加加2。将指令第将指令第2和第和第3字节所提供的字节所提供的16位目标地址,送位目标地址,送PC15PC0,程序转向子程序的首地址开始执行。,程序转向子程序的首地址开始执行。所调用的子程序的首地址可以在所调用的子程序的首地址可以在64 KB范围内。范围内。磨砺当如百炼之金,急就者,非邃养;例:设(例:设(SP)60H,(,(PC)0123H,子程序,子程序SUBRT
20、N的首地址为的首地址为3456H。执行指令为执行指令为 LCALL SUBRTN磨砺当如百炼之金,急就者,非邃养;例:设例:设(SP)62H,RAM中的中的(62H)0lH,(61H)26H。子程序子程序SUBRTN的首地址为的首地址为3456H。执行指令:执行指令:LCALL SUBRTN 执行结果:(执行结果:(PC)30123H30126H(PC)。)。将(将(PC)压入堆栈:)压入堆栈:26H压入(压入(SP)l61H中,中,01H压压入(入(SP)1=62H中,此时(中,此时(SP)62H。(PC)=3456H,执行子程序。执行子程序。3.5.5 返回指令磨砺当如百炼之金,急就者,非
21、邃养;思考思考:AJMP LJMP 与与 ACALL LCALL的区别?的区别?磨砺当如百炼之金,急就者,非邃养;3.子程序返回指令子程序返回指令RET 执行时表示结束子程序,返回调用指令执行时表示结束子程序,返回调用指令ACALL或或LCALL的下一条指令的下一条指令(即断点地址即断点地址),继续往下执行。,继续往下执行。执行时将栈顶的断点地址送入执行时将栈顶的断点地址送入PC(先先PCH,后,后PCL),并把栈指针减,并把栈指针减2。3.5.5 返回指令磨砺当如百炼之金,急就者,非邃养;4.中断返回指令中断返回指令RETI 它除了执行从中断服务程序返回中断时保护的断它除了执行从中断服务程序
22、返回中断时保护的断点处继续执行程序点处继续执行程序(类似类似RET功能功能)外,并清除内部相外,并清除内部相应的中断状态寄存器。应的中断状态寄存器。因此,中断服务程序必须以因此,中断服务程序必须以RETI为结束指令。为结束指令。CPU执行执行RETI指令后至少再执行一条指令,才指令后至少再执行一条指令,才能响应新的中断请求。利用这一特点,可用来实现单能响应新的中断请求。利用这一特点,可用来实现单片微机的单步操作。片微机的单步操作。磨砺当如百炼之金,急就者,非邃养;例:设(例:设(SP)62H,中断时断点是,中断时断点是0123H,RAM中的(中的(62H)0lH,(,(61H)23H。执行指令
23、执行指令RETI结果为:(结果为:(SP)60H,PC0123H 程序回到断点程序回到断点0123H处继续执行。清除内部相处继续执行。清除内部相应的中断状态寄存器。应的中断状态寄存器。磨砺当如百炼之金,急就者,非邃养;例:从P1.7引脚输出5个方波MOVR2,#11;5个方波,10个状态LOP:CPLP1.7;P1.7状态变反LCALLDelayDJNZR2,LOPHERE:SJMPHEREDelay:MOVR5,#255LOOP2:MOVR4,#255LOOP1:NOPNOPDJNZR4,LOOP1DJNZR5,LOOP2RET第三章第三章 80C51单片机指令系统单片机指令系统本讲教学内容
24、:本讲教学内容:位操作指令位操作指令磨砺当如百炼之金,急就者,非邃养;布尔(位)操作类指令布尔(位)操作类指令 80C51内部有一个布尔(位)处理器,具有较强内部有一个布尔(位)处理器,具有较强的布尔变量处理能力。的布尔变量处理能力。布尔处理器实际上是一位的微处理机,它以进位布尔处理器实际上是一位的微处理机,它以进位标志标志CY作为位累加器,以内部作为位累加器,以内部RAM的的20H至至2FH单单元及部分特殊功能寄存器为位存储器,以元及部分特殊功能寄存器为位存储器,以P0、P1、P2、P3为位为位I/O。对位地址空间具有丰富的位操作指令,。对位地址空间具有丰富的位操作指令,包括布尔传送指令、布
25、尔状态控制指令、位逻辑操作包括布尔传送指令、布尔状态控制指令、位逻辑操作指令及位条件转移指令。助记符有指令及位条件转移指令。助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等等11种。种。磨砺当如百炼之金,急就者,非邃养;布尔操作类指令中位地址可用以下多种方式表示,这布尔操作类指令中位地址可用以下多种方式表示,这些方式均能为些方式均能为80C51的汇编程序所识别:的汇编程序所识别:直接用位地址直接用位地址0255或或0FFH表示;表示;采用字节地址的位数方式表示,两者之间用采用字节地址的位数方式表示,两者之间用“”隔开,隔开,如:如:20H0;1FH
26、7等等 采用字节寄存器名加位数表示,两者之间用采用字节寄存器名加位数表示,两者之间用“”隔开,隔开,如:如:P15;PSW5等;等;采用位寄存器的定义名称表示,如:采用位寄存器的定义名称表示,如:F0。如如:位地址位地址D5H、F0、D0.5、PSW.5等表示的是同一位。等表示的是同一位。磨砺当如百炼之金,急就者,非邃养;MOV C,bit ;(;(C)(bit)MOV bit,C ;(;(bit)(C)功能:将源操作数(位地址或布尔累加器)送到目功能:将源操作数(位地址或布尔累加器)送到目的操作数(布尔累加器或位地址)中去。的操作数(布尔累加器或位地址)中去。布尔传送指令布尔传送指令磨砺当如
27、百炼之金,急就者,非邃养;例:设(例:设(C)=1,执行指令执行指令:MOV P13,C,执行结果为执行结果为 P13口线输出口线输出“l”。例:设例:设P1口的内容为口的内容为00111010B,执行指令执行指令:MOV C,P13,执行结果为(执行结果为(C)1。3.6.1 布尔传送指令磨砺当如百炼之金,急就者,非邃养;1 位清除(位清除(CLR)指令)指令 CLR C ;(;(C)0 CLR bit ;(;(bit)0 功能:将功能:将C或指定位(或指定位(bit)清)清0。例:例:设设P1口的内容为口的内容为1 1 1 1 1 0 1 0 B,执行指令为,执行指令为CLR P10后,后
28、,(P1)=1 1 1 1 1 0 1 0 B。2 位置位置1(SETB)指令指令 SETB C ;(;(C)l SETB bit ;(;(bit)1 功能:将功能:将C或指定位(或指定位(bit)置)置1。布尔状态控制指令布尔状态控制指令磨砺当如百炼之金,急就者,非邃养;例:设(例:设(C)0,P3口的内容为口的内容为1 1 1 1 1 0 1 0 B。执行指令为执行指令为SETB P30 SETB C 执行结果为(执行结果为(C)1,P301,即,即P31 1 1 1 1 0 1 1 B。3 位取反(位取反(CPL)指令)指令 CPL C ;(;(C)(C)CPL bit ;(;(bit)
29、(bit)功能:将功能:将 C或指定位(或指定位(bit)取反。)取反。例:设(例:设(C)0,P1口的内容为口的内容为0 0 1 1 1 0 1 0 B。执行指令为执行指令为CPL P1.0 CPL C 执行结果为(执行结果为(C)=1,P1.0=l,即,即P00 0 1 1 1 0 1 1 B。磨砺当如百炼之金,急就者,非邃养;1位逻辑位逻辑“与与”(ANL)操作指令)操作指令 ANL C,bit ;(;(C)(C)(bit)ANL C,bit ;(;(C)(C)(bit)功能:将指定位(功能:将指定位(bit)的内容或指定位内容取反后(原内)的内容或指定位内容取反后(原内容不变容不变)与
30、与C的内容进行逻辑与运算,结果仍存于的内容进行逻辑与运算,结果仍存于C中。中。例:设例:设(C)=l,P1口的内容为口的内容为1 1 1 1 1 0 1 1 B,(ACC7)0。执行指令为执行指令为 ANL C,P1.0;(;(C)1 ANL C,ACC.7 ;(;(C)0 执行结果为(执行结果为(C)0。布尔布尔(位位)逻辑操作逻辑操作指令指令磨砺当如百炼之金,急就者,非邃养;1位逻辑位逻辑“与与”(ANL)操作指令)操作指令 ANL C,bit ;(;(C)(C)(bit)ANL C,bit ;(;(C)(C)(bit)功能:将指定位(功能:将指定位(bit)的内容或指定位内容取反后(原内
31、)的内容或指定位内容取反后(原内容不变容不变)与与C的内容进行逻辑与运算,结果仍存于的内容进行逻辑与运算,结果仍存于C中。中。例:设例:设(C)=l,P1口的内容为口的内容为1 1 1 1 1 0 1 1 B,(ACC7)0。执行指令为执行指令为 ANL C,P1.0;(;(C)1 ANL C,ACC.7 ;(;(C)0 执行结果为(执行结果为(C)0。布尔布尔(位位)逻辑操作逻辑操作指令指令磨砺当如百炼之金,急就者,非邃养;2位逻辑位逻辑“或或”(ORL)操作指令)操作指令ORL C,bit ;(;(C)C)十()十(bit)ORL C,/bit;(;(C)(C)十()十(bit)功能:将指
32、定位(功能:将指定位(bit)的内容或指定位内容取反后)的内容或指定位内容取反后(原内容不变)与(原内容不变)与C的内容进行逻辑或运算。结果仍存于的内容进行逻辑或运算。结果仍存于C中。中。例:设例:设(C)1,P1 口的内容为口的内容为1 1 1 1 1 0 1 1B,(ACC7)0。执行的指令为执行的指令为ORL C,P1.0 ;(;(C)=1 ORL C,ACC 7 ;(;(C)=1 执行结果为(执行结果为(C)1。磨砺当如百炼之金,急就者,非邃养;l、布尔累加器条件转移指令、布尔累加器条件转移指令JC rel JNCrel 功能:对布尔累加器功能:对布尔累加器C进行检测,当进行检测,当C
33、1或或C0时,时,程序转向程序转向 当前当前PC值值(转移指令地址转移指令地址+2)与第二字节中与第二字节中带符号的相对地址(带符号的相对地址(rel)之和的目标地址,否则程序)之和的目标地址,否则程序往下顺序执行。因此转移的范围是往下顺序执行。因此转移的范围是128+127 B。布尔(位)条件转移指令布尔(位)条件转移指令磨砺当如百炼之金,急就者,非邃养;例:设(例:设(C)0执行指令:执行指令:JC LABEL1 ;(C)=0,则程序顺序往下执,则程序顺序往下执;行;行 CPL C;(C)=1,程序转,程序转LABEL2 JC LABEL2 ;以后,进位位取反变为;以后,进位位取反变为l,
34、程序转向,程序转向LABEL2单元执行。单元执行。例:设(例:设(C)1。执行指令:执行指令:JNCLABEL1 CLR C JNC LABEL2;以后,进位位清为;以后,进位位清为0,程序转向,程序转向LABEL2单元执行。单元执行。磨砺当如百炼之金,急就者,非邃养;2位测试条件转移指令位测试条件转移指令 JB bit,relJNB bit,rel功能:检测指定位,当位变量分别为功能:检测指定位,当位变量分别为1或或 0时,程序转向当前时,程序转向当前PC值值(转移指令地址转移指令地址+2)与第二字节中带符号的相对地址(与第二字节中带符号的相对地址(rel)之和)之和的目标地址,否则程序往下
35、顺序执行。因此转移的范围是的目标地址,否则程序往下顺序执行。因此转移的范围是128127 B。操作不影响标志位。操作不影响标志位。例:设累加器例:设累加器 A A中的内容为中的内容为FEH(1 1 1 1 1 1 1 0 B)。)。执行指令为执行指令为 JB ACC.0,LABEL1 ;ACC.0=0,程序顺序往下执行,程序顺序往下执行 JB ACC.1,LABEL2 ;ACC.1=1,转,转LABEL2单元执行单元执行磨砺当如百炼之金,急就者,非邃养;例:设累加器例:设累加器A中的内容为中的内容为FEH(1 1 1 1 1 1 1 0 B)执行指令执行指令:JNB ACC.l,LABEL1
36、;ACC.1=1,程序顺序往下执行,程序顺序往下执行 JNB ACC.0,LABEL2 ;ACC.0=0,程序转向程序转向LABEL2 ;单元执行。;单元执行。磨砺当如百炼之金,急就者,非邃养;3位测试条件转移并清位测试条件转移并清0指令指令 JBC rel 功能:检测指定位,当位变量为功能:检测指定位,当位变量为1时,则将该位时,则将该位清清0,且程序转向当前,且程序转向当前PC值值(转移指令地址转移指令地址+2)与第二与第二字节中带符号的相对地址(字节中带符号的相对地址(rel)之和的目标地址,否)之和的目标地址,否则程序往下顺序执行。因此转移的范围是则程序往下顺序执行。因此转移的范围是1
37、28127 B。操作不影响标志位。操作不影响标志位。磨砺当如百炼之金,急就者,非邃养;例:设累加器例:设累加器A中的内容为中的内容为7FH(0 1 1 1 1 1 1 1 B)。)。执行指令执行指令 JBC ACC.7,LABEL1 ;ACC.7=0 JBC ACC.6,LABEL2 ;ACC.6=1,程序转向,程序转向;LABEL2单元执行,单元执行,;并将;并将ACC6位清为位清为0。执行结果执行结果 (A)=3FH(0 0 1 1 1 1 1 1 B)。)。磨砺当如百炼之金,急就者,非邃养;例例11:散转程序设计,根据:散转程序设计,根据A中的数值实现程序散转中的数值实现程序散转 MOV R1,A ;(A)3 RL A ADD A,R1 MOV DPTR ,#TABLE ;散转表首地址送;散转表首地址送DPTR JMP A+DPTR TABLE:LJMP PM0 ;转程序;转程序PM0TABLE3:LJMP PM1 ;转程序;转程序PM1 -PM0:-PM1:-;LJMP是一个三字节指令,因此转移指令入口是一个三字节指令,因此转移指令入口 ;地址相隔;地址相隔3个字节,个字节,A中内容需是中内容需是3的倍数。的倍数。磨砺当如百炼之金,急就者,非邃养;END