1、FLD
指令格式:
FLD STReg/MemReal
指令功能:
將浮點數據壓入協處理器的堆棧中。當進行內存單元內容壓棧時,系統會自動決定傳送數據的精度。比如:用DD或REAL4定義的內存單元數值是單精度數等。
STReg是處理器堆棧寄存器ST(0)~ST(7)。
例如:
|
|
.387 data1 DWORD 123, -543 data2 REAL8 -321.5 data3 REAL10 2.5 …… FLD data1 ;壓一個單精度數據進棧 FLD data2 ;壓一個雙精度數據進棧 FLD ST(0) ;把堆棧寄存器ST(0)的值再壓進棧 FLD data3 ;壓一個擴展精度數據進棧 |
2、FST
|
|
指令格式: 指令功能: |
FST STReg/MemReal 將協處理器堆棧棧頂的數據傳送到目標操作數中。在進行數據傳送時,系統自動根據控制寄存器中舍入控制位的設置把棧頂浮點數舍入成相應精度的數據。 |
3、FSTP
|
|
指令格式: |
FSTP STReg/MemReal |
| 指令功能: |
與FST相類似,所不同的是:指令FST執行完后,不進行堆棧的彈出操作,即:堆棧不發生變化,而指令FSTP執行完后,則需要進行堆棧的彈出操作,堆棧將發生變化。 |
從上面的浮點傳送指令中可以看出,不僅可以對內存變量進行傳送,也可以進行寄存器之間的傳送,這一點是整型數據以及BCD型數據傳送指令所不具有的。
4、FXCH
|
|
指令格式: 指令功能: |
FXCH [STReg] 將指定的寄存器中的浮點數與堆頂浮點數進行交換。如果不指定操作數,那么,默認ST(0)和ST(1)二者之間交換數據。 |
例如:FXCH ST(2) —— ST(0)與堆棧寄存器ST(2)進行數據交換。
由於FXCH指令隱含ST(0)作為其中的一個操作數,所以其后只需指定一個操作數,但該操作數必須是寄存器,而且不能為ST(0),但是該指令后的寄存器是可選的,如果沒有指定寄存器操作數,那么隱含是對ST(1)和ST(0)進行交換。
對數據傳送指令的一點總結:它包括三種數據的傳送指令,整型,壓縮的BCD型以及實型,三種數據的傳送有各自的指令集。
壓縮的BCD傳送指令僅有壓棧以及彈棧兩條:FBLD以及FBSTP,它們都僅有一個操作數,而且操作數必須是內存操作數的TWORD類型。
整型數據傳送指令有三條:FILD、FIST和FISTP,其中后兩條是出棧,唯一的區別在於出棧后是否改變(彈出)棧頂數據。它們都僅有一個操作數,而且操作數必須是內存操作數的WORD、DWORD以及QWORD類型,不能為BYTE類型。
相對來講,實數傳送指令比較多,它一共有四條:FLD、FST、FSTP和FXCH。前三條指令的用法與整型類似,只不過用於傳送實型數據,而且三條指令不僅支持內存操作數(為REAL4、REAL8和REAL10類型),而且支持寄存器之間的傳送。三條指令同樣需要一個操作數。而對於FXCH指令,它可以有一個或者沒有操作數,但如果有操作數,那么這個參數必須為寄存器。
