浮点指令 对下面的指令先做一些说明:
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)
分享到:
相关推荐
### 80X86浮点指令详解 #### 一、引言 在计算机科学领域,特别是对于基于Intel 80X86架构的处理器而言,掌握浮点运算指令是理解底层硬件工作原理的关键之一。浮点指令集是用于处理浮点数(实数)的一种指令集,它...
### 浮点指令-汇编语言程序设计 #### 基础概念介绍 在计算机科学领域,特别是针对处理器架构及编程技术的研究与应用过程中,浮点运算占据着极为重要的地位。浮点运算能够处理实数计算,对于科学计算、工程仿真、...
### ARM矢量浮点指令集概述 ARM矢量浮点指令集是专为ARM处理器设计的一套用于处理浮点运算的指令集合。该指令集旨在提高高性能计算、图像处理、科学计算等领域的处理效率,特别是在嵌入式系统和移动设备上。通过...
80387浮点指令是Intel 80387数学协处理器中用于处理浮点运算的一系列汇编指令,这些指令对于高效执行复杂的浮点计算至关重要。80387协处理器是为了增强80386处理器的浮点处理能力而设计的,它支持IEEE 754浮点标准。...
### 浮点指令详解 #### 一、概述 在计算机科学领域中,浮点运算是一项基本而重要的功能,尤其在科学计算、图形处理等领域中应用广泛。为了支持这些运算,处理器设计了专门的浮点运算单元(FPU),并定义了一系列...
SSE包含了一系列的浮点指令,这些指令主要用于处理单精度(32位)浮点数,同时也支持一些双精度(64位)浮点操作。以下是一些关键的SSE浮点指令的说明: 1. **ADDPS**:这是添加四个单精度浮点数的指令。它将源操作...
在8088处理器中,浮点指令是用于处理浮点数运算的重要组成部分。这些指令主要涉及浮点数据的传递、常量加载、比较以及算术运算,它们使用浮点寄存器(st(i))和内存操作数进行计算。以下是详细说明: 1. 数据传递和对...
在本项目中,我们主要探讨的是如何在MARS(MIPS Assembler and Runtime Simulator)环境中实现整数的加减乘除运算,而不依赖浮点指令。这是一个针对重庆大学计算机组成原理课程的实验项目,旨在深化对计算机底层运算...
例如,x86架构的处理器支持x87浮点指令集,而更现代的 SSE (Streaming SIMD Extensions) 和 AVX (Advanced Vector Extensions) 指令集则提供了更高效的浮点运算能力。 在使用FP系列浮点运算时,程序员需要关注精度...
如果希望提高效率,可以取消该选项,编译为硬浮点程序,利用处理器的浮点指令进行计算。对于运行在内核上的应用程序,尤其是图形应用,可以直接编译为硬浮点,因为硬件支持浮点运算。 对于不带FPU的处理器,如某些...
浮点指令与寄存器的设计和运用是实现高效、精确的浮点运算的基础。下面,我们将深入探讨“寄存器浮点指令”的核心概念及其工作原理。 ### 浮点数据格式 浮点数通常由三部分组成:符号位、指数部分和有效数字部分。...
浮点定制指令是指在FPGA中针对浮点运算进行优化的一类特殊指令,这些指令可以显著提高系统在处理浮点计算任务时的效率和性能。Nios II是Altera公司(现被Intel收购)推出的一种软核CPU,它可以在FPGA中集成,支持...
浮点运算指令速查手册是IT领域中针对处理器浮点计算的一份重要参考资料,它包含了大量用于处理浮点数据和进行浮点运算的指令。这些指令对于编程、编译器优化以及高性能计算至关重要,因为它们直接影响到计算精度和...
STM32F3xx/STM32F4xx ( ARM Cortex-M4 内核)中集成了 FPU ,也就是浮点指令单元,可以将浮点运算变得简单快速,但如果想要发挥出这个浮点运算的最大功效,必须使用浮点指令集,开发者可以直接使用浮点指令集,但...
这个程序说明浮点指令的使用。 该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。 3. prim.s 求素数程序。这个程序计算若干个整数的素数。 4. input.s 输入子程序。这个子程序从标准输入读入数据。 ...
声明:本电子文档是《加密与解密(第四版)》的配套辅助电子教程!电子工业出版社依法对本作品享有专有出版权。任何未经权利人书面许可,复制、销售或通过信息网络传播本作
STM32 硬件浮点使用方法 STM32 中的浮点运算是指对浮点数进行运算的能力,浮点数是一种数据类型,它可以表示很大的数值范围。浮点运算在 STM32 中是通过硬件浮点单元(FPU)来实现的。 在 STM32F4 中,FPU 是一个...
采用e200z6核的PowerPC芯片汇编指令,比较简略,可用于指令的速查。 此指令集仅适用于e200z6核,其它核的PowerPC指令略有差异。
- **浮点指令重命名**:MFTX.S、MFTX.D指令分别更名为FMV.X.S、FMV.X.D指令;MXTF.S、MXTF.D指令分别更名为FMV.S.X、FMV.D.X指令;MFFSR、MTFSR指令分别更名为FRCSR、FSCSR指令。 - **fcsr寄存器访问指令增加**:...