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

Python021

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语言更接近硬件而已。

不懂C语言但稍微懂一点ARM Cortex-M3 汇编

很久没写汇编了,下边这个没调试直接编的不是范例,所以肯定写错了

编译器GCC-ARM-NONE-EABI

应该有范例,你还是找范例吧

i: .int 20 @int i=20

a: .int 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 @ 定义A数组

b: .int 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3@ 定义B数组

ldr r0, = i@把20存到R0

xunhuan1: @ if 里面

ldr r1, = a @ 把A数组的首地址存到R1

ldr r2, [r1, r0] @ 取出首地址加20处的数据存到R2

ldr r3, = b @ 把B数组的首地址存到R3

ldr r4, [r3, r0] @取出首地址加20处的数据存到R4

mov r5, # 4 @ 把被乘数存到R5

mul r4, r4, r5 @ R4乘以4 b[i]*4

add r6, r2, r4 @ R2加上R4存到R6 a[i]+b[i]*4

str r6, [r1, r0]@ R6的数据存到A首地址加20的地方

lsrs r0, # 1 @ R0逻辑右移

bne xunhuan @ 判断R0是不是等于0不等于跳到xunhuan

xunhuan: @ while 循环

sub r0, # 1 @ i减1

cmp r0, # 0 @比较R0和0

bge xunhuan1@大于等于跳转xunhuan1