如何提高汇编代码的可读性
2013-10-12 16:46
225 查看
汇编语言相对C语言和C++,在执行速度上有着不错的优势,尤其在一些数据量巨大的处理场合。所以不难理解很多DSP、ARM程序员需要使用汇编来优化代码。本人从事视频编解码工作,在工作中也遇到了一些需要汇编优化的情况,发现汇编代码的可读性是可以通过一些方式提高的,在此与大家分享一下。
本文所使用的为ARM 汇编,ARM v5 指令集以上。以下是本贴内容:
1、如何使用汇编
2、如何提高汇编的可读性
main_test.c 对该函数声明如下:
然后编译如下:
这样,就可以运行 test进行代码调试了。总体而言,用法跟c语言是类似的。
有了这些宏指令之后,就可以使用C语言的一些宏指令了,于是代码的可读性瞬间提高了,以下是一个NEON汇编的小程序,可读性是否有点类似于C语言了呢~
好了,本帖到此结束,欢迎大家多多指教~
本文所使用的为ARM 汇编,ARM v5 指令集以上。以下是本贴内容:
1、如何使用汇编
2、如何提高汇编的可读性
1、如何使用汇编:
假如我有一个函数func需要使用汇编优化,将该函数的汇编代码写在 func_asm.S文件中,调用该函数的代码写在main_test.c中main_test.c 对该函数声明如下:
extern void func(int a, int b);
然后编译如下:
gcc -c func_asm.s -o func_asm.o gcc -c main_test.c -o main_test.o gcc func_asm.o main_test.o -o test
这样,就可以运行 test进行代码调试了。总体而言,用法跟c语言是类似的。
2、如何提高汇编代码的可读性:
汇编代码的格式令人头疼,常见的有GNU格式和ARM 格式。更令人心烦的是它们都很难读。在阅读ffmpeg代码的过程中,我发现ffmpeg中的汇编很容易阅读和查找,而且代码风格简单明了。在此推荐一下,它是通过一堆宏定义实现的。代码如下:#ifdef __ELF__ # define ELF #else # define ELF @ #endif .macro require8, val=1 ELF .eabi_attribute 24, \val .endm .macro preserve8, val=1 ELF .eabi_attribute 25, \val .endm .macro function name, export=0 .macro endfunc ELF .size \name, . - \name .endfunc .purgem endfunc .endm .if \export .global EXTERN_ASM\name EXTERN_ASM\name: .endif ELF .type \name, %function .func \name \name: .endm .macro movrel rd, val #if HAVE_ARMV6T2 && !CONFIG_PIC movw \rd, #:lower16:\val movt \rd, #:upper16:\val #else ldr \rd, =\val #endif .endm #if HAVE_VFP_ARGS .eabi_attribute 28, 1 # define VFP # define NOVFP @ #else # define VFP @ # define NOVFP #endif #define GLUE(a, b) a ## b #define JOIN(a, b) GLUE(a, b) #define X(s) JOIN(EXTERN_ASM, s)
有了这些宏指令之后,就可以使用C语言的一些宏指令了,于是代码的可读性瞬间提高了,以下是一个NEON汇编的小程序,可读性是否有点类似于C语言了呢~
#ifndef a #define a r0 #define b r1 #endif function func_add, export=1 stmfd sp!, {r4-r12,lr} cmp r2, #8 bne to_end vld2.32 {q0,q1}, [a] vld2.32 {q2,q3}, [b] vadd.s32 q0, q0, q2 vadd.s32 q1, q1, q3 vst2.32 {q0,q1}, [r1] to_end: ldmfd sp!, {r4-r12,pc} endfunc #undef a #undef b
好了,本帖到此结束,欢迎大家多多指教~
相关文章推荐
- 如何提高代码的可读性? - 读《编写可读代码的艺术》
- 如何提高代码可读性
- 如何提高代码可读性
- 如何提高代码可读性、可维护性
- 如何更好组织JS代码,提高可读性?
- 关于如何读懂别人的代码以及如何提高代码可读性的研究
- 一堂如何提高代码质量的培训课(转)
- C# 学习笔记 -- 第二天 使用注释提高代码可读性
- 提高代码质量:如何编写函数
- 简化MAIN函数,提高代码可读性
- 如何提高网页内容的可读性
- 如何提高代码质量
- 提高代码质量:如何编写函数
- 一堂如何提高代码质量的培训课
- PHP新手如何提高代码质量
- 如何用VS2010查看汇编代码
- 通过分析汇编代码了解计算机是如何工作
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
- 减少if语句的嵌套层次,提高代码的可读性
- 提高代码质量:如何编写函数