`
wx1569567608
  • 浏览: 70070 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

汇编浮点运算指令集

 
阅读更多

st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

1. 数据传递和对常量的操作指令
指令格式 指令含义 执行的操作
FLD src   装入实数到st(0)   st(0) <- src (mem32/mem64/mem80)
FILD src 装入整数到st(0) st(0) <- src (mem16/mem32/mem64)
FBLD src 装入BCD数到st(0) st(0) <- src (mem80)

FLDZ 将0.0装入st(0)   st(0) <- 0.0
FLD1 将1.0装入st(0)   st(0) <- 1.0
FLDPI 将pi装入st(0)   st(0) <- ?(ie, pi)
FLDL2T 将log2(10)装入st(0) st(0) <- log2(10)
FLDL2E 将log2(e)装入st(0) st(0) <- log2(e)
FLDLG2 将log10(2)装入st(0) st(0) <- log10(2)
FLDLN2 将loge(2)装入st(0) st(0) <- loge(2)

FST dest 保存实数st(0)到dest dest <- st(0) (mem32/mem64)
FSTP dest       dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作
FIST dest 将st(0)以整数保存到dest dest <- st(0) (mem32/mem64)
FISTP dest       dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作
FBST dest 将st(0)以BCD保存到dest dest <- st(0) (mem80)
FBSTP dest        dest<- st(0) (mem80);然后再执行一次出栈操作


2.比较指令
指令格式 指令含义 执行的操作
FCOM   实数比较 将标志位设置为 st(0) - st(1) 的结果标志位
FCOM op   实数比较 将标志位设置为 st(0) - op (mem32/mem64)的结果标志位

FICOM op 和整数比较 将Flags值设置为st(0)-op 的结果op (mem16/mem32)
FICOMP op 和整数比较 将st(0)和op比较 op(mem16/mem32)后;再执行一次出栈操作

FTST    零检测 将st(0)和0.0比较
FUCOM st(i) 比较st(0) 和st(i)                  [486]
FUCOMP st(i)    比较st(0) 和st(i),并且执行一次出栈操作
FUCOMPP st(i)   比较st(0) 和st(i),并且执行两次出栈操作
FXAM      Examine: Eyeball st(0) (set condition codes)

3.运算指令
指令格式 指令含义 执行的操作
加法
FADD   加实数   st(0) <-st(0) + st(1)
FADD src      st(0) <-st(0) + src (mem32/mem64)
FADD st(i),st      st(i) <- st(i) + st(0)
FADDP st(i),st       st(i) <- st(i) + st(0);然后执行一次出栈操作
FIADD src   加上一个整数 st(0) <-st(0) + src (mem16/mem32)

减法
FSUB   减去一个实数 st(0) <- st(0) - st(1)
FSUB src      st(0) <-st(0) - src (reg/mem)
FSUB st(i),st      st(i) <-st(i) - st(0)
FSUBP st(i),st      st(i) <-st(i) - st(0),然后执行一次出栈操作
FSUBR st(i),st 用一个实数来减 st(0) <- st(i) - st(0)
FSUBRP st(i),st      st(0) <- st(i) - st(0),然后执行一次出栈操作
FISUB src 减去一个整数 st(0) <- st(0) - src (mem16/mem32)
FISUBR src 用一个整数来减 st(0) <- src - st(0) (mem16/mem32)


乘法
FMUL   乘上一个实数 st(0) <- st(0) * st(1)
FMUL st(i)      st(0) <- st(0) * st(i)
FMUL st(i),st      st(i) <- st(0) * st(i)
FMULP st(i),st      st(i) <- st(0) * st(i),然后执行一次出栈操作
FIMUL src 乘上一个整数 st(0) <- st(0) * src (mem16/mem32)


除法
FDIV    除以一个实数 st(0) <-st(0) /st(1)
FDIV st(i)      st(0) <- st(0) /t(i)
FDIV st(i),st      st(i) <-st(0) /st(i)
FDIVP st(i),st      st(i) <-st(0) /st(i),然后执行一次出栈操作
FIDIV src 除以一个整数 st(0) <- st(0) /src (mem16/mem32)
FDIVR st(i),st 用实数除 st(0) <- st(i) /st(0)
FDIVRP st(i),st      FDIVRP st(i),st
FIDIVR src 用整数除 st(0) <- src /st(0) (mem16/mem32)

FSQRT   平方根   st(0) <- sqrt st(0)

FSCALE   2的st(0)次方 st(0) <- 2 ^ st(0)
FXTRACT Extract exponent: st(0) <-exponent of st(0); and gets pushed
st(0) <-significand of st(0)

FPREM    取余数 st(0) <-st(0) MOD st(1)
FPREM1   取余数(IEEE),同FPREM,但是使用IEEE标准[486]       
FRNDINT 取整(四舍五入) st(0) <- INT( st(0) ); depends on RC flag

FABS   求绝对值 st(0) <- ABS( st(0) ); removes sign
FCHS   改变符号位(求负数) st(0) <-st(0)

F2XM1   计算(2 ^ x)-1 st(0) <- (2 ^ st(0)) - 1
FYL2X   计算Y * log2(X) st(0)为Y;st(1)为X;将st(0)和st(1)变为st(0) * log2( st(1) )的值

FCOS   余弦函数Cos st(0) <- COS( st(0) )
FPTAN   正切函数tan st(0) <- TAN( st(0) )
FPATAN   反正切函数arctan st(0) <- ATAN( st(0) )
FSIN   正弦函数sin st(0) <- SIN( st(0) )
FSINCOS   sincos函数 st(0) <-SIN( st(0) ),并且压入st(1)
st(0) <- COS( st(0) )       
FYL2XP1 计算Y * log2(X+1) st(0)为Y; st(1)为X;将st(0)和st(1)变为st(0) * log2( st(1)+1 )的值


处理器控制指令
FINIT   初始化FPU  
FSTSW AX 保存状态字的值到AX AX<- MSW
FSTSW dest 保存状态字的值到dest dest<-MSW (mem16)
     
FLDCW src 从src装入FPU的控制字 FPU CW <-src (mem16)
FSTCW dest 将FPU的控制字保存到dest dest<- FPU CW
     
FCLEX    清除异常  
     
FSTENV dest 保存环境到内存地址dest处保存状态字、控制字、标志字和异常指针的值
FLDENV src 从内存地址src处装入保存的环境  
FSAVE dest 保存FPU的状态到dest处 94字节  
FRSTOR src 从src处装入由FSAVE保存的FPU状态  
FINCSTP   增加FPU的栈指针值 st(6) <-st(5); st(5) <-st(4),...,st(0) <-?
FDECSTP   减少FPU的栈指针值 st(0) <-st(1); st(1) <-st(2),...,st(7) <-?      
FFREE st(i) 标志寄存器st(i)未被使用        
FNOP    空操作,等同CPU的nop st(0) <-st(0)
WAIT/FWAIT 同步FPU与CPU:停止CPU的运行,直到FPU完成当前操作码

FXCH   交换指令,交换st(0)和st(1)的值 st(0) <-st(1)
st(1) <- st(0)

转载于:https://my.oschina.net/u/158055/blog/694481

分享到:
评论

相关推荐

    stm32f1 M3 浮点快速运算库

    汇编语言编程能够充分利用处理器的指令集,减少指令开销,从而提高代码执行效率,尤其是在处理浮点运算时效果显著。 这个库包含了各种常见的浮点数学函数,如加减乘除、指数、对数、三角函数等。这些函数在库中被...

    Intel x86 &amp; x64 汇编指令集(共七卷)

    SSE(Streaming SIMD Extensions)是Intel推出的一系列向量处理指令集,旨在提高浮点运算和媒体处理性能。SSE支持单指令多数据流(SIMD)操作,可以在一次指令执行中处理多个数据元素,显著提高了并行处理能力。 ##...

    ARM7汇编指令集 ARM汇编指令集

    - 指令集分为数据处理指令、加载/存储指令、分支指令、浮点运算指令(在某些支持浮点运算的版本中)、算术逻辑单元(ALU)操作等。 2. **数据处理指令** - `MOV`: 数据移动,将一个寄存器的值复制到另一个寄存器...

    汇编语言指令大全 X86和X87汇编指令大全(带注释).zip

    1. **浮点运算指令**:如FADD、FSUB、FMUL、FDIV执行浮点加、减、乘、除;FABS、FNABS取浮点数绝对值;FSQRT求平方根等。 2. **转换指令**:如FTOI、FITO将浮点数与整数之间进行转换,满足不同数据类型的需求。 3....

    ARM常用指令集及汇编.rar_ARM 指令集_ARM 汇编_arm 汇编指令_汇编_汇编指令集

    4. **乘法和除法指令**:ARM提供了单周期乘法指令(如`MUL`)和多周期除法指令(如`SDIV`、`UDIV`),这些指令在处理浮点运算、数学计算和数据处理中非常有用。 5. **向量处理指令**:在ARMv7-A及以上版本中,包括...

    c66和c64汇编指令集

    6. 特殊指令:如向量处理指令、浮点运算指令等,这些是C66x和C64x DSP的优势所在。 通过深入研究这些指令集,开发者可以编写出运行效率极高且优化过的代码,尤其对于处理实时计算和大量数据处理的任务,汇编语言的...

    ARM 汇编指令集 chm格式

    ARM汇编指令集包含多种指令类型,主要包括数据处理指令、分支指令、内存访问指令、浮点运算指令等。例如: 1. **数据处理指令**:这类指令用于执行算术和逻辑操作,如加法(ADD)、减法(SUB)、逻辑与(AND)、...

    ARM指令与汇编(by宛城布衣)

    书中详细介绍了ARM指令集的主要组成部分,包括数据处理指令、分支指令、浮点运算指令、内存访问指令等,帮助读者理解如何通过这些基本指令实现复杂的程序逻辑。 1. **数据处理指令**:这部分涵盖了从基本的算术运算...

    常用ARM指令集及汇编-经典完整版.rar

    ARM指令集分为多个类别,包括数据处理指令、转移指令、加载和存储指令、浮点运算指令、协处理器指令等。以下是对这些主要指令集类别的详细介绍: 1. 数据处理指令:这是ARM指令集中最基础的部分,包括算术操作(如...

    汇编语言--x86汇编指令集大全.zip

    **汇编语言与x86汇编指令集详解** 汇编语言是一种低级编程语言,它是计算机硬件系统可以直接理解和执行的指令集的符号化表示。在个人计算机领域,x86架构是主流,对应的汇编语言就是x86汇编语言。这种语言直接对应...

    汇编指令集汇总

    《汇编指令集汇总》是深入理解计算机底层运作机制的重要资料,主要涵盖了64位IA-32架构下的指令系统。这份文档详细解析了各种汇编指令,为开发者提供了宝贵的参考资源,帮助我们提升在软件开发中的效率和精确度。 ...

    汇编指令集 CHM格式

    ARM指令集以低功耗和高效能著称,其指令集包括数据处理、分支、加载/存储、浮点运算等。与Intel不同的是,ARM架构更倾向于RISC(精简指令集计算),其指令通常更为简洁,例如LDR(加载寄存器)、STR(存储寄存器)、...

    RISC-V中文手册,汇编指令集手册

    除了基础指令集之外,还可以根据具体需求选择添加额外的扩展指令集,如浮点运算(F)、向量运算(V)等。这种设计方式使得RISC-V架构既能够满足高性能计算的需求,也能够在低功耗、低成本的应用场景中发挥作用。 ##...

    intel汇编MMX/SSE指令集(a)

    SSE(Streaming SIMD Extensions),即流式SIMD扩展指令集,是MMX指令集的后续发展,进一步增强了多媒体处理能力和浮点运算能力。SSE引入了128位的向量寄存器,相比MMX的64位,提供了更大的数据吞吐量。自Pentium ...

    ARM汇编指令集查看手册

    ARM处理器支持协处理器,它们扩展了处理器的功能,如浮点运算、向量运算等。协处理器指令,如`MCR`(Move to Coprocessor Register)、`MRC`(Move from Coprocessor Register)等,允许CPU与协处理器之间交换数据...

    常用ARM指令集及汇编.pdf

    ARM指令集主要包括数据处理指令、分支指令、加载/存储指令、浮点运算指令、向量处理指令等。其中,数据处理指令用于对寄存器或内存中的数据进行算术和逻辑运算;分支指令用于程序流程控制;加载/存储指令用于数据在...

    ARM汇编指令集

    首先,ARM汇编指令集中的指令分为数据处理指令、分支指令、浮点运算指令、内存访问指令等几大类。数据处理指令包括基本的算术操作(如加、减、乘、除)、逻辑操作(如与、或、非、异或)以及位移操作。这些指令用于...

    ARM 指令集+汇编程序设计

    ARM指令集包括数据处理指令、加载/存储指令、分支指令、浮点运算指令等,每种指令都有其特定的用途和操作方式。 1. 数据处理指令:这是ARM指令集中最核心的部分,主要包括算术运算(如加、减、乘、除)、逻辑运算...

    ARM9汇编指令集及教程

    汇编指令集包括数据处理指令、分支指令、加载/存储指令、算术逻辑运算指令、比较和交换指令、浮点运算指令(ARM920T支持硬件浮点运算)等。例如,`MOV`指令用于数据传输,`ADD`指令用于加法操作,`LDR`和`STR`指令...

    ARM汇编指令集(包括所有的ARM指令和Thumb指令)

    它提供了丰富的指令,包括数据处理、分支、浮点运算等。ARM指令通常具有较高的代码密度和执行效率,但相对而言,功耗也会更高。例如,"LDR"指令用于从内存加载数据到寄存器,"STR"指令则将寄存器中的数据存储回内存...

Global site tag (gtag.js) - Google Analytics