汇编语言
关于x64 汇编下的PIC(version20120625)
PIC,位置独立代码,主要用于动态链接库中,对应的gcc选项为-fPIC。在文献<<深入理解计算机系统(第二版, Randal E.Bryant,David R.O’Hallaron著;龚奕利,雷迎春翻译)>>和<<程序员的自我修养,链接、装载、库(俞甲子,石凡,潘爱民著)>>中,对位置位置的概念进行了详细的介绍。其要点如下。
在目标文件中(a.o),所有a.o或其他.o定义的符号,都是相对地址。在写汇编时,应该使用lea获取其的绝对地址。即.o中为相对地址,加载后为绝对地址。比如如下代码。
%ifdef PIC
;---------------------------------------------------------------------
;获取位于地址mask_ff+16数据的地址到r3,lea r3, [mask_ff +16]
;---------------------------------------------------------------------
lea r3, [mask_ff + 16]
movdqu m1, [r3 + r2*4]
%else
movdqu m1, [mask_ff + r2*4 + 16]
%endif
[1] <<深入理解计算机系统(第二版, Randal E.Bryant,David R.O’Hallaron著;龚奕利,雷迎春翻译)>>
[2]<<程序员的自我修养,链接、装载、库(俞甲子,石凡,潘爱民著)>>
X264汇编感悟
- 最好使用内联汇编。X264使用yasm汇编,其中有大量的宏,非常的专业和不易懂。内联汇编更加通俗易懂。经过ARM 内联汇编实现BGRA到yuv的实现的测试,证明了其实时性不比内嵌汇编差。
- x264中汇编最有价值的部分是,其所用的汇编实现方案(所使用的指令和排列)几乎是最优的。因为其经过了16年左右的反复优化话迭代。