FFmpeg把自己写的之前呼声很高的汇编课程发布到Github上了。(之前是在google docs上写的草稿)
github.com/FFmpeg/asm-lessons
第一课:
奠定SIMD汇编基础,解析手写汇编在FFmpeg中的必要性(10倍以上性能优势),介绍x86 Intel语法、通用寄存器(GPR)与向量寄存器(XMM/YMM)的区别,以及通过x86inc.asm工具简化编码。通过paddb示例展示向量化思维,强调内存加载(movu)、计算与存储的流程,并对比Intrinsics与编译器自动优化的局限性。
第二课:
深入控制流与内存操作:循环(jg/jl)、标签跳转、FLAGS寄存器条件判断,常量数据段(SECTION_RODATA)定义,内存偏移量计算([base + scale*index + disp]),以及利用lea指令优化地址运算。对比C循环与汇编实现的差异,通过指针偏移与计数器复用减少指令数,提升循环效率。
第三课:
高级SIMD优化与指令集实战:梳理x86指令集演变(MMX到AVX512),强调运行时CPU检测的兼容性设计;指针偏移技巧(负值计数器简化循环边界判断)、内存对齐加速(mova与movu区别);数据范围扩展(零扩展punpcklbw、符号扩展pcmpgtb)、打包解包指令(packuswb)及饱和运算;重点解析pshufb(SSSE3)实现高效数据重排,展示其在视频处理中的核心作用,如像素排列与掩码操作。