汇编语言

转载 2012年03月27日 10:51:54

转载于:http://cs.fjzs.edu.cn/ketang/hbyy/11-3-2.htm

11.3.2 数据传送指令

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

一、BCD传送指令

1、FBLD

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

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

2、FBSTP

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

例如:

  .387
data1 DT 123, -543
data2 DT 2.5
……
FBLD data1 ;把BCD数据123压进栈
FBSTP data2 ;把当前堆顶数据弹出,并传送给BCD型的内参单元

二、浮点数传送指令

1、FLD

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

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

例如:

  .387
data1 DD 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执行完后,则需要进行堆栈的弹出操作,堆栈将发生变化。请见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中的命名规则说明

 

另:一个学习汇编指令的站点:http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref.html

相关文章推荐

汇编语言实现简单的冒泡排序

最近在学汇编,为逆向打基础,顺手写了一个汇编实现冒泡排序的小程序,代码已做好注释,有兴趣的可以简单看看。...
  • atmysy
  • atmysy
  • 2017年12月10日 11:53
  • 11

使用汇编语言实现if else 循环 函数调用

需要使用汇编来演示如下代码 需要下载ollydbg汇编调试器 点击File-Open随意打开一个exe文件 我这里随便找到c:/windows/explorer.exe文件 这里EIP的值表示下一...

汇编语言——键盘输入字符

程序目的:从键盘上键入字符,并将该字符加1再输出 程序代码: [plain] view plain copy D_SEG SEGMENT      CHAR1 ...
  • judyge
  • judyge
  • 2016年08月23日 09:50
  • 878

数据段描述符和代码段描述符(一)——《x86汇编语言:从实模式到保护模式》读书笔记10

一、段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符。80X86中有各种各样的段描述符,下图展示了它们的分类。 看了上图,你也许会说:天啊,怎么这么多段描述符啊!我可...

8086/8088汇编语言基础

关于汇编语言  百度百科-汇编语言 汇编语言作为最接近底层的,人类能够读懂的语言,在计算机快速发展的时代里,同样能够发挥许多作用。相比高级语言,拥有着更高的效率,在逆向方面,软件安全防护方面,发挥...

C语言中使用汇编语言之一GCC内嵌汇编

在C语言中如何使用汇编语言呢?这个问题在 不同的编译器中,具体实现方法是不同的。不过在实现大方上也不过就是有两种,而且各种编译器的实现方法也是大同小异。一种是在C语言中嵌入汇编语言代码, 另一种是让C...

汇编语言程序入门实验一:在dos下对用户输入作出应答

汇编语言程序入门实验一:在dos下对用户输入作出应答 1,背景             成功预言了今天要上计算机操作系统上机实验课,昨天预习后,今天的两个上机实验做得很成功。但是也有一些问题。问题1:...

汇编语言学习笔记之通用寄存器

汇编语言学习笔记之通用寄存器     从昨天开始,正式拉开了学习汇编语言的序幕,对于汇编语言的一些特点以及数据的表示及类型做了一番了解,由于这些东西每一种语言里都要介绍,而且一时半会也真弄不太明白它...
  • ywbhnay
  • ywbhnay
  • 2016年03月29日 15:23
  • 466

王爽《汇编语言》课程设计1

实验结果 代码如下 assume cs:code data segment db '1975','1976','1977','1978','1979','1980','1981','1982...

王爽《汇编语言》第十章实验之——除法溢出问题

昨天看王爽老师的《汇编语言》,卡在第十章“乘法溢出问题“的实验上了。准确的说是卡在书中给出的那个公式上了,今天把代码分步调试了一下,我的疑惑全解开了。 公式:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编语言
举报原因:
原因补充:

(最多只允许输入30个字)