单片机汇编语言问题

能不能详细讲解一下下面两个题。已知(SP)=25H,(PC)=2345H,(24H)=12H,(25H)=34H,(26H)=56H。问此时执行“RET”指令后,(SP)... 能不能详细讲解一下下面两个题。
已知(SP)=25H,(PC)=2345H,(24H)=12H,(25H)=34H,(26H)=56H。问此时执行“RET”指令后,(SP)=?(PC)=?
若(SP)=25H,(PC)=2345H,标号LABEL所在的地址为3456H。问执行长调用指令“LCALL LABEL”后,堆栈指针和堆栈的内容发生什么样变化?PC的值等于什么?
RET到底怎么用,它是返回指令,返到哪儿去了。像下面的例子中,执行RET后返到哪儿去了呢,主要是说说这个哈??
假设A>10时就转到LAB处去。程序如下:
CJNE A,#0AH,L1
RET(此时返回到哪儿去了??????)
L1:JNC LAB
RET(此时又返回到哪儿去了??????)
假设A=10时,CJNE不转移,顺序执行,则执行RET,此时返回到哪儿去了??????
展开
 我来答
百度网友656331e
2014-12-29 · TA获得超过880个赞
知道小有建树答主
回答量:586
采纳率:0%
帮助的人:318万
展开全部
在调用子程序时,使用LCALL指令时,单片机会自动将当前PC地址值压入堆栈,当执行到RET指令的时候,又会将堆栈里的存储的PC地址值读出。
没有使用LCALL指令,而使用了RET指令,单片机依旧会将当前堆栈的数据当做PC值取出,此时的程序跑到哪里不知道了。
你还可以借此原理巧用RET指令,在执行跳转前将标号地址压入堆栈,然后执行RET指令,就可以实现跳转了,至于怎么跳回就看你怎么设置堆栈或者子程序了。
追问
没搞明白你的回答,那两个题我看书是做出来了的,我主要是想问一下下面那个程序的问题。RET执行后又跑到哪儿去了。
做而论道
高能答主

2015-01-27 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
像下面的例子中,执行RET后返到哪儿去了呢,
主要是说说这个哈??
假设A>10时就转到LAB处去。程序如下:
CJNE A,#0AH,L1
RET(此时返回到哪儿去了??????)

L1:JNC LAB
RET(此时又返回到哪儿去了??????)

假设A=10时,CJNE不转移,顺序执行,则执行RET,
此时返回到哪儿去了??????
-----------
程序中,有两个 RET。
无论执行哪一个,都是返回到,调用这个子程序
的 LCALL 指令的下一条。
即接着执行 LCALL 下面的指令。
-----------
做为一个子程序,它就是公用的。
它就可以,被不同位置的 LCALL 所调用。
因此,RET,就会返回到不同的地址。

具体是返回到何处,就要看 LCALL 指令位于何处。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式