搜档网
当前位置:搜档网 › 控制转移类指令和位操作指令

控制转移类指令和位操作指令

控制转移类指令和位操作指令
控制转移类指令和位操作指令

控制转移类指令和位操作指令

(一).控制转移类指令

计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。

控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。

控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。

1.无条件转移指令(4条)

LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内

转移,称为长转移指令

AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移

SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号

数,范围-128~127,即可向后跳转128,向前可跳转

127

JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容

加后形成的新地址

例执行指令

LJMP 9100H

不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。

例程序

2000H MOV R0 , #10H ;10H→PC

2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC

┇┇

2006H ┇

2007H ┇

从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。

2.条件转移指令(8条)

条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序

执行下面的指令。

JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行

JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行

CJNE A, direct, rel ;A≠ (direct)转向PC+3+rel→PC且当A>(direct),Cy=0

;当A<(direct),Cy=1

;否则A=(direct),PC+3→PC即顺序执行CJNE A, #data, rel ;A data P转向PC+3+rel→PC且当A >data,Cy=0

;当A

;A=data,PC+3→PC顺序执行

CJNZ Rn, #data, rel ;Rn≠data转向PC+3+rel→PC

;且当Rn>data,Cy=0,当Rn

;Rn=data,PC+3→PC顺序执行

CJNE @Ri,#data, rel ;(Ri) ≠data ,PC+3+rel→PC

;且当(Ri)>data ,Cy=0,当(Ri)

;(Ri)=data, PC+3→PC顺序执行

DJNZ Rn, rel ;Rn-1→Rn ,Rn ≠0转向PC+2+rel→PC

;Rn=0,PC+2→PC顺序执行

DJNZ direct, rel ;(direct)-1→(direct),(direct) ≠0转向 PC+2+rel

→PC

;(direct)=0 ,PC+2→PC顺序执行注意:

1)CJNE类指令借用进位标志Cy作为比较结果的标志位。从指令中可知,目的操作数内容小于原操作数内容Cy置1,反之Cy清0,该类指令多用于分支程序。

2) DJNZ指令执行时Rn或direct先减1,然后再判断Rn或direct内容是否等于0。不为0则转,为0顺序执行。DJNZ用在循环程序中,控制循环次数很方便。

3) JZ和JNZ的操作数只有一个,是对A的内容的进行判断的指令。

例以下程序的循环次数是多少,最后(R0)=?

MOV R0 , #0

LL:┇

DJNZ R0 , LL

分析:由于DJNZ是减1再判断大小的,因为R0=0,所以第一次执行DJNZ R0 , LL后R0=FFH =255,则程序要执行的次数为256次,R0最后的值为0。

解:程序要循环的次数为256次,最后R0=0

3.调用、返回、控操作指令

在程序设计中,常常要把具有一定功能的公用程序编制成子程序。当主程序转至子

程序时用调用指令,而在子程序的最后安排一条返回指令,使执行完子程序后再返回到主程序。

(1) LCALL addr16 ;调用入口地址为addr16的子程序

这是一条长调指令,可调用64KB范围内的子程序,因此,可放在程序的任何位置。

指令的执行过程分两步:第一步把断点(当前执行指令的下一条指令地址)压入堆栈。第二步将调用的子程序的入口地址装入PC。即addr16(16位地址)→PC,转向执行子程序。

(2) ACALL addr11 ;子程序入口地址为addr11的子程序

这是一条短调指令,只能实现2KB范围内的子程序的调用。其指令执行过程与LCALL

指令一样。但是需要注意的是:ACALL中addr11只占用PC的PC.0~PC.10位。

(3) RET ;放在子程序最后,使程序准确返回到主程序断点处执行过程为:(SP)→PC.8~PC.15断点地址高字节送入PC

SP-1→SP,(SP) →PC.0~PC.7断点低字节送入PC,

这时PC中为主程序断点地址,程序准确返回到调用指令的下一条。

例设SP=62H,(62H)=07H,(61H)=30H,执行指令RET

结果:SP=60H,(PC)=0730H,CPU从0730H开始执行程序。

(4) RETI ;中断返回指令

该指令用于中断服务程序,使中断程序结束后准确返回到主程序断点处,执行过程同RET,它还能清除优先级状态。

(5) NOP ;空操作

执行该指令时,CPU只进行取指令、译码,而不进行任何操作,故称为控操作。常用于产生一个机器周期延时。

(二)位操作指令

MCS-51单片机的特色之一是具有很强的位处理功能。位操作指令又称为布尔指令,其功能是对内部RAM中可进行位操作的区域进行位操作。

在进行位操作时,位累加器C即进位标志Cy,位地址是片内RAM字节地址20H~2FH单元中连续的128个位(位地址00H~7FH)和部分功能寄存器。凡SFR中字符等地址能被8整除的特殊功能寄存器都具有可寻址的位地址,其中ACC(位地址E0H~E7H),B(位地址F0H~F7H)和片内RAM 中128个位都可作软件标志或存储位变量。

1. 位数据传送类指令(2条)

MOV C , bit ;(bit) →C,寻址位的状态送入C

MOV bit , C ;C→(bit),C的状态送入位地址中

2. 位修正指令(6条)

CLR C ;0→C,清0累加器

CLR bit ;0→(bit);清0寻址位

CPL C ;/C→C,取反

CPL bit ;(/bit) →(bit),寻址位取反

SETB C ;1→C,C置1

SETB bit ;1→ (bit),寻址位置1

3. 位逻辑运算指令(4条)

ANL C , bit ;C∩(bit) →C,寻址位和C“与”,结果放在C

ANL C , /bit ;C∩(/bit) →C,寻址位的非和C“与”,结果放在C

ORL C , bit ;C∪(bit) →C,寻址位和C“或”,结果放在C

ORL C , /bit ;C∪(bit) →C,寻址位和C的非“或”,结果放在C

4. 位条件转移指令(5条)

JC rel ;C=1转向PC+2+rel→PC

C=0顺序执行PC+2→PC

JNC rel ;C=0转向PC+2+rel→PC

C=1顺序执行PC+2→PC

JB bit , rel ;(bit) =1转向PC+3+rel→PC

(bit) =0顺序执行PC+3→PC

JNB bit , rel ;(bit) =0转向PC+3+rel→PC

(bit) =1顺序执行PC+3→PC

JBC bit , rel ;(bit) =1转向PC+3+rel→PC;同时0→(bit)

(bit) =0顺序执行PC+3→PC

注意:JBC与JB指令区别,前者转移后并把寻址位清0,后者只转移不清0寻址位。

例设P1为输入口,P3.0作输出线,执行下列指令:

MOV C , P1.0 ;(P1.0) →C

ANL C , P1.1 ;(C)∩(P1.1) →C

ANL C , /P1.32 ;(C)∩(/P1.2) →C

MOV P3.0 , C ;C→P3.0

结果是:P3.0=(P1.0) ∩(P1.1) ∩(/P1.2)

例用位操作指令编程计算逻辑方程

P1.5=ACC.0 ∩ (B.0∪P1.2) ∪P1.3

解:MOV C , B.0 ;B.0→C

ORL C , P1.2 ;C∪P1.2→C 即B.0+P1.2→C

ANL C , ACC.0 ;C∩ACC.0→C 即ACC.0∩(B.0∪P1.2)→C

ORL C , P1.3 ;C∪P1.3→C 即 ACC.0∩(B.0∪P1.2)∪P1.3→C

MOV P1.5 , C ;C→P1.5

逻辑及布尔指令和控制转移类指令练习

逻辑及布尔指令和控制转移类指令练习 实验名称: 逻辑及布尔指令和控制转移类指令练习实验目的:1. 熟悉掌握逻 辑及布尔和控制转移指令的功能及编程;2. 熟悉单片机接口中各位信号的逻辑 操作3. 掌握字节数据的拼接、转换及组合。实验要求:按照实验安排准时参 加实验,按照实验步骤操作,仔细观察及记录实验过程及结果,回答实验相关 问题,最终根据实验结果撰写实验指导书。实验内容:1、从教材上任意选择一 程序,将之输入,练习程序调试的基本方法,体会STEP INTO,STEP OVER,运行到光标处,全部运行,设置断点,清除断点,等等基本的调试方 法。2、将教材中关于逻辑操作与控制转移指令分别逐条进行实验,注意体会 指令语法要求以及所执行的操作。3、30H,31H 单元用非压缩BCD 码表示两 位的十进制数,将其转换成十进制数存入32H 单元;将其转换成十六进制数存 入33H 单元。(30H 为高位,31H 为低位)实验过程:1. 熟悉MOV 指令,在KEIL 软件里建立新工程并输入:ORG 0MOV A.#00110000BMOV B.#7FHMOV SP.#07HMOV DPTR.#010FHMOV R0.#A2HMOV A.@R0MOV B.@DPHMOV A.@DPLEND2. 分步运行,观察寄存器A,B,DPTR,堆栈指针SP 和程序计数器PC 的值。3. 30H,31H 单元用非压缩BCD 码表示两位的十进制数,将其转换成十进制数存入32H 单元;将其转换成十六进制数存入33H 单元。(30H 为高位,31H 为低位)输入:ORG 0MOV 30H,#00001000BMOV 31H,#00001001B;用非压缩的BCD 码在30H 和31H 里表示89DMOV A,30HRRC ARRC ARRC ARRC AMOV R2,30HADDC A,R2DA AMOV 33H,AENDtips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

关于第十讲控制转移类指令

第九讲控制转移类指令 教学方法: 讲授法 教学目的: 1、了解控制转移类指令的种类 2、掌握无条件转移指令的特点及应用 3、掌握调用指令的特点及应用 教学重点、难点: 各类指令操作功能循环、移位指令 条件转移指令的特点及应用 主要教学内容(提纲): 一、控制转移类指令的种类 二、无条件转移指令的特点及应用 三、调用指令的特点及应用 复习:逻辑操作指令,单字节:CLR,CPL,RL,RLC,RR,RRC 双字节:ANL,ORL,XRL。 讲授要点 §3-5 控制转移类指令 作用:改变程序计数器PC的值,从而改变程序执行方向。 分为四大类:无条件转移指令;条件转移指令;调用指令;返回指令。 一、无条件转移指令 LJMP addr16 AJMP addr11 SJMP rel JMP @A + DPTR LJMP addr16 ;长跳转 转移目的地址addr16 (PC);0000H ~ FFFFH,64KB AJMP addr11 ;绝对转移 转移目的地址的形成:先(PC)(PC)+ 2; 后PC15 ~ 11不变,PC10 ~ 0 addr10 ~ 0 64KB = 216 =25×211 = 32×2KB 转移目的地址与(PC)+ 2在同一个2KB范围内。

SJMP rel ;短转移,相对寻址。 转移目的地址= (PC)+ 2 + rel, 所以rel = 转移目的地址-(PC)-2 但,实际使用中常写成SJMP addr16,汇编时会自动转换出rel。 JMP @A + DPTR ;间接转移,散转移指令。 转移目的地址= (@A)+ (DPTR) 本指令不影响标志位,不改变@ A 及DPTR中的内容。常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。 例1、设A中为键值,试编写按键值处理相应事件的程序段。 解:MOV DPTR,#KYEG MOV B,#03H MUL AB JMP @A + DPTR · KYEG:LJMP KYEG0 LJMP KYEG1 · 画图比较LJMP、AJMP、SJMP、JMP转移的起点和范围。 二、调用指令 LCALL addr16 ;长调用 ACALL addr11 ;绝对调用 LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程:(PC)(PC)+ 3 (SP)(SP)+ 1 ((SP))(PC7 ~ 0),保护断点地址低字节; (SP)(SP)+ 2 ((SP))(PC15 ~ 8),保存断点地址高字节; (PC)addr16 ,目的地址送PC,转子程序。 例2、设(SP)= 07H,(PC)= 2100H,子程序首地址为3456H,执行: LCALL 3456H MOV A,20H ······ 画出执行过程示意图。 执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H,(PC)= 3456H

第11讲 控制转移类指令(二)教案

第十一讲控制转移类指令 二、条件转移指令 实现按照一定条件决定转移的方向。分三类。 1、判零转移 JZ rel JNZ rel JZ rel ;若(A)= 0 ,则转移,否则顺序执行。 JNZ rel ;若(A)≠0,则转移,否则顺序执行。 转移目的地址= (PC)+ 2 + rel 不影响任何标志位。 例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。 解:MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1:MOVX A,@DPTR JZ LOOP2 MOV @R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2:SJMP LOOP2 2、比较转移指令 功能:比较二个字节中的值,若不等,则转移。 CINE A,#data,rel CJNE A,direct,rel CJNE @Ri,#data,rel CJNE Rn,#data,rel 该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。 转移目的地址= (PC)+ 3 + rel

若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。 该类指令可产生三分支程序: 即,相等分支;大于分支;小于分支。 例2、设P1口的P1.0 ~ P1.3为准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。 解:MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 ~ P1.3不为全1时,返回WAIT MOV A,R2 ······ 3、循环转移指令 DJNZ Rn,rel ;(二字节指令) DINZ direct,rel ;(三字节指令) 本指令也为双功能指令,即减1操作和判断转移操作。 第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。 转移目的地址= (PC)+ 2或3 + rel 例3、将8031内部RAM的40H ~ 4FH单元置初值#A0H ~ #AFH。 解:MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP:MOV @R0,A INC R0 INC A DJNZ R2,LOOP ······ 小结:1、无条件转移指令共有几条? 2、CJNE指令与DJNZ指令有何区别?

控制转移类指令

控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 [1]. 无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址) AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变 SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 这几条指令,如果要他细分析的话,区别较大,但初学者时,可以不理会那么多,统统理解成LJMP标号,也就是跳转到一个标号处,但事实上,JMP标号,在前面的例程中我们已接触过,并且也知道如何来使用了,AJMP和SJMP也是一样,那么这几条指令它们的区别何在呢?在于跳转的范围不一样。好比跳远,LJMP一下就能跳64K那么远(当然近了就更没关系了)。而AJMP最多只能跳2K距离,而SJMP则最多只能跳256这么远,原则上,所有用AJMP或SJMP的地方都可以用LJMP来替代。因此在初学者时,需要跳转时可以全用LJMP。 但是在查表时要注意会出错,因为他们的机器周期不一样,取得的数也不一样。

控制转移类指令分析

控制转移类指令分析 控制转移类指令分析 控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 [1].无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址) AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变 SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 这几条指令,如果要他细分析的话,区别较大,但初学者时,可以不理会那么多,统统理解成LJMP标号,也就是跳转到一个标号处,但事实上,JMP标号,在前面的例程中我们已接触过,并且也知道如何来使用了,AJMP和SJMP也是一样,那么这几条指令它们的区别何在呢?在于跳转的范围不一样。好比跳远,LJMP一下就能跳64K那么远(当然近了就更没关系了)。而AJMP最多只能跳2K距离,而SJMP则最多只

微机原理练习-控制转移类指令

微机原理练习 - 控制转移类指令 一、低难度: 等待P1.0出现低电平 JNB P1.0,$ JB P1.0,$ 原地等待 SJMP $ A减一非0转到L,否则转到L0 DJNZ A,L SJMP L0 If A>0 then goto L else goto L1 JZ L1 JB ACC.0,L1 SJMP L If A>=0 then goto L else goto L1 JB ACC.7,L1 SJMP L If A<0 then goto L else goto L1 JB ACC.7,L SJMP L1 If A<=0 then goto L else goto L1 JZ L JB ACC.0,L SJMP L1 If A=0 then goto L else goto L1 JZ L SJMP L1

If A<>0(<>为不等) then goto L else goto L1 JZ L1 SJMP L 二、中难度: 用判断进位方法处理高字节,进行@R0(2):=@R0(2)+@R1(2) 当标志Flag=1时执行一次子程序Sub A取绝对值 JNB ACC.7,L CPL A INC A 如果A>=数80H则减去数80H CLR ACC.7 将RAM00H~FFH清为0 MOV R0,#0 L:MOV @R0,#0 INC R0 CJNE R0,#00H,L RAM30H~3FH->RAM20H~2FH Dec Dptr MOV A,DPL JNZ L DEC DPH L:DEC DPL Inc R67 CJNE R7,#0FFH,L INC R6 L:INC R7

控制转移类指令

控制转移类指令 ?用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令. ?控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变 说明 ?只有中断返回指令(IRET)改变控制标志位 ?许多转移指令受状态标志位的影响 1.无条件转移指令(JMP 操作数;程序转向label标号指定的地址) ◆寻址方式: 直接寻址方式 转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式 间接寻址方式 转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式 ◆目标地址范围 ?段内(注意转移范围是+ -,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负) ?段内转移——近转移(near) ?转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围) ?不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。 ?段内转移——短转移(short) ?转移范围用一个字节表达,在当前代码段256B范围内转移(-128~+127范围), 只改变IP的值,由8位带符号数给出。 ?段间 段间转移——远转移(far) 从当前代码段跳转到另一个代码段,可以在1MB范围 需要更改CS段地址和IP偏移地址 目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。 注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr或far ptr强制. ?思考: 如果转移超过16BIT,怎么办? 答:变成段间转移。 JMP 1234H 这个指令对否?JMP 12345678H呢? 2、条件转移指令(Jcclable;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行) 注意:1.Jcc本身不是一条指令,它是条件转移指令的统称。 2.操作数label是采用短转移,条件转移只能是短转移。 3.8位位移量是相对于当前IP的,相对寻址方式。 4.Jcc指令为2个字节,条件不满足时的顺序执行,就是当前指令偏移指针IP加。 5.不影响标志,但要利用标。 16条指令分成4种情况: ⑴判断单个标志位状态 ⑵比较无符号数高低

条件转移类指令范例

条件转移类指令范例——方案 将00H~0FH这16个数顺序地置入片内RAM20H~2FH单元中。 一、MOV R0,#20H CLR A LOOP:MOV @R0,A INC A INC R0 DJNZ R7,LOOP SJMP $ 三、MOV R0,#20H MOV A,#0FH MOV 30H,#00H LOOP:MOV @R0,30H INC 30H INC R0 DEC A JNZ LOOP SJMP $ 四、MOV R0,#20H MOV A,#0FH MOV 30H,#00H LOOP:MOV @R0,30H INC 30H INC R0 SUBB A,#01H JNC LOOP SJMP 【例】设(SP)=30H,符号地址PROG1指向程序存储器的5678H单元,当前PC值为0123H。从0123H处执行指令“LCALL PROG1”,分析执行后PC、SP的值和相关存储器的内容。 解:执行过程为: (PC)+3=0123H+3=0126H。 将PC内容压入堆栈:向(SP)+1=31H中压入26H,向(SP)+1=32H中压入01H,(SP)=33H。 将PROG1=5678H送入PC,即(PC)=5678H。程序转向以5678H为首地址的子程序执行。最终执行结果是:(PC)=5678H、(SP)=33H、(31H)=26H、(32H)=01H。 【例】利用DJNZ指令和NOP指令编写一循环程序,实现延时1ms(晶振频率为12MHz)。解:程序如下: DELAY: MOV R1,#0AH ;1μs LOOP: MOV R2,#30H ;1μs DJNZ R2,$ ;2×48μs DJNZ R1,LOOP ;1μs×(1+2×48+2)×10 NOP ;1μs NOP ;1μs NOP ;1μs

控制转移类指令和位操作指令

控制转移类指令和位操作指令 (一).控制转移类指令 计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。 控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。 控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。 1.无条件转移指令(4条) LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内 转移,称为长转移指令 AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移 SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号 数,范围-128~127,即可向后跳转128,向前可跳转 127 JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容 相 加后形成的新地址 例执行指令 LJMP 9100H 不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。 例程序 2000H MOV R0 , #10H ;10H→PC 2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC ┇┇ 2006H ┇ 2007H ┇ 从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。 2.条件转移指令(8条) 条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序 执行下面的指令。 JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行 JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行

第11讲 控制转移类指令(二)

第十一讲控制转移类指令 教学方法: 讲授法 教学目的: 1、了解控制转移类指令的分类 2、掌握条件转移指令的特点及应用 教学重点: 条件转移指令的特点及应用 教学难点: 条件转移指令的特点及应用 教学环节 组织教学:(2分钟)检查学生人数,强调作业要求。 复习提问:1、控制转移指令是如何分类的? 2、无条件转移指令、调用指令分是哪几个? 引入新课: 二、条件转移指令 实现按照一定条件决定转移的方向。分三类。 1、判零转移 JZ rel JNZ rel JZ rel ;若(A)= 0 ,则转移,否则顺序执行。 JNZ rel ;若(A)≠0,则转移,否则顺序执行。 转移目的地址= (PC)+ 2 + rel 不影响任何标志位。 例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。 解:MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1:MOVX A,@DPTR JZ LOOP2 MOV @R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2:SJMP LOOP2 2、比较转移指令 功能:比较二个字节中的值,若不等,则转移。

CINE A,#data,rel CJNE A,direct,rel CJNE @Ri,#data,rel CJNE Rn,#data,rel 该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。 转移目的地址= (PC)+ 3 + rel 若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。 该类指令可产生三分支程序: 即,相等分支;大于分支;小于分支。 例2、设P1口的P1.0 ~ P1.3为准备就绪信号输入端,当该四位为全1时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。 解:MOV A,P1 ANL A,#0FH CJNE A,#0FH,WAIT ;P1.0 ~ P1.3不为全1时,返回WAIT MOV A,R2 ······ 3、循环转移指令 DJNZ Rn,rel ;(二字节指令) DINZ direct,rel ;(三字节指令) 本指令也为双功能指令,即减1操作和判断转移操作。 第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。 转移目的地址= (PC)+ 2或3 + rel 例3、将8031内部RAM的40H ~ 4FH单元置初值#A0H ~ #AFH。 解:MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP:MOV @R0,A INC R0 INC A DJNZ R2,LOOP ······ 小结:1、无条件转移指令共有几条? 2、CJNE指令与DJNZ指令有何区别?

汇编(十五)控制转移类指令一

汇编(十五)——控制转移类指令一 Intel 8086中,程序的执行序列是由代码段寄存器CS 和指令指针IP确定的。CS包含当前指令所在代码段的段地址,IP则是要执行的下一条指令的偏移地址。程序的执行一般是依指令序列顺序执行,但有时候需要改变程序的流程,实现分支程序。控制转移类指令通过修改CS和IP的值改变程序的执行顺序,实现分支。分支程序有时根据某个条件转移执行,有时无条件条转到某条指令执行,转移指令的目标地址是代码段中某个指令的位移量,这个位移量是用标号来指出的。一、标号 标号(过程名亦视为标号)用来说明可执行指令在汇编语言程序中的位置(从这个角度来说,变量应用于说明伪指令的位置)。标号可以作为转移指令(或调用指令CALL)的操作数。和变量类似,标号有三种属性:段(SEGMENT)、位移量(OFFSET)和距离(DISTANCE)。段和位移量属性就是在哪个段、什么位置上定义的标号。标号只要有了定义,这两个属性就自然的产生。如果标号只能在本段中(即标号所定义的段中)用JMP或条件转移指令(或CALL)进行访问,那么必须将这个标号的距离属性定义为NEAR;如果标号能为其他段中的JNMP(或CALL)指令访问,则需将标号的距离属性定义为FAR。标号的距离属性需要再定义标号

时指出。 1、标号的定义 (1)定义距离属性为NEAR的标号 1)距离属性为NEAR的标号可以用隐含的说明,即在标号名后面加上冒号,放在指令前面。如: L1: MOV AX,BX @: ADD AX,100 2)距离属性为NEAR的标号也可以用现实说明,即用LABEL 位指令明显说明,或在EQU位指令中用THIS操作符明显的指出。如: L2 LABEL NEAR MOV CX,5 L3 EQU THIS NEAR AND AX,0FFH (2)定义距离属性为FAR的标号 距离属性为FAR的标号只能显示说明 L4 LABEL FAR MOV AX,DX L5 EQU THIS FAR OR AL,30H (3)同一条指令处可以定义两个距离属性不同的标号,以提高访问标号的灵活性。

相关主题