经典汇编语言教程:11.3.2 数据传送类指令

11.3.2 数据传送类指令

为了满足协处理器和CPU之间进行数据交流的需求,就需要实现内存单元和协处理器之间进行数据传送的指令。协处理器的指令系统中有三大类数据传送指令:BCD传送指令、浮点数传送和整数传送指令。

一、BCD传送指令

1、FBLD

指令格式:FBLD MemBCD(*)
指令功能:将内存中的BCD数据压入协处理器的堆栈中;

(*) MemType是指定数据类型Type的内存单元,如:MemBCD是BCD类型的存储单元。此后不再说明。

2、FBSTP

指令格式:FBSTP MemBCD
指令功能:将协处理器中的BCD数据存入内存,并进行堆栈的弹出操作。

例如:

.387
data1DT 123, -543
data2DT 2.5
……
FBLDdata1;把BCD数据123压进栈
FBSTPdata2;把当前堆顶数据弹出,并传送给BCD型的内参单元

二、浮点数传送指令

1、FLD
指令格式:FLD STReg(*)/MemReal
指令功能:将浮点数据压入协处理器的堆栈中。当进行内存单元内容压栈时,系统会自动决定传送数据的精度。比如:用DD或REAL4定义的内存单元数值是单精度数等。

(*) STReg是协处理器堆栈寄存器ST(0)~ST(7)。

例如:

.387
data1DD 123, -543
data2REAL8 -321.5
data3REAL10 2.5
……
FLDdata1;压一个单精度数据进栈
FLDdata2;压一个双精度数据进栈
FLDST(0);把堆栈寄存器ST(0)的值再压进栈
FLDdata3;压一个扩展精度数据进栈

2、FST

指令格式:FST  STReg/MemReal
指令功能:将协处理器堆栈栈顶的数据传送到目标操作数中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成相应精度的数据。

3、FSTP

指令格式:FSTP  STReg/MemReal
指令功能:与FST相类似,所不同的是:指令FST执行完后,不进行堆栈的弹出操作,即:堆栈不发生变化,而指令FSTP执行完后,则需要进行堆栈的弹出操作,堆栈将发生变化。请见11.3.1节中的指令操作符命名规则的说明。

4、FXCH

指令格式:FXCH [STReg]
指令功能:将指定的寄存器中的浮点数与堆顶浮点数进行交换。如果不指定操作数,那么,默认ST和ST(1)二者之间交换数据。

例如:FXCH  ST(2)——栈顶数据与堆栈寄存器ST(2)进行数据交换。

三、整数传送指令

1、FILD

指令格式:FILD MemInt

其中:MemInt是定义为整型数据类型的内存单元,但不能是用DB定义的存储单元。下同,不再叙述。

2、FIST/FISTP

指令格式:FIST MemInt
FISTP MemInt
其中:Mem是定义整型数据类型的内存单元,但不能是用DB定义的存储单元。
指令功能:将协处理器堆栈栈顶的数据传送到目标存储单元中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成整型数据。

指令FIST和FISTP的区别在于堆栈操作,详细请见11.3.1中的命名规则说明

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号