| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4685 人关注过本帖
标题:51单片机 如何在汇编语言中切换寄存器组
只看楼主 加入收藏
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子: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
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:5 
没看明白内容,单从标题而言,子程序开始要做的事情就是对所有需要使用的寄存器入栈,子程序结束之前将入栈保存的寄存器数据依次出栈,恢复原来的数据。否则程序将不能正常运行。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-09-20 09:21
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
收藏
得分:5 
汇编子程序放在特定的地址。要用的时候就用call这个指令就可以。子程序最后要有一个ret指令,这个指令让子程序执行结束后又回跳到call指令之后的那个地址继续。
2015-09-20 13:11
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
call和ret指令仅仅针对IP寄存器数据自动保存和恢复,其他通用寄存器如果子程序要使用,必须在子程序中保存和恢复的。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-09-21 08:02
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
自己用汇编写函数可以比较灵活,参数少时用寄存器,参数多了还是要用栈。不断地用call指令就可以调用你需要的函数了。

能编个毛线衣吗?
2015-09-21 08:45
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
回复 2楼 hu9jj
就是将参数放到r0-r7中啊, 51单片机不是有4组嘛,在第一次调用函数的时候用了一组寄存器了,第二组
调用寄存器的时候第一组的数据不能被覆盖,要用第二组切换。就这么个意思
2015-09-25 08:33
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
回复 6楼 边小白
对。一组寄存器不够用
2015-09-25 08:34
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
这些寄存器应该是分页的,比如页号为0,1,2,3可以访问第0,1,2,3组寄存器。
应该有一个寄存器的功能就是存放当前页号的,它是全局的,不管上面所说的寄存器的页号为多少,功能都是一样的。
类似于功能选择寄存器,SPR? SFR?你看看你的单片机手册是不是叫这个。
2015-10-13 12:12
快速回复:51单片机 如何在汇编语言中切换寄存器组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.072331 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved