汇编语言:浮点数传送指令

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指令,它可以有一个或者没有操作数,但如果有操作数,那么这个参数必须为寄存器。

时间: 2024-11-10 12:01:38

汇编语言:浮点数传送指令的相关文章

协处理器的三大类数据传送指令

转载于:http://cs.fjzs.edu.cn/ketang/hbyy/11-3-2.htm 11.3.2 数据传送指令 为了满足协处理器和CPU之间进行数据交流的需求,就需要实现内存单元和协处理器之间进行数据传送的指令.协处理器的指令系统中有三大类数据传送指令:BCD传送指令.浮点数传送和整数传送指令. 一.BCD传送指令 1.FBLD 指令格式:FBLD MemBCD(*)指令功能:将内存中的BCD数据压入协处理器的堆栈中: (*) MemType是指定数据类型Type的内存单元,如:M

深入理解计算机系统(3.3)------操作数指示符和数据传送指令

在上一篇博客 程序编码以及数据格式 中我们给出了一个简单的C程序,然后编译成了汇编代码.大家看不懂没关系,后面的博客我们将逐渐揭开一些汇编指令的神秘面纱.本篇博客我们将对操作数指示符和数据传送指令进行详细的介绍. 1.整数寄存器 上一篇博客我们讲了在汇编语言中,如下的几个处理器状态是可见的: 一.程序计数器(在 IA32 中通常称为 PC,用 %eip 表示):指示将要执行的下一条指令在存储器中的地址. 二.整数寄存器文件:包含8个命名的位置,可以存储一些地址或者整数的数据.有的用来记录某些重要

数据传送指令详解

数据传送指令详解 前言 上一章我们说了汇编语言的基础,包括数据格式,寄存器以及操作数的标识方式,接下来我们就应该去认识一下hiU币按语言当红真难过的格各个指令了.这些指令大部署很简单,但是组合在一起却能模拟出我们程序当中香烟的任何效果,确实很神奇. 数据传送指令 数据传送指令的目的是我了将一个数据从一个位置复制到另一个位置.既然如此,那么数据传送至零就会包含一个源操作数和一个目的操作数,指令会将源操作数的值复制到目的操作数并覆盖. 数据传送指令一共可以分为5种,分别是mov,movs,movz,

DF标志和串传送指令

DF标志和串传送指令 flag的第10位是DF,方向标志位.在串处理指令中,控制si.di的递减. df = 0 每次操作后si.di递增 df = 1 每次操作后si.di递减 串传送指令 格式1: movsb 功能描述 1. ((es)*16+di) = ((ds)*16+si) 2. 如果 df=0 则: (si)=(si)+1 (di)=(di)+1 如果 df=1 则: (si)=(si)-1 (di)=(di)-1 C语言描述 // si,di 相当于C语言循环中 i,j 变量的功能

浮点数反汇编指令

;//////////////////////////////////////////////////////////////////////////////// ;//// 浮点数载入指令 ;/////////////////////////////////////////////////////////////////////////////// ;助记符 操作数 功能 fld memory(real) ; 将存储器中的实型压人堆栈 fild memory(integer) ;将存储器的整型

8086指令系统通用数据传送指令

最基本的传送指令: MOV 目的操作数,源操作数 注意点: 1)源操作数跟目的操作数之间的位数必须一致 2)立即数跟寄存器CS及IP不可以作为目的操作数 3)源操作数跟目的操作数不能同时为内存单元,也不能同时为立即数 4)用BP来间接寻址时,默认的段寄存器是SS,其余寄存器的间接寻址时,其默认的段寄存器是DS. 5)通用传送指令都不改变标志 6)在修改SS和SP的连续两条指令之间不允许插入其他任何指令 堆栈操作指令 PUSH 源操作数 POP 目的操作数 1)8086CPU的堆栈操作必须是字操作

学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、MOVZX、MOVSX

汇编指令的一般性要求: 1.两个操作数的尺寸必须一致; 2.操作数不能同为内存. MOV(Move): 最常用的数据传送指令 ;该指令不影响 EFlags ;指令格式: (其中的 r.m.i 分别表示: 寄存器.内存.立即数) MOV r/m, r/m/i ; Test21_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc in

西门子PLC学习笔记十一-(装入与传送指令)

S7-300/400指令有:装入与传送指令.比较指令.算术运算指令.字逻辑运算指令.移位指令.逻辑控制指令.程序控制指令.主控指令等. 1.装入与传送指令(不能用于梯形图编程) 装入传送指令实现了各种数据存储区的数据交换,其凭借累加器来完成.装入指令标识符:L,传送指令标识符:T. s7-300PLC有2个32位的累加器,当执行装入指令(L)时,首先将累加器1中原有的数据移入累加器2中,累加器2中的原有内容被覆盖,然后将数据装入累加器1中:当执行传送指令(T)时,将累加器1中的数据写入目标存储区

【汇编指令】ARM指令集之PSR传送指令

ARM指令集提供了两条指令,可直接控制程序状态寄存器(PSR,Program State Register).MRS指令用于把CPSR或SPSR的值传送到一个寄存器:MSR与之相反,把一个寄存器的内容传送到CPSR或SPSR.这两条指令结合,可用于对CPSR和SPSR进行读/写操作. cpsr_c代表的是这32位中的低8位,也就是控制位 CPSR有4个8位区域:标志域(F).状态域(S).扩展域(X).控制域(C) 通过一般示例如下观察PSR指令的相关操作: 1 > [切换到IRQ模式] 2 >