3120|3

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

看arm汇编遇到的几个问题,请各位达人讲解,谢谢! [复制链接]

1.汇编程序调用C程序
C_add.c

#include
int g(int a,int b ,int c, int d ,int e)
{
return (a+b+c+d+e);
}

ARM_add.s

AREA ARM_add,CODE ,READONLY
EXPORT ARM_add
IMPORT g
ENTRY

STR LR ,[SP,#-4]!  ;保存返回地址
MOV R0,#1
MOV R1,#2
MOV R2,#3
MOV R3,#4
MOV R4,#5    ;设置参数,R4用数据栈传递   ????为什么只有R4,其他的寄存器呢
STR R4,[SP,#-4]!  ;只有R4,入栈了,其他的呢,
BL g     ;??????如何传递的呢,R0,R1,R2...怎么没有显示的调用呢?结果为什么在R0返回呢?
ADD SP,#4  ;调用数据栈指针,准备返回
LDR PC,[SP],#4
END


2.BLX实现状态切换
AREA ...
CODE32
ARM1   ADR RO,thumb1+1  ;????
        BLX RO   
       ...
thumb1 ADD R1,R3,#1
       ....
       BX LR


thumb1是个标号,ADR指令里面他代表一个地址,+1后,为什么不是讲地址加一。。如
0X00003  +1  =0X0004  呢?
而是把语句标号thumb1所在的地址赋值给R0,末位R0【0】置1,要跳转到THUMB指令集
????

3.目标地址由寄存器Rm表示
此时BLX指令相当于执行操作PC=Rm[0]&OXFFFFFFE,T=Rm[0]&1.....>??????为什么是与1,e的二进制码不是1110吗?
应该是Rm[0]&0.。。。结果只能是1.。但是不能实现ARM--->THUMB转换了?为什么是与1呢。。




谢谢各位了!
此帖出自ARM技术论坛

最新回复

这个R0~R3这四个寄存器是ARM汇编,C混合编程默认传递参数的。不用入栈,他们本身是寄存器。 如果程序多于四个参数,程序就要使用栈传递参数。 在程序中有这么个规定:最好不要让函数多于四个参数,我想就是这个原因,因为使用栈传递参数估计速度会慢点。 类似的说明我记得网上有。楼主找找吧。   详情 回复 发表于 2009-3-2 09:03
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
把ARM的汇编指令多看看
此帖出自ARM技术论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
只回答第一个。
第一个问题跟调用约定有关。ARM中约定函数前四个参数在R0-R3中传递,其余的在栈上传递。用寄存器传递参数的好处是效率高,不涉及外部存储,依赖性也小,有些情况下甚至没有栈用;规定只用4个是因为大多数函数参数不超过4个,寄存器是很宝贵的资源。在R0返回结果也是约定的,就像X86约定在EAX返回结果一样。所谓调用约定只是建议你这么用,因为绝大多数人都会遵守,约定好了大家都方便。如果你的代码不打算调用别人的代码,或者没有别人调用你的代码,你用10个寄存器传参数都没问题,完全放在栈里传递也没问题。
此帖出自ARM技术论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用楼主 RFbenson 的帖子:
1.汇编程序调用C程序
C_add.c

#include
int g(int a,int b ,int c, int d ,int e)
{
return (a+b+c+d+e);
}

ARM_add.s

AREA ARM_add,CODE ,READONLY
EXPORT ARM_add
IMPORT g
ENTRY

STR LR ,[SP,#-4]!  ;保存返回地址
MOV R0,#1
MOV R1,#2
MOV R2,#3
MOV R3,#4
MOV R4,#5    ;设置参数,R4用数据栈传递  ????为什么只有R4,其他的寄存器呢
STR R4,[SP,#-4]!  ;只有R4…

BL g    ;??????如何传递的呢,R0,R1,R2...怎么没有显示的调用呢?结果为什么在R0返回呢?



这个R0~R3这四个寄存器是ARM汇编,C混合编程默认传递参数的。不用入栈,他们本身是寄存器。
如果程序多于四个参数,程序就要使用栈传递参数。

在程序中有这么个规定:最好不要让函数多于四个参数,我想就是这个原因,因为使用栈传递参数估计速度会慢点。

类似的说明我记得网上有。楼主找找吧。



此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表