### Intel汇编汇总知识点 #### MMX与SSE指令集简介 MMX(MultiMedia eXtension)和SSE(Streaming SIMD Extensions)是Intel在90年代末期推出的一系列针对多媒体应用的处理器扩展指令集。这些指令集极大地提高了处理器处理多媒体数据的能力,特别是在图像处理、音频处理和视频编码等领域。 #### 1. SSE1 addps 指令 **指令格式**: `addps xmm, xmm` **功能描述**: 将两个向量中的四个单精度浮点数相加,并将结果存储到目标寄存器中。 **操作**: 对于 j = 0 至 3 i = j * 32 dst[i+31:i] = a[i+31:i] + b[i+31:i] 该指令用于并行处理四个32位单精度浮点数的加法运算。 #### 2. SSE1 addss 指令 **指令格式**: `addss xmm, xmm` **功能描述**: 对两个向量中的最低位单精度浮点数进行相加,然后将结果存储在目标寄存器的最低位,并将另一个向量中的高三位单精度浮点数复制到目标寄存器的高位。 **操作**: dst[31:0] = a[31:0] + b[31:0] dst[127:32] = a[127:32] 该指令主要用于快速处理单个浮点数的加法运算,并保持其他三个浮点数不变。 #### 3. SSE1 andps 指令 **指令格式**: `andps xmm, xmm` **功能描述**: 计算两个向量中四个单精度浮点数的逐位逻辑与(AND),并将结果存储到目标寄存器中。 **操作**: 对于 j = 0 至 3 i = j * 32 dst[i+31:i] = (a[i+31:i] AND b[i+31:i]) 此指令用于对浮点数进行逐位逻辑运算。 #### 4. SSE1 andnps 指令 **指令格式**: `andnps xmm, xmm` **功能描述**: 计算两个向量中四个单精度浮点数的逐位逻辑与非(AND NOT),并将结果存储到目标寄存器中。 **操作**: 对于 j = 0 至 3 i = j * 32 dst[i+31:i] = ((NOT a[i+31:i]) AND b[i+31:i]) 该指令用于执行浮点数的逻辑运算,通常用于数据掩码等场景。 #### 5. MMX pavgw 指令 **指令格式**: `pavgw mm, mm` **功能描述**: 计算两个向量中四个16位无符号整数的平均值,并将结果存储到目标寄存器中。计算时会自动进行向上舍入。 **操作**: 对于 j = 0 至 3 i = j * 16 dst[i+15:i] = (a[i+15:i] + b[i+15:i] + 1) >> 1 此指令用于计算16位整数的平均值,适用于音频处理或图像处理等场景。 #### 6. MMX pavgb 指令 **指令格式**: `pavgb mm, mm` **功能描述**: 计算两个向量中八个8位无符号整数的平均值,并将结果存储到目标寄存器中。同样会自动进行向上舍入。 **操作**: 对于 j = 0 至 7 i = j * 8 dst[i+7:i] = (a[i+7:i] + b[i+7:i] + 1) >> 1 该指令常用于图像处理,尤其是颜色混合等操作。 #### 7. SSE1 cmpps 指令 **指令格式**: `cmppsxmm, xmm, imm` **功能描述**: 比较两个向量中四个单精度浮点数是否相等,并将结果存储到目标寄存器中。 **操作**: 对于 j = 0 至 3 i = j * 32 dst[i+31:i] = (a[i+31:i] == b[i+31:i]) ? 0xffffffff : 0 此指令用于比较浮点数是否相等,结果为全1表示相等,全0表示不等。 #### 8. SSE1 cmpss 指令 **指令格式**: `cmpss xmm, xmm, imm` **功能描述**: 比较两个向量中的最低位单精度浮点数是否相等,结果存储在目标寄存器的最低位,并将另一个向量中的高三位单精度浮点数复制到目标寄存器的高位。 **操作**: dst[31:0] = (a[31:0] == b[31:0]) ? 0xffffffff : 0 dst[127:32] = a[127:32] 该指令主要用于比较单个浮点数是否相等,并保留其他浮点数的值不变。 这些指令提供了强大的并行处理能力,极大地提升了处理器处理多媒体数据的速度。通过合理地利用这些指令,开发者可以在多媒体处理、科学计算等领域实现高效的代码优化。
¶þ SSE
1 addps
__m128 _mm_add_ps (__m128 a, __m128 b)
Instruction: addps xmm, xmm
Description: Add packed single-precision (32-bit) floating-point elements in a and b, and store the results in dst.
Operation
FOR j := 0 to 3
i := j*32
dst[i+31:i] := a[i+31:i] + b[i+31:i]
ENDFOR
2 addss
__m128 _mm_add_ss (__m128 a, __m128 b)
Instruction: addss xmm, xmm
Description: Add the lower single-precision (32-bit) floating-point element in a and b, store the result in the lower element of dst, and copy the upper 3 packed elements from a to the upper elements of dst.
Operation
dst[31:0] := a[31:0] + b[31:0]
dst[127:32] := a[127:32]
3 andps
__m128 _mm_and_ps (__m128 a, __m128 b)
Instruction: andps xmm, xmm
Description: Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in a and b, and store the results in dst.
Operation
FOR j := 0 to 3
i := j*32
dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
4 andnps
__m128 _mm_andnot_ps (__m128 a, __m128 b)
Instruction: andnps xmm, xmm
Description: Compute the bitwise AND NOT of packed single-precision (32-bit) floating-point elements in a and b, and store the results in dst.
Operation
FOR j := 0 to 3
i := j*32
dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
ENDFOR
5 pavgw
__m64 _mm_avg_pu16 (__m64 a, __m64 b)
Instruction: pavgw mm, mm
Description: Average packed unsigned 16-bit integers in a and b, and store the results in dst.
Operation
FOR j := 0 to 3
i := j*16
dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
ENDFOR
6 pavgb
__m64 _mm_avg_pu8 (__m64 a, __m64 b)
Instruction: pavgb mm, mm
Description: Average packed unsigned 8-bit integers in a and b, and store the results in dst.
Operation
FOR j := 0 to 7
i := j*8
dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
剩余46页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于RBAC模型的权限控制的一整套基础开发平台,前后端分离,后端采用 django+django-rest-framework,前端采用 vue+ElementUI
- 扰动观测器(时域)-Matlab/Simulink开发
- 【java毕业设计】小学生身体素质测评管理系统设计与实现源码(springboot+vue+mysql+说明文档+LW).zip
- 计算机组成原理中操作系统(慕课版)部分课后习题
- 嵌入式:小熊派实验(包含7个实验)+源码+文档说明(高分作品)
- 【java毕业设计】失物招领平台的设计与实现源码(springboot+vue+mysql+说明文档+LW).zip
- 昆泰3D霍尔KTH57xx手表旋钮应用手册.pdf
- 【java毕业设计】电商应用系统的设计与实现源码(springboot+vue+mysql+说明文档+LW).zip
- 利用Matlab/Simulink实现一个扰动观测器(频域)
- 应用信息AppInfo1.9.0