77范文网 - 专业文章范例文档资料分享平台

单片机指令系统(7)

来源:网络收集 时间:2019-01-04 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

JMP @A+DPTR

0111 0011 ; (A)+(DPTR)→(PC)

这条指令的转移地址由数据指针DPTR中的16位数据和累加器A中的8位无符号数相加形成,并将结果直接送入PC,不改变累加器和数据指针内容,也不影响标志。利用这条指令可以实现程序的散转。

例3-4.如果累加器A中存放待处理命令编号(0~7),程序存储器中存放着首址标号为TAB的转移指令表,则执行下面的程序,将根据A中命令编号转向相应的命令处理程序。

EX1:

MOV R1,A RL A ADD A,R1

; ; ;(A)×3

;转移表首址→DPTR

MOV DPTR,#TAB JMP @A+DPTR

TAB:

LJMP PROG0 LJMP PROG1 LJMP PROG2 LJMP PROG3 LJMP PROG4 LJMP PROG5 LJMP PROG6 LJMP PROG7

;跳转到((A)+(DPTR))间址单元 ;转向命令0处理入口 ;转向命令1处理入口 ;转向命令2处理入口 ;转向命令3处理入口 ;转向命令4处理入口 ;转向命令5处理入口 ;转向命令6处理入口 ;转向命令7处理入口

2. 调用子程序指令(LCALL、ACALL、RET)

在程序设计中,常常把具有一定功能的公用程序段编制成子程序。当主程序转至子程序时用调用指令,而在子程序的最后安排一条返回指令,使执行完子程序后再返回主程序。为保证正确返回,每次调用子程序时自动将下条指令地址保存到堆栈,返回时按先进后出的原则再把地址弹出至PC中。

31

(1)绝对调用指令

汇编指令格式 机器码格式 操 作

a10a9a8 1 0001 ACALL addr11 ; (PC)+2→(PC) a7~a0 (SP)+1→(SP) (PC7~0)→((SP)) (SP)+1→(SP) (PC15~8)→((SP)) Addr11→PC10~0 PC15~11不变

这条指令无条件地调用位于指令所指出地址的程序。指令执行时PC加2,获得下条指令的地址,并把这16位地址压入堆栈,栈指针加2。然后把指令中的a10~a0值送入PC中的PC10

0

位,PC的P15~P11不变,获得子程序的起始地址(即

PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0)转向执行子程序。所用的子程序的起始地址必须与ACALL后面一条指令的第一个字节在同一个2KB区域的存储器区内。指令的操作码与被调用的子程序的起始地址的页号有关。见表3-1。

例如:设(SP)=60H,标号地址HERE为1234H,子程序SUB的入口地址为1345H,执行指令:

HERE: ACALL SUB

结果:(SP)=62H,堆栈区内(61H)=36H,(62H)=12H,(PC)=1345H。 指令的机器码为71H,45H。

(2)长调用指令

汇编指令格式 机器码格式 操 作

0001 0010 LCALL addr16 ; (PC)+3→(PC)

a15~a8

32

a7~ a0 (SP)+1→(SP)

(PC7~0)→((SP)) (SP)+1→(SP) (PC15~8)→((SP))

addr16→(PC)

LCALL addr16是一条三字节指令,它提供16位目标地址,以调用64KB范围内所指定的子程序。执行这条指令时先把PC内容加3以获得下一条指令的首地址,并将该地址作为返回地址压入堆栈(先压入低位地址PC7~0,后压入高位地址PC15~8),然后将指令中的16位目的地址addr16送入程序计数器PC,从而使程序去执行被调用的子程序。指令执行后不影响任何标志。

例如:设(SP)=2FH,标号BEGIN的地址为1000H,标号FUNC的地址为2300H,执行指令: BEGIN: LCALL FUNC

结果:(SP)=31H,(30H)=03H,(31H)=10H,(PC)=2300H。

(3)返回指令

1)子程序返回指令

汇编指令格式 机器码格式 操 作

0010 0010 RET ; ((SP))→(PC15~8)

(SP)-1→(SP) ((SP))→(PC7~0) (SP)-1→(SP)

RET是子程序返回指令,RET指令通常安排在子程序的末尾。当程序执行到本指令时表示子程序执行结束,使程序能从子程序返回到主程序,继续下面指令的执行。因此,它的主要功能是把栈顶相邻两个单元的内容(断点地址)弹出送到PC,SP的内容减去2,程序返回到PC值所指的指令处执行。

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

33

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

2)、中断返回指令

汇编指令格式 机器码格式 操 作

0011 0010 RETI ; ((SP))→(PC15~8)

(SP)-1→(SP) ((SP))→(PC7~0) (SP)-1→(SP)

这条指令的功能与RET指令相类似,但不能用RET指令来替代。通常安排在中断服务程序的最后。它的应用在中断节中讨论。

3. 条件转移指令

条件转移指令是根据某种特定条件发生转移的指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面的指令。目的地址在下一条指令的起始地址为中心的256个字节范围中(-128B~127B)。当条件满足时,先把PC加到指向下一条指令的第一个字节地址,再把相对目的地址的偏移量加到PC上,计算出转向地址。

(1)判零转移指令

汇编指令格式 机器码格式 操 作

0110 0000 JZ rel ; 相对地址(rel) (PC)+2→(PC)

若(A)=0,则(PC)=(PC)+rel; 若(A)≠0,则顺序执行程序。

0111 0000 JNZ rel ; (PC)+2→(PC)

相对地址( rel ) 若(A)≠0,则(PC)=(PC)+rel; 若(A)=0,则顺序执行程序。

34

(2)比较不相等转移指令

汇编指令格式 机器码格式 操 作

1011 0101 CJNE A,direct,rel ; (PC)+3→(PC)

direct 若(A)>(direct),则(PC)+rel→(PC),

且0→CY;

上述两条指令的功能是: JZ rel JNZ rel

; 如果累加器ACC的内容为零,则执行转移。

; 如果累加器ACC的内容不为零,则执行转移。

相对地址(rel) 若(A)<(direct),则(PC)+rel→(PC),

且1→CY;

若(A)=(direct),则程序顺序执行,

且0→CY。

1011 0100 CJNE A,#data,rel ; (PC)+3→PC

data 若(A)>data,则(PC)+rel→(PC),

且0→CY;

相对地址(rel) 若(A)

且1→CY;

若(A)= data,则程序顺序执行,

且0→CY。

1011 1rrr CJNE Rn,#data,rel ; (PC)+3→(PC)

data

rel) 相对地址(若(Rn)>data,则(PC)+rel→(PC),

35

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库单片机指令系统(7)在线全文阅读。

单片机指令系统(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/403679.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: