汇编学习

寄存器,有十六个
介绍通用寄存器,
一共八个,分别是EAX、EBX、ECX、EDX、ESP、EBP、EDI、ESI。
其中,EAX—EDX这四个寄存器又可称为数据寄存器,你除了直接访问外,还可分别对其高十六位和低十六位它们的低十六位就是把它们前边儿的E去掉,即EAX的低十六位就是AX。而且它们的低十六位又可以分别进行八位访问,即AX还可分为AH(高八位)AL(低八位)。其它三个寄存器请自行推断

这四个寄存器,主要就是用来暂时存放计算过程中所用的操作数、结果或其它信息.
而ESP、EBP、EDI、ESI这四个呢,就只能用字来访问,它们的主要用途就是在存储器寻址时,提供偏移地址,它们可以称为指针或变址寄存器,从386以后,所有的寄存器都可以用来存储内存地址。
ESP称为堆栈指针寄存,ESP的内容在任何时候都指向当前的栈顶,它永远指向最后一个压入栈的数据.
EBP,它称为基址指针寄存器,EBP可作为堆栈区中的一个基地址以便访问堆栈中的信息

ESI(源变址寄存器)和EDI(目的变址寄存器),用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,可以很方便地用于变址

专用寄存器
专用寄存器,有两个,一个是EIP,一个是FLAGS,
EIP指令指针寄存器,在程序运行的过程中,它始终指向下一条指令的首地址,计算机就是用EIP寄存器来控制指令序列的执行流程的,
那些跳转指令,就是通过修改EIP的值来达到相应的目的的.
FLAGS,标志寄存器,又称PSW(program status word),即程序状态寄存器

段寄存器
这部分寄存器一共六个,分别是CS代码段,DS数据段,ES附加段,SS堆栈段,FS以及GS这两个还是附加段。
其实现在到了Win32环境下,段寄存器以经不如DOS时代那样重要了

#################################################################

15:52 2010-5-29

mmx

主要是提高整数运算的并行(8位,16位和32位(16位最好)),
typedef union __declspec(intrin_type) __declspec(align(8)) __m64
{
    unsigned __int64    m64_u64;
    float               m64_f32[2];
    __int8              m64_i8[8];
    __int16             m64_i16[4];
    __int32             m64_i32[2];   
    __int64             m64_i64;
    unsigned __int8     m64_u8[8];
    unsigned __int16    m64_u16[4];
    unsigned __int32    m64_u32[2];
} __m64;

sse

提高32位float运算的并行能力
typedef struct __declspec(intrin_type) __declspec(align(16)) __m128 {
    float       m128_f32[4];
} __m128;
指令 Intrinsic 功能
addps/addss _mm_add_ps/_mm_add_ss 加法
subps/subss _mm_sub_ps/_mm_sub_ss 減法
mulps/mulss _mm_mul_ps/_mm_mul_ss 乘法
divps/divss _mm_div_ps/_mm_div_ss 除法
sqrtps/sqrtss _mm_sqrt_ps/_mm_sqrt_ss 平方根
maxps/maxss _mm_max_ps/_mm_max_ss 逐項取最大值
minps/minss _mm_min_ps/_mm_min_ss 逐項取最小值
SSE 除了運算的指令之外,還支援了一些 cache 控制指令.
SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令.

sse2

在SSE时,该仅能以4个单精确浮点值的形式来处理;但在SSE2下,该数据能选用下列几种数据表达来处理。
·4个单精确浮点数(SSE)
·2个双倍精确浮点数(SSE2)
·16个字节数(SSE2)
·8个字组(word)数(SSE2)
·4个双倍字组数(SSE2)
·2个四倍字组数(SSE2)
·1个128位长的整数(SSE2)

共有144个全新的指令可做任何事情

typedef struct __declspec(intrin_type) __declspec(align(16)) __m128d {
    double              m128d_f64[2];
} __m128d;

typedef union __declspec(intrin_type) __declspec(align(16)) __m128i {
    __int8              m128i_i8[16];
    __int16             m128i_i16[8];
    __int32             m128i_i32[4];   
    __int64             m128i_i64[2];
    unsigned __int8     m128i_u8[16];
    unsigned __int16    m128i_u16[8];
    unsigned __int32    m128i_u32[4];
    unsigned __int64    m128i_u64[2];
} __m128i;

http://softpixel.com/~cwright/programming/simd/sse2.php

 

SSE3(http://diy.yesky.com/cpu/83/2543583_4.shtml)

包含有13条命令。SSE3指令集这13条命令共分为5个应用层:
第一层中的指令是“数据传输命令”,只有一条指令:FISTTP,它有利于x87浮点转换成整数,并可以大大提高优化的效率。

第二层中的指令是“数据处理命令”,一共有五条,分别是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。这些指令可以简化复杂数据的处理过程,由于未来数据处理流量将会越来越大,因此Intel在这里应用的指令集最多、达到了五条。

第三层中的指令是“特殊处理命令”,也只有一条:LDDQU。在这条指令主要针对视频解码,用来提高处理器对处理媒体数据结果的精确性。

第四层中的指令是“优化命令”,一共有四条指令,分别是HADDPS,HSUBPS,HADDPD,HSUBPD,它们可以对程序起到自动优化的作用。这些指令对处理3D图形相当有用。

第五层中的指令是“超线程性能增强”,一共有两条针对线程处理的指令:MONITOR, MWAIT,这有助于增加Intel超线程的处理能力、大大简化了超线程的数据处理过程。

从技术上来看,SSE3对于SEE2的改进非常有限

SSE4(http://en.wikipedia.org/wiki/SSE4)

指令集是Conroe架构所引入的新指令集

1 SSE4 subsets
2 Name confusion
3 New instructions
3.1 SSE4.1
3.2 SSE4.2
3.3 SSE4a
4 References

Intel SSE4 consists of 54 instructions. A subset consisting of 47 instructions, referred to as SSE4.1 in some Intel documentation, is available in Penryn. Additionally, SSE4.2, a second subset consisting of the 7 remaining instructions, is first available in Core i7 (formerly Nehalem). Intel credits feedback from developers as playing an important role in the development of the instruction set.

AMD currently only supports 4 instructions from the SSE4 instruction set, but have also added two new SSE instructions that is named SSE4a. These instructions are not found in Intel's processors supporting SSE4.1 and alternatively AMD processors aren't supporting Intel's SSE4.1. Support was added for SSE4a for unaligned SSE load-operation instructions (which formerly required 16-byte alignment)

MMX · 3DNow! · Streaming SIMD Extensions (SSE) · SSE2 · SSE3 · Supplemental Streaming SIMD Extension 3 (SSSE3) · SSE4 · SSE5 · Advanced Vector Extensions (AVX) · CVT16 · FMA3 · FMA4 · XOP
 
 
 

The

SSE5(http://en.wikipedia.org/wiki/SSE5)

(short for Streaming SIMD Extensions version 5), was an instruction set extension proposed by AMD on August 30, 2007 as a supplement to the 128-bit SSE core instructions in the AMD64 architecture.

 

#include     //mmx
#include     //sse
#include     //sse2

//#include
//The file dvec.h contains operator overloads for some of the SSE2 instructions intrinsics, which are available for use in C++ programs.
// Definition of a C++ class interface to MMX(TM) instruction intrinsics.
// Definition of a C++ class interface to Streaming SIMD Extension intrinsics.

//#include     //3dnow
//#include   //sse3
//#include   //ssse3
//#include      //sse4a
//#include   //sse4.1
//#include   //sse4.2

你可能感兴趣的:(汇编学习)