c语言转化为arm汇编指令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言转化为arm汇编指令相关的知识,希望对你有一定的参考价值。

If(a==0||b==1) c=d+e

(2) if ((a= = b)&&(c= = d))&&(e= =f) g++;

ARM的话要配置外设的,而且有使用手册,一般用的话查一下使用手册就可以了。 参考技术A 额。。。。
你可以用编译器编译一下,然后调试看下汇编代码的。。。追问

不是arm的

追答

用ADS1.2,armgcc,不就得了

本回答被提问者和网友采纳
参考技术B 1.汇编程序访问C语言全局变量
全局变量只能通过地址间接调用,为了访问C语言中全局变量,首先要通过extern伪指令引入全局变量,然后将其地址装入寄存器中。
对于unsigned char类型,使用LDRB/STRB访问;
对于unsigned short类型,使用LDRH/STRH访问;
对于unsigned int类型,使用LDR/STR访问;
对于char类型,使用LDRSB/STRSB访问;
对于short类型,使用LDRSH/STRSH访问;
例子:
.text
.global asmsubroutine
.extern globvar
asmsubroutine:
LDR R1,=globvar
LDR R0,[R1]
ADD R0,R0,#2
STR R0,[R1]
MOV PC,LR
.end
2.C程序调用汇编程序
C程序调用汇编程序首先通过extern声明要调用的汇编程序模块,声明中形参个数要与汇编程序模块中需要的变量个数一致,且参数传递要满足ATPCS规则,然后在C程序中调用。
例子:
#include<stdio.h>
extern void *strcopy(char*d,char*s);//模块声明
int main()

char*srcstr="first";
char*dststr="second";
strcopy(dststr,srcstr);//汇编模块调用;

.text
.global strcopy
Strcopy:
LDRB R2,[R1],#1
STRB R2,[R0],#1
CMP R2,#0
BNE Sstcopy
MOV PC,LR
.end
汇编程序调用C程序
在调用之前必须根据C语言模块中需要的参数个数,以及ATPCS参数规则,完成参数传递,即前四个参数通过R0-R3传递,后面的参数通过堆栈传递,然后再利用B、BL指令调用。
例子:
int g(int a,int b,int c,int d,int e)//C语言函数原型

return(a+b+c+d+e);

汇编语言完成是求i+2i+3i+4i+5i的结果;
.global _start
.text
_start:
.extern g ;引入c程序
STR LR,SP,-#4!;保存PC
ADD R1,R0,R0
ADD R2,R1,R0
ADD R3,R1,R2
STR R3,SP,#-4!
ADD R3,R1,R1
BL g ;调用C函数g
ADD SP,SP,#4
LDR PC,[SP],#4
.end
return(0);

以上是关于c语言转化为arm汇编指令的主要内容,如果未能解决你的问题,请参考以下文章

ARM汇编伪指令介绍

嵌入式:ARM内嵌汇编及C和ARM汇编相互调用

ARM 汇编语言指令

汇编语言ARM扩展资料汇编语言开发

汇编语言ARM扩展资料汇编语言开发

GNU ARM 汇编基础笔记