搜索
编程论坛
→
开发语言
→
『 汇编论坛 』
→ 51单片机 如何在汇编语言中切换寄存器组
标题:
51单片机 如何在汇编语言中切换寄存器组
只看楼主
wsws23
等 级:
论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
结帖率:
81.82%
楼主
已结贴
√
问题点数:20 回复次数:8
51单片机 如何在汇编语言中切换寄存器组
即主函数调用了一个有参数的子函数,子函数中有调用了一个有参数的子函数
如何用汇编实现对子函数的调用呢?
随便举个例子:
void delay(int i);
{}
void send(char j);
{
int i;
delay(i);
}
void main()
{ char a;
send(a);
}
大概就是这么个意思,求大神指点
搜索更多相关主题的帖子:
单片机
寄存器
如何
2015-09-19 14:07
hu9jj
来 自:红土地
等 级:
贵宾
威 望:
396
帖 子:11713
专家分:43267
注 册:2006-5-13
第
2
楼
得分:5
没看明白内容,单从标题而言,子程序开始要做的事情就是对所有需要使用的寄存器入栈,子程序结束之前将入栈保存的寄存器数据依次出栈,恢复原来的数据。否则程序将不能正常运行。
活到老,学到老! http://www. E-mail:hu-jj@
2015-09-20 09:21
nooomoon
等 级:
新手上路
帖 子:13
专家分:5
注 册:2015-9-2
第
3
楼
得分:5
汇编子程序放在特定的地址。要用的时候就用call这个指令就可以。子程序最后要有一个ret指令,这个指令让子程序执行结束后又回跳到call指令之后的那个地址继续。
2015-09-20 13:11
hu9jj
来 自:红土地
等 级:
贵宾
威 望:
396
帖 子:11713
专家分:43267
注 册:2006-5-13
第
4
楼
得分:0
call和ret指令仅仅针对IP寄存器数据自动保存和恢复,其他通用寄存器如果子程序要使用,必须在子程序中保存和恢复的。
活到老,学到老! http://www. E-mail:hu-jj@
2015-09-21 08:02
wmf2014
等 级:
贵宾
威 望:
216
帖 子:2039
专家分:11273
注 册:2014-12-6
第
5
楼
得分:5
自己用汇编写函数可以比较灵活,参数少时用寄存器,参数多了还是要用栈。不断地用call指令就可以调用你需要的函数了。
能编个毛线衣吗?
2015-09-21 08:45
wsws23
等 级:
论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
第
6
楼
得分:0
回复 2楼 hu9jj
就是将参数放到r0-r7中啊, 51单片机不是有4组嘛,在第一次调用函数的时候用了一组寄存器了,第二组
调用寄存器的时候第一组的数据不能被覆盖,要用第二组切换。就这么个意思
2015-09-25 08:33
wsws23
等 级:
论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
第
7
楼
得分:0
回复 6楼 边小白
对。一组寄存器不够用
2015-09-25 08:34
wfoo
等 级:
论坛游侠
威 望:
7
帖 子:120
专家分:134
注 册:2011-8-6
第
8
楼
得分:0
这些寄存器应该是分页的,比如页号为0,1,2,3可以访问第0,1,2,3组寄存器。
应该有一个寄存器的功能就是存放当前页号的,它是全局的,不管上面所说的寄存器的页号为多少,功能都是一样的。
类似于功能选择寄存器,SPR? SFR?你看看你的单片机手册是不是叫这个。
2015-10-13 12:12
9
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-457476-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 1.401050 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved