码迷,mamicode.com
首页 > 其他好文 > 详细

AT&T学习笔记汇编之高级特性

时间:2015-04-04 09:21:12      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:att汇编   atampt   

高级特性:
SIMD    single instruction multiple  data
单指令多数据


SIMD扩展  Streaming SIMD Extension    (SSE)
流化扩展第二实现  SSE2
第三    SSE3

MMX   对整数执行SIMD操作
64位打包字节,字,双字整数,
MMx  0-7    映射到FPU寄存器R0-7
使用FSAVE,FXSAVE指令将FPU寄存器保存到内存中,防止和浮点指令混淆。

SSE主要对浮点数执行SIMD操作。128位打包的单精度浮点数据。
8个128位寄存器XMM0-7

SSE2    128位打包整型,浮点型。

SSE3 在SSE2基础上添加了更多指令。

CPUID指令检测是否支持SIMD
EDX    23(位)    支持MMX
EDX    25    支持SSE
EDX    26    SSE2
ECX    0    SSE3


使用MMX指令
步骤:
从整数值创建打包整数值。
把打包整数值加载到MMX寄存器中。
对打包整数值执行MMX数学操作。
从MMX寄存器获得结果,存放到内存位置中。

.section    .data
packedvalue1:
    .byte 10 , 20 , -30 , 40 , 50 , 60 , -70 , 80
packedvalue2:
    .short 10 , 20 , 30 , 40
packedvalue3:
    .int 10 , 20
.section    .text
.globl    _start
_start:
    movq    packedvalue1 , %mm0
    movq    packedvalue2 , %mm1
    movq    packedvalue3 , %mm2
movq可以把数据从mmx寄存器传送到64位内存中。

处理溢出:
环绕运算    溢出截断
带符号饱和运算    
无符号饱和运算    溢出取最大 最小值

PADDB    使用环绕的打包字节整数加法
PADDW
PADDD
PADDSB    使用带符号饱和的打包字节整数加法
PADDSW
PADDUSB
PADDUSW
PSUBB
....
PSUBUSW

PADDSB source , destination
PADDSB %mm1 , %mm0

MMX乘法
PMULL    把每对打包字整数相乘,把结果的低16位存放在目标寄存器。
PMULH    把高16位存放到目标寄存器中

无符号:
PMULLUW      PMULLHUW

MMX逻辑和移位指令
PAND    
PANDN    对目标操作数执行非(NOT)操作,然后对源和目的操作数执行逻辑与操作。
POR
PXOR
PSLL    逻辑左移,用0填充
PSRA    逻辑右移,0填充

MMX比较指令
PCMPEQB    比较打包字节整数值的相等性
PCMPEQW
PCMPEQD
PCMPGTB
PCMPGTW
PCMPGTD
满足条件各位全设为1,否则全部位0

SSE指令
movaps     把4个对准的单精度浮点型传送到XMM或者内存
movups    不对准
movss    


AT&T学习笔记汇编之高级特性

标签:att汇编   atampt   

原文地址:http://blog.csdn.net/u011185633/article/details/44858735

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!