汇编编程学习心得浅谈 ---基础版
条评论Intel Intrinsic SSE
指令介绍: SSE是由英特尔公司推出的基于CPU的指令运算集,Pentium III之后的CPU基本都支持SSE指令。该指令集可以一次性控制128位内存中的数,并对其进行各种运算,例如加减乘除、与或、大于小于、移位等,它的操作对象是__m128i的数据类型,即内存中的128位数据。针对不同的应用场景,可以将数据分按为8位、16位、32位、64位进行运算,比如指令__m128i _mm_add_epi8 (__m128i a, __m128i b)
作用是将128位中每8bit存储的信息相加存储到一个新的8bit中__m128i _mm_add_epi16 (__m128i a, __m128i b)
作用是将128位中每16bit存储的信息相加存储到一个新的16bit中,以此类推
应用场景: 对于视频图像处理、编解码等方面,举个简单的例子,给定一个长H宽W的图像像素信息,做插值运算。
1 | void interpolation(int *pixel, int pix_stride, int *dst, int dst_stride){ |
下面给出INTEL指令参考文档网址,https://software.intel.com/sites/landingpage/IntrinsicsGuide/ ,需要用到哪个指令到上面搜指令的用法即可,覆盖了大多数基础的运算以及一些高级的运算,熟练运用后可以大幅提升工程的效率。
Intel Intrinsic AVX
指令介绍:AVX是英特尔公司既SSE之后推出的下一代指令集,一次可以处理内存256位数,基本包含了SSE中的各个指令运算功能,最新的指令集达到了一次性处理512位的超高效运算能力,但是大部分CPU不支持AVX-512版本,所以使用AVX-512编程尚未普及,但酷睿系列的CPU之后,基本都支持AVX编程,所以AVX和SSE目前都得到了广泛的应用。
NASM
NASM是一个x86的汇编器,语法简洁易懂(? 相对来说),同时支持MMX,SSE,SSE2,SSE4,AVX2等,它编写的汇编指令经编译后会转成通用的汇编指令。比如说我查看一个用NASM编写的代码,语法查不到,可以用VS先编译调试打断点,然后进入反汇编,这个时候显示出来的就是通用的asm汇编指令,可以在网上查到相应的指令作用,再代入理解代码会容易很多。
如何在NASM代码中调用SSE,AVX呢,见下图。
点击下载NASM中文手册 ·