C51单片机汇编语言
请教各位;我写的一段汇编程序:alarm:clrp0.0ret我使用的是条件判跳指令jbp3.5,alarm,当程序执行到ret之后,程序指针pc却每次都跑到0(程序开头...
请教各位;我写的一段汇编程序:
alarm:
clr p0.0
ret
我使用的是条件判跳指令jb p3.5,alarm,当程序执行到ret之后,程序指针pc却每次都跑到0(程序开头)那里了,这是怎么回事?
我感觉程序应该是继续向下执行才对 展开
alarm:
clr p0.0
ret
我使用的是条件判跳指令jb p3.5,alarm,当程序执行到ret之后,程序指针pc却每次都跑到0(程序开头)那里了,这是怎么回事?
我感觉程序应该是继续向下执行才对 展开
8个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机是一种集成电路芯片。又称单片微控制器,是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯片就成了一台计算机。特点是体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
ret 是子程序返回指令,他是配合CALL 用的。
CALL 是调用子程序的语句。
你把RET拿掉就会往下执行了。
多看看指令吧。
CALL 是调用子程序的语句。
你把RET拿掉就会往下执行了。
多看看指令吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ACALL
LCALL
JMP
AJMP
LJMP
跳转 跟 调用子程序 要弄明白.
LCALL
JMP
AJMP
LJMP
跳转 跟 调用子程序 要弄明白.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的指令出错了,当你运行JB跳转时,他不是子程序跳转,而是直接跳转到你指向的地址,不是象CALL语句那样调用是子程序,而当你将ALARM程序执行完后,在执行RET语句的时候,你就可能跳到从你堆栈中取出的两个数据组成的地址,这个地址是可能改变的,如果你的语句很短,没有调用子程序,那就可能从堆栈中取出的数字组成的地址0000h,那就是回到程序的最开始执行的地方。所以当你执行完ALARM之后你应该用JMP语句跳转到你需要到的地方!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
并不是每次都跑到00H,ret指令的功能是把PC指针从栈堆里出来,它是配合LCALL和ACALL使用,因为LCALL和ACALL的功能是把PC指针先入栈,再跳转,所以PC指针在栈堆里,还要RET指令返回。而你的是条件跳转指令,功能是跳到目的程序段,要返回可以用SJMP或LJMP
例如:
jb p3.5,alarm
next:
mov a,#0
。。。。。
alarm:
clr p0.0
SJMP next
这样就返回了
例如:
jb p3.5,alarm
next:
mov a,#0
。。。。。
alarm:
clr p0.0
SJMP next
这样就返回了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
RET是子程序返回指令,它只是用在子程序里,主函数里不会有这个指令出现的,所以把它放在主函数里当然会出错啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询