|
|
汇编主要是要了解CPU指令及用法,常说的是PC机的x86汇编,指令是x86的复杂指令集。
R% w, E. f. \2 a' x% D. }$ p1 {arm汇编是arm的精简指令集,比x86容易学,程序格式倒是和x86汇编差不多。( `4 T6 _. V9 U6 l a C
C语言ARM的和x86的差不多,除了对硬件寄存器操作不同,其它语法和流程都一样。2 o' j/ l; f- X6 f0 l
arm汇编程序每一行是指定arm core执行一条指令,每条指令都是硬件相关。% c- v# ~& u$ @6 X; h5 \9 P2 D; D
如:LDR R3, #1 ;用LDR指令将数值1放入R3寄存器准备参与运算" H. d" d1 X- ^1 {
C语言与arm指令无关,只与逻辑运算有关,指定硬件地址的操作才与硬件相关;/ Y" z% M& T1 D. i! h7 M3 @
如果用arm编译器来编译,每行可能编译出1到多条arm指令。
4 p6 K. ]# O6 n$ Z9 \如:i++; //变量 i 递增1等效于LDR R3,#1 ;3 l' j# [6 @0 x9 _, r" S4 n- Q
用LDR指令将数值1放入R3寄存器准备参与运算ADD R2, R2, R3 ;% O: w7 [6 [5 \7 {# G! }! x; i1 c
用ADD指令将R2、R3寄存器里的数值相加后放回R2寄存器以上等效汇编的R2、R3寄存器只是为了举例,C语言不像汇编,不需要由程序员指定用哪个寄存器参与运算,编译器编译时会根据程序结构自动判断选择。
. K- N, d: L( X' ] 无论是c语言还是汇编语言,编译器编译后的结果是机器执行码,很多人因为汇编语言比较难懂及指令相关,所以以为它就是机器语言,其实它仍是人类设计的编写程序的语言,仍需要编译器编译成机器码才能执行,它只是比C语言更接近硬件而已。
0 [6 a$ m0 b9 r; a |
|