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)

fnstsw EAX
 将比较后的状态字写入到EAX

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)

 

编语言浮点数指令集

;********************************************************************************

73]%^kx=

 


;*                       浮点数指令集

DE. Pw+5<.

 


;********************************************************************************

i5)trSM|

 


Bp4QHv9xqL

 


;

O'!k$iJNb

 


;

38 B\ \

 


;                     浮点数载入指令

:v&GAs6H

 


;

(zTr/

 


;///

; /EH@V|

 


Mg;;o

 


; 助记符  操作数          功能

5M*ZZ+YX

 


  fld    memory(real)    ; 将存储器中的实型压人堆栈

a+J :1'

 


  fild   memory(integer) ;将存储器的整型数值转化为浮点数并压人堆栈

Ebp8})P/~

 


  fbld   memory(BCD)     ;将存储器的BCD码转化为浮点数并压人堆栈

m2N ?Fg

 


  fld    st(num)         ;将浮点型寄存器中的数值压入堆栈

VQLo vt"

 


  fld1   (none)          ;1.0压人堆栈

g]d@X_ &D

 


  fldz   (none)          ;0.0压人堆栈

o_={xrmIA

 


  fldpi  (none)          ;Π(pi) 压人堆栈

ZtB0:'o;

 


  fldl2e (none)          ;log2(e)压人堆栈

-h.' ]^I

 


  fldl2t (none)          ;log2(10)压人堆栈

85nUR[)h

 


  fldlg2 (none)          ;log10(2)压人堆栈

^t #]E#

 


  fldln2 (none)          ;loge(2)压人堆栈

xb1)ZJH

 


  finit  (none)          ; 初始化浮点型单元,并清空8个寄存器的内容

LfF<wDvXf

 


  

uOZ+9x(

 


  

T@k&YJ

 


;

vA+RZ

 


;/

x)V.^-

 


;                   浮点数数据存储指令

o#w6]Fmc

 


;

x\t>|DB

 


;///

0MPsF{Xw[

 


>"ZTyrK

 


;助记符  操作数          功能

@|5B

 


fst     st(num)         ;复制st的值来替换st(num)的内容;只有st(num)是受到影响

=m-_0xo

 


fstp    st(num)         ;复制st的值来替换st(num)的内容;st出栈

(U-p&q>z

 


fst     memory(real)    ;复制st的值为实型数,存入存储器;堆栈不受影响

z.[L1AGa|s

 


fstp    memory(real)    ;复制st的值为实型数,存入存储器;st出栈

B&L{/.v_z\

 


fist    memory(integer) ;复制st的值,并转换为整型数存入存储器

")Bf^DV

 


fistp   memory(integer) ;复制st的值,并转换为整型数存入存储器;st出栈

FeCQGT

 


fbstp   memory(BCD)     ;复制st的值,并转换为BCD码存入存储器;st出栈

vqL{~tR

 


fxch    (none)          ;互换st和st(1)

'^P Ud`

 


fxch    st(num)         ;互换st和st(num)

Y&gfe8%5N

 


SuuWrt}5

 


flb3Iih

 


;///

Fs&m'g

 


;

SSI&WZ2a

 


;///                  浮点型加法指令

ZJw92Sb

 


;///

4.VEE~sH$

 


;//

FtF!Dtv

 


,lN!XP{M6w

 


;助记符  操作数          功能

/CZOO)n

 


  fadd    (none)          ; 将st和st(1)出栈;将两个值相加;并将它们的和入栈

J(l6(+8

 


  fadd    st(num),st      ; 将st(num)和st相加;用和替换st(num)

WG^D$L:

 


  fadd    st,st(num)      ; 将st和st(num)相加;用和替换st

,U<Ku*}B

 


  fadd    memory(real)    ; 将st和存储器中的实型数相加;用和替换st

Q"Bgr&RJ

 


  fiadd   memory(integer) ;将st和存储器中的整型数相加,用和替换st

&1Az`[zKGW

 


  faddp   st(num),st      ;将st(num)和st相加,用和来替换st(num),将st出栈

m:"2I&0)WM

 


  

Mz"kaO

 


  

#b8/gRfS

 


;//

"#m *`n

 


;

JP@UvDE|

 


;///                  浮 点型乘法指令

| _S9U|

 


;///

Dxu)by

 


;//

&7<~Q\XZbI

 


|L+GM"hg

 


;助记符  操作数          功能

*&AK.n_

 


fmul     (none)          ;将st和st(1)出栈;并将它们的值相乘;乘积人栈

({i|

 


fmul     st(num),st      ;将st(num)和st相乘;用乘积来替换st(num)

w$t2Hd

 


fmul     st,st(num)      ;将st和st(num)相乘;用乘积来替换st

s&tr84u|

 


fmul     memory(real)    ;将st和存储器中的实型数相乘;用乘积来替换st

I~mw\K{.3M

 


fimul    memory(integer) ;将st和存储器中的整型数相乘,用乘积来替换st

wYF)G;[wM

 


fmulp    st(num),st      ;将st(num)和st相乘;乘积来替换st(num);并将st出栈

L~;_R*Th

 


nF//y}

 


A&t}s #3

 


;助记符  操作数          功能

O0Z'vbFG

 


  fsub   (none)          ;将st和st(1)出栈,计算st(1)减st的值;将差入栈

q|6lw 74`

 


  fsub   st(num),st      ;计算st(num)减st的值;用差值替换st(num)

p<J/J.E

 


  fsub   st,st(num)      ;计算st减st(num)的值;用差值来替换st

J}.p6E~j

 


  fsub   memory(real)    ;计算st减存储器中的实型数的值;用差值来替换st

?pVODnP k

 


  fisub  memory(integer) ;计算st减存储器中的整型数的值;用差值替换st

T$q]iSgu

 


  fsubp  st(num),st      ; 计算st(num)减st的值;用差值替换st(num);将st出栈

oZzE.Q1T

 


  fsubr  (none)          ;将st和st(1)出栈;计算st减st(1)的 值;将差值入栈

t qER;L

 


  fsubr  st(num),st      ;计算st减st(num)的值,用差值替换 st(num)

ricDP 9#a

 


  fsubr  st,st(num)      ; 计算st(num)减st的值,用差值来替换st

<vj&e(D^

 


  fsubr  memory(real)    ; 计算存储器中的实型数值减st的值,用差值替换st

EoY570PN

 


  fisubr memory(integer) ;计算存储器中的整型数值减st的值;用差值替换st

$AX!L+<!

 


  fsubrp st(num),st      ;计算st减st(num)的值,用差值替换st(num);将st出栈

1f~DUku=

 


  

@ojn<7W

 


  

g;*~xo

 


;//

TQ>1u

 


;///

{X< tUco

 


;///                     浮点型除法指令

Cx@,J\rsQ

 


;///

6ZF5f^M^

 


;//

i,V~5dE[I<

 


3<'n>'

 


;助记符  操作数          功能

bS0LjvY9g

 


fdiv    (none)         ;将st和st(1)出栈;计算st(1)/st的值;并将商入栈

/njN*rhx&Z

 


fdiv    st(num),st     ;计算st(num)/st的值;用商来替换st(num)

~Ipl'cE

 


fdiv    st,st(num)     ;计算st/st(num)的值;用商来替换st

e0aeiG$/0

 


fdiv    memory(real)   ;计算st/存储器中的实型数;用商来替换st

.lj\H

 


fidiv   memory(integer);计算st/存储器中的整型数;用商来替换st

{o;J'yjre1

 


fdivp   st(num),st     ;计算st(num)/st的值;用商来替换st(num);并将st出栈

Dzp9BRS 2f

 


fdivr   (none)         ;将st和st(1)出栈;计算st/st(1)的值;并将商入栈

+nZx{d,wt

 


fdivr   st(num),st     ;计算st/st(num)的值;用商来替换st(num)

dhV=;'

 


fdivr   st,st(num)     ;计算st(num)/st的值;用商来替换st

_o<8R@1

 


fdivr   memory(real)   ;计算存储器中的实型数/st;商来替换st

F_@PSA+

 


fidivr  memory(integer);计算存储器中的整型数/st;用商来替换st

"Z#&A

 


fdivrp  st(num),st     ;计算st/st(num)的值,用商来替换st(num);并将st出栈

QQ pe.oF

 


;i\i+:=

 


]G&d`DNV

 


;//

l'mgjv~

 


;///

++5SofG@

 


;///                      附 加的浮点型指令

/ \OjtE

 


;///

wzF/`z&0?6

 


;/

`WX @1 ]m

 


@G^ l`%

 


;助记符  操作数          功能

vz/.*u

 


fabs    (none)         ;st := |st|(绝对值)

v2/@Pu!kg

 


fchs    (none)         ;st := -st(相反数)

D&:,,Dp

 


frndint (none)         ;对st取整

c?>@ P

 


fsqrt   (none)         ;用st的平方根来替换st

E2+O-;VN

 


e@w-4G(;

 


[y&yy|*\

 


;/

+VCG/J

 


;///

2tMe#V

 


;///                      浮 点型比较指令

ko2?q

 


;///

j.=VZ

 


;

fX^<H_1$G

 


_xjw:

 


;助记符  操作数          功能

h/?$~OD

 


fcom    (none)          ;比较st和st(1)

8Qd*OO

 


fcom    st(num)         ;比较st和st(num)

z10J8Ms'

 


fcom    memory(real)    ;比较st和存储器中的实型数

BE>^;`K

 


ficom   memory(integer) ;比较st和存储器中的整型数

/Ps/m!

 


ftst    (none)          ;比较st和0.0

@komb IK

 


fcomp   (none)          ;比较st和st(1);然后出栈

+&bJhX

 


fcomp   st(num)         ;比较st和st(num);然后出栈

40h

 


fcomp   memory(real)    ;比较st和存储器中的实型数;然后出栈

t} 6QU

 


fcomp   memory(integer) ;比较st和存储器中的整型数;然后出栈

%'+}-w

 


fcompp  (none)          ;比较st和st(1);然后两次出栈

%JoHc?

 


FWC\(f

 


Y2$wL9">

 


;

\*yH33B9

 


;///

C}jFR] x)

 


;///                    混 合浮点型指令

r_ >]y p

 


;///

8SGqDaRt

 


;

U\y:\+e l

 


e92,@

 


; 助记符  操作数          功能

pGRk

 


fstsw   memory WORD     ;复制状态寄存器到存储器字

.RW&=1D6

 


fstsw   ax              ;复制状态寄存器到ax寄存器

@o KW$\

 


fstcw   memory WORD     ;复制控制字寄存器到存储器

3-Bz5sj9

 


fldcw   memory WORD     ;复制存储器字到控制字寄存器