单片机汇编语言问题
能不能详细讲解一下下面两个题。已知(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,此时返回到哪儿去了?????? 展开
已知(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,此时返回到哪儿去了?????? 展开
展开全部
在调用子程序时,使用LCALL指令时,单片机会自动将当前PC地址值压入堆栈,当执行到RET指令的时候,又会将堆栈里的存储的PC地址值读出。
没有使用LCALL指令,而使用了RET指令,单片机依旧会将当前堆栈的数据当做PC值取出,此时的程序跑到哪里不知道了。
你还可以借此原理巧用RET指令,在执行跳转前将标号地址压入堆栈,然后执行RET指令,就可以实现跳转了,至于怎么跳回就看你怎么设置堆栈或者子程序了。
没有使用LCALL指令,而使用了RET指令,单片机依旧会将当前堆栈的数据当做PC值取出,此时的程序跑到哪里不知道了。
你还可以借此原理巧用RET指令,在执行跳转前将标号地址压入堆栈,然后执行RET指令,就可以实现跳转了,至于怎么跳回就看你怎么设置堆栈或者子程序了。
追问
没搞明白你的回答,那两个题我看书是做出来了的,我主要是想问一下下面那个程序的问题。RET执行后又跑到哪儿去了。
展开全部
像下面的例子中,执行RET后返到哪儿去了呢,
主要是说说这个哈??
假设A>10时就转到LAB处去。程序如下:
CJNE A,#0AH,L1
RET(此时返回到哪儿去了??????)
L1:JNC LAB
RET(此时又返回到哪儿去了??????)
假设A=10时,CJNE不转移,顺序执行,则执行RET,
此时返回到哪儿去了??????
-----------
程序中,有两个 RET。
无论执行哪一个,都是返回到,调用这个子程序
的 LCALL 指令的下一条。
即接着执行 LCALL 下面的指令。
-----------
做为一个子程序,它就是公用的。
它就可以,被不同位置的 LCALL 所调用。
因此,RET,就会返回到不同的地址。
具体是返回到何处,就要看 LCALL 指令位于何处。
主要是说说这个哈??
假设A>10时就转到LAB处去。程序如下:
CJNE A,#0AH,L1
RET(此时返回到哪儿去了??????)
L1:JNC LAB
RET(此时又返回到哪儿去了??????)
假设A=10时,CJNE不转移,顺序执行,则执行RET,
此时返回到哪儿去了??????
-----------
程序中,有两个 RET。
无论执行哪一个,都是返回到,调用这个子程序
的 LCALL 指令的下一条。
即接着执行 LCALL 下面的指令。
-----------
做为一个子程序,它就是公用的。
它就可以,被不同位置的 LCALL 所调用。
因此,RET,就会返回到不同的地址。
具体是返回到何处,就要看 LCALL 指令位于何处。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询