要做程序的优化,最彻底的方法当然是汇编!还有除了汇编以外(除了二进制)能让你对你的处理器有更全面的控制吗?!对于ARM汇编,作为一个初学者,也就只好先补补基础了@_@。
首先,程序段的定义从AREA 开始,它命名一个代码区域,注意,用非阿拉伯数字作为名字时,应该用|把名字包起来,CODE关键字声明程序(猜测),readonly声明访问权限(猜测)。EXPORT 来表示某个可以用作外部连接的符号(简单点,应该就是函数名?)。END用来结尾。
#eg:
AREA |.text|, CODE, READONLY
EXPORT square
; int square(int i)
square ;armcc把不缩进的正文作为一个标号定义
MUL r1,r0,r0
MOV r0,r1;ARM乘法指令有一个限制,就是目标寄存器不能和第一个参数寄存器相同
MOV pc,lr ;对Thumb指令,应该改为BX lr
END
使用import,可以声明其他文件中定义的标号,要用ARM C库的话,就import |Lib$Request$armlib|, WEAK表示本行的标号如果找不到,不会报告连接错误。如果程序包含主程序main,那么要引入标号__main,代表C库初始化的开始。RN可以让用户给寄存器命名。
#eg:
AREA |.text|, CODE,READONLY
EXPORT main
IMPORT |Lib$$Request$$armlib|, WEAK
IMPORT __main ;C library entry
IMPORT printf ;prints to stdout
i RN 4
;int main(void)
main
STMFD sp!,{i,lr}
MOV i,#0
loop
ADR r0,print_string
MOV r1,i
MUL r2,i,i
BLprintf
ADD i,i,#1
CMP i,#10
BLT loop
LDMFD sp!,{i,pc}
print_string
DCB " Square of %d is %d\n", 0
END
MAP(别名^)和FIELD(别名#),可以在堆栈中为变量和数组定义和分配空间。
MAP 0 ;map symbols to offsets starting at offset 0?
aFIELD 4 ;a is 4 bytes integer(at offset 0)
b FIELD 2 ;b is bytes integer(at offset 4)
c FIELD 64 ;c is an array of 64 characters (at offset 6)
length FIELD 0 ;length records the current offset reached?
MACRO用来声明宏:
MACRO
CHECKSUM $ alignment
checksum_$ alignment
LDR w,[data],#4
l0 ;loop
IF $ alignment<>0
ADD sum,sum,w,LSR #8, $alignement
LDR w,[data],#4
SUBS N,N,#1
ADD sum,sum,w,LSL#32-8* $ alignment
ELSE
ADD sum,sum,w
LDR w,[data],#4
SUBS N,N,#1
ENDIF
BGT %BT l0
MOV pc,lr
MEND
针对汇编的优化主要是面向硬件的。首先是流水线,有些load指令要需要多个周期来完成,可以通过调整指令的顺序(当然要保证逻辑)来改善性能。另外,尽量让程序只是用寄存器,方法是搞清楚数据占用寄存器的时间关系,实现寄存器有效的分时复用。另外,可以将长度较小的变量合并到一个32位寄存器中保存,以节省寄存器。由于PC可以通过程序操作,对于条件指令,可以直接用PC与形成分支的参数作运算来寻找对应的分支:
;int switch_relative(int x)
switch_relative
CMP x,#8
ADDLT pc,pc,x,LSL,#2
B method_d ;利用流水线,如果PC还是按顺序那么default分支的预取址就不
;会被冲掉
B method_0
B method_1
分享到:
相关推荐
本资源是x86和ARM汇编优化的demo和sample,可以根据该demo的写法学习x86汇编优化和ARM汇编优化的基本写法,不明白的同学可以查看我的博客:https://soaringlee.blog.csdn.net/article/details/108424127和...
ARM汇编语言是为ARM处理器设计的低级编程语言,它直接对应于硬件指令集,对理解处理器的工作原理和优化代码性能至关重要。ARM架构以其高效能、低功耗的特性,在移动计算和物联网领域占据主导地位。 在汇编语言中,...
ARM汇编语言是针对ARM架构处理器的一种低级编程语言,广泛应用于嵌入式系统开发、移动端性能优化等领域。对于初学者来说,掌握ARM汇编语言不仅可以深入理解计算机硬件工作原理,还能在特定场景下实现高效的代码编写...
通过深入学习《ARM汇编语言官方手册(中文)》,开发者可以提高对ARM处理器底层运作的理解,从而更好地进行系统级编程、优化和安全分析。这本书是手机app逆向工程师的必备参考资料,无论是为了分析代码行为、调试...
ARM汇编优化技巧 - **指令流水线优化**:利用ARM处理器的多级流水线特性,减少等待时间。 - **寄存器分配**:有效利用有限的通用寄存器,减少内存访问。 - **循环展开**:通过增加循环体内的指令数量,减少循环...
通过韦东山的教程,结合VisualWin_127的使用,你可以逐步掌握ARM汇编语言的精髓,从而在嵌入式系统开发或者底层优化等领域大展拳脚。 总的来说,掌握ARM汇编语言不仅能提升你的编程技能,也能让你对计算机硬件有更...
ARM汇编指令集是嵌入式系统开发中的基础,它是一种低级编程语言,用于直接控制计算机硬件。本文将深入探讨ARM汇编指令集的主要概念、语法和常见指令,帮助你更好地理解和应用这一关键技术。 首先,理解ARM架构是至...
以上只是ARM汇编语言学习的一小部分,深入掌握还需要结合具体的实例和实践经验,通过编写、调试和优化代码来不断提升技能。《ARM汇编手册》作为主要参考,提供了全面的指令详解和实例,是学习者不可或缺的工具书。
ARM汇编语言是一种针对ARM处理器架构的低级编程语言,它允许程序员直接控制硬件,进行高效的系统...由于ARM汇编语言的特殊性和接近硬件的特性,熟练掌握ARM汇编能够为软件开发、硬件调试以及性能优化带来极大的便利。
ARM汇编语言是嵌入式系统开发中的基础工具,尤其在低功耗、高性能的嵌入式设备中广泛应用。ARM架构处理器使用的是复杂指令集计算(CISC)模型,其汇编语言为开发者提供了直接控制硬件的能力。在这个“ARM汇编练习...
网络应用方面,采用ARM技术的ADSL芯片逐渐获得竞争优势,并在语音和视频处理领域优化,与数字信号处理器(DSP)的应用领域形成竞争。消费类电子产品如数字音频播放器、数字机顶盒和游戏机等广泛采用ARM技术。在安全...
C语言内嵌ARM汇编是一种将底层硬件操作与高级编程语言相结合的技术,它允许程序员在C代码中直接插入ARM架构的汇编指令,以实现特定的性能优化或硬件交互。ARM汇编语言是针对ARM处理器设计的一种低级编程语言,具有...
本文将详细解析ARM汇编语言、IAR汇编器以及相关编程概念,帮助读者深入理解并掌握在ARM架构下进行低级程序设计的核心知识。 一、ARM汇编语言 ARM汇编语言是用于编写ARM微处理器指令的编程语言,它是一种低级语言,...
ARM汇编语言是嵌入式系统开发中的基础技术,尤其在移动设备如智能手机和平板电脑中广泛应用。本书“arm汇编语言详解”旨在为读者提供深入理解ARM架构和其汇编语言的详尽指南。ARM架构以其高效能、低功耗的特性,在...
ARM汇编指令集是ARM架构微处理器编程的基础,它包含了用于控制和操作ARM处理器的一系列指令。ARM(Advanced RISC Machines)处理器以其高效、低成本和低能耗的特点,在嵌入式系统、消费电子、多媒体处理、数字信号...
ARM汇编语言是嵌入式系统开发中的基础工具,尤其在设计高效能、低功耗的微处理器系统时,深入理解和掌握ARM汇编是至关重要的。这篇学习笔记将带你走进ARM汇编的世界,理解其基本概念,掌握指令集,并学会如何在实际...
ARM汇编语言是嵌入式系统开发中的核心技术之一,它被广泛应用于移动设备、嵌入式系统、物联网设备等硬件平台。ARM架构以其高效、低功耗的特点,成为了现代电子设备的主流处理器架构。这份“ARM汇编ppt”很可能是针对...
通过对ARM汇编实现冒泡排序的深入分析,我们不仅掌握了基本的ARM汇编指令,还学会了如何在嵌入式开发中调试和优化算法。尽管ARM汇编编程相较于高级语言更为复杂,但其带来的性能优势不容忽视。未来,随着物联网、...