arm汇编跟汇编、C语言的区别

Python014

arm汇编跟汇编、C语言的区别,第1张

不一样,汇编主要是要了解CPU指令及用法。

我们常说的是PC机的x86汇编,指令是x86的复杂指令集。

arm汇编是arm的精简指令集,比x86容易学,程序格式倒是和x86汇编差不多。你下载一份arm的手册就可以了解了。

C语言ARM的和x86的差不多,除了对硬件寄存器操作不同,其它语法和流程都一样。

回答补充:

arm汇编程序每一行是指定arm

core执行一条指令,每条指令都是硬件相关。

LDR

R3,

#1

用LDR指令将数值1放入R3寄存器准备参与运算

C语言与arm指令无关,只与逻辑运算有关,指定硬件地址的操作才与硬件相关;如果用arm编译器来编译,每行可能编译出1到多条arm指令。

i++

//变量

i

递增1

等效于

LDR

R3,#1

用LDR指令将数值1放入R3寄存器准备参与运算

ADD

R2,

R2,

R3

用ADD指令将R2、R3寄存器里的数值相加后放回R2寄存器

以上等效汇编的R2、R3寄存器只是为了举例,C语言不像汇编,不需要由程序员指定用哪个寄存器参与运算,编译器编译时会根据程序结构自动判断选择。

强调mcuos有错,“c语言被编译器编译的时候会最终解释为汇编语言的”,无论是c语言还是汇编语言,编译器编译后的结果是机器执行码,很多人因为汇编语言比较难懂及指令相关,所以以为它就是机器语言,其实它仍是人类设计的编写程序的语言,仍需要编译器编译成机器码才能执行,它只是比C语言更接近硬件而已。

我们正在学习arm编程,对这个比较有发言权

首先把C作为编程语言这个是主流,因为C比汇编好操作,写出的成语容易懂,而且将来移植很方便,毕竟嘛,各主流平台都有对C的标准库支持,linuxx下的hellowordl 源程序在windows平台下编译运行 也会是hello world 不会变成 hello linux

但是汇编也要懂,在平台开发这阶段,很多的时候用的是 C内嵌汇编,毕竟你想从某个寄存器里读取他的值,C肯定没法完成!所以你的中心放在 C的学习上,然后看看汇编,最起码能看得懂,一些汇编想要表现个什么 对吧!!!

头文件:#include <string.h>

定义函数:int memcmp (const void *s1, const void *s2, size_t n)

函数说明:memcmp()用来比较s1 和s2 所指的内存区间前n 个字符。

字符串大小的比较是以ASCII 码表上的顺序来决定,次顺序亦为字符的值。memcmp()首先将s1 第一个字符值减去s2 第一个字符的值,若差为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如,字符串"Ac"和"ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33)。

返回值:若参数s1 和s2 所指的内存内容都完全相同则返回0 值。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。

范例#include <string.h>main(){char *a = "aBcDeF" char *b = "AbCdEf" char *c = "aacdef" char *d = "aBcDeF" printf("memcmp(a, b):%d\n", memcmp((void*)a, (void*)b, 6)) printf("memcmp(a, c):%d\n", memcmp((void*)a, (void*)c, 6)) printf("memcmp(a, d):%d\n", memcmp((void*)a, (void*)d, 6))}

执行结果:

memcmp(a, b):1 //字符串a>字符串b, 返回1

memcmp(a, c):-1 // 字符串a<字符串c, 返回-1

memcmp(a, d):0 //字符串a=字符串d, 返回0