汇编语言-018(FLD 、FST、FSTP、FCHS、FABS 、浮点运算符、浮点比较 )

1:FLD : FPU(浮点处理器)的加载浮点数到堆栈指令

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
array REAL8 10 DUP(?)
dblOne REAL8 234.56
dblTwo REAL8 10.1.code
main PROCfld array                      ;直接寻址fld [array+16]                 ;直接偏移mov esi,OFFSET arrayfld REAL8 PTR[esi]             ;间接寻址mov esi,1fld array[esi*8]                ;带比例因子的变址fld array[esi*TYPE array]       ;带比例因子的变址mov ebx,OFFSET arraymov esi,8fld REAL8 PTR[ebx+esi]          ;基址 - 变址mov ebx,3*TYPE array         fld array[ebx+esi]              ;基址 - 变址 - 偏移量(二维数组的访问方式)mov esi,1fld array[ebx+esi * TYPE array] ;带比例因子的基址 - 变址 - 偏移量fld dblOne        ;ST(0) = dblOnefld dblTwo        ;ST(0) = dblTwo,ST(1) = dblOneINVOKE ExitProcess,0
main ENDP
END main

2:FST_FSTP : FST伪指令将栈顶数据复制到内存,FSTP伪指令将栈顶数据复制到内存,并出栈

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dblOne REAL8 234.56
dblTwo REAL8 10.1
dblThree REAL8 ?
dblFour REAL8 ?.code
main PROCfld dblOne  ;ST(0) = dblOnefld dblTwo  ;ST(0)= dblTwo,ST(1) = dblOne;将栈顶数据复制到内存fst dblThree  ;10.1fst dblFour   ;10.1;将栈顶数据复制到内存,并出栈fstp dblThree  ;10.1fstp dblFour   ;234.56INVOKE ExitProcess,0
main ENDP
END main

3:FCHS_FABS : FCHS伪指令将ST(0)中浮点值的符号取反,FABS伪指令将ST(0)中浮点值的符号去掉,以得到绝对值

.386
.model flat,stdcall.stack 
ExitProcess PROTO,dwExitCode:DWORD.data
dblOne REAL4 1.23.code
main PROCfld dblOnefchs   ;ST(0)中浮点值的符号取反fabs   ;ST(0)中浮点值的符号去掉,以得到绝对值INVOKE ExitProcess,0
main ENDP
END main

4:FADD_FADDP_FIADD :浮点数据三种相加运算伪指令使用

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dblOne REAL8 234.56
dblTwo REAL8 10.1
myInteger DWORD 1
.code
main PROCfld dblOnefld dblTwo;ST(1) 234.56   , ST(0)10.1fadd ;无操作数的用法 ST(0)ST(1)相加,结果暂存在ST(1),然后ST(0)出栈,结果保存在栈顶;ST(0) 244.66fld dblTwo;ST(1) 244.66  ,ST(0)10.1fadd ST(1),ST(0)   ;寄存器操作数用法,ST(0)加到ST(1);ST(1) 254.76  ,ST(0)10.1;内存操作数用法fadd dblTwo  ;ST(0) += dblTwo  mov esi,OFFSET dblTwofadd REAL8 PTR[esi] ;ST(0) += [esi];ST(1)254.76  ST(0)30.3faddp ST(1),ST(0)  ;ST(0)加到ST(1),然后ST(0)出栈 ;ST(0)285.06;先将源操作数转换为扩展双精度浮点点,fiadd myInteger  ;ST(0) += myIntegerINVOKE ExitProcess,0
main ENDP
END main

5:FSUB_FSUBP_FISUB : 浮点数据三种相减运算伪指令使用

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dblOne REAL8 10.10
dblTwo REAL8 1.1
myInteger DWORD 1.code
main PROCfld dblOnefld dblTwo;无操作数用法,ST(1)减去ST(0),结果暂存ST(1),然后ST(0)弹出堆栈,将结果保留在栈顶fsub ;内存操作数用法,ST(0)减去内存操作数fsub dblTwo  ;ST(0) -= dblTwo;寄存器用法fsub ST(1),ST(0)  ;ST(1) -= ST(0) ,ST(0)不出栈;fsubp 指令,会将ST(0)出栈fld dblTwofsubp ST(1),ST(0)  ;ST(1) -= ST(0) ,然后ST(0)出栈;整数减法,先把源操作数转换为扩展双精度浮点数,再从ST(0)中减去该操作数FISUB myInteger  ;ST(0) -= myInteger INVOKE ExitProcess,0
main ENDP
END main

6:FMUL_FMULP_FIMUL : 浮点数据三种相乘运算伪指令使用

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dblOne REAL8 10.10
dblTwo REAL8 1.1
myInteger DWORD 1.code
main PROCfld dblOnefld dblTwo;无操作数用法,ST(1)乘以ST(0),结果暂存ST(1),然后ST(0)弹出堆栈,将结果保留在栈顶fmul;内存操作数用法,ST(0)乘以内存操作数fmul dblTwo  ;ST(0) *= dblTwo;寄存器用法fmul ST(1),ST(0)  ;ST(1) *= ST(0) ,ST(0)不出栈;fmulp 指令,会将ST(0)出栈fld dblTwofmulp ST(1),ST(0)  ;ST(1) *= ST(0) ,然后ST(0)出栈;整数乘法,先把源操作数转换为扩展双精度浮点数,再从ST(0)中乘以该操作数fimul myInteger  ;ST(0) *= myInteger INVOKE ExitProcess,0
main ENDP
END main

7:FDIV_FDIVP_FIDIV : 浮点数据三种相除运算伪指令使用

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dblOne REAL8 10.10
dblTwo REAL8 1.1
myInteger DWORD 1.code
main PROCfld dblOnefld dblTwo;无操作数用法,ST(1)除去ST(0),结果暂存ST(1),然后ST(0)弹出堆栈,将结果保留在栈顶fdiv ;内存操作数用法,ST(0)除去内存操作数fdiv dblTwo  ;ST(0) /= dblTwo;寄存器用法fdiv ST(1),ST(0)  ;ST(1) /= ST(0) ,ST(0)不出栈;fsubp 指令,会将ST(0)出栈fld dblTwofdivp ST(1),ST(0)  ;ST(1) /= ST(0) ,然后ST(0)出栈;整数除法,先把源操作数转换为扩展双精度浮点数,再从ST(0)中除去该操作数fidiv myInteger  ;ST(0) /= myInteger INVOKE ExitProcess,0
main ENDP
END main

8:FCOMP : 浮点数据比较伪指令FCOMP使用

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD;比较如下C++代码
;double X = 1.2
;double Y = 3.0
;int N =0
;if (X < Y)
;  N= 1.data
X REAL8 1.2
Y REAL8 3.0
N DWORD 0;fcom   比较ST(0)ST(1)
;fcom m32fp 比较ST(0) 与 m32fp
;fcom m32fp 比较ST(0) 与 m64fp
;fcom ST(i)  比较ST(0)ST(i);fcomp 会将ST(0)出栈;fcompp 会出栈两次.code
main PROCfld X      ;ST(0) = Xfcomp Y    ;比较ST(0)和Y,ST(0)出栈fnstsw ax  ;状态字送入AXsahf       ;AH复制到EFLAGSjnb L1     ;X不小于Y ? 跳过mov N,1    ;N=1
L1:INVOKE ExitProcess,0
main ENDP
END main

9:FCOMI : 浮点数据比较伪指令FCOMI使用,因为浮点数比较的运行时开销大于整数比较, Intel P6系列引入了fcomi,比较浮点数值,并直接设置ZF,PF和CF

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
X REAL8 1.2
Y REAL8 3.0
N DWORD 0;fcomi 格式
;fcomi ST(0),ST(i).code
main PROCfld Y       ;ST(0) = Yfld X       ;ST(0) = X,ST(1) = Yfcomi ST(0),ST(1)  ;比较ST(0)ST(1)jnb L1      ;ST(0)不小于ST(1)?跳过mov N,1     ;N =1
L1:INVOKE ExitProcess,0
main ENDP
END main

10:FCOMI_EQUAL : 比较浮点数相等的问题,因为浮点数在计算过程中会出现舍入误差,比较相等比较X与Y时,应该取它们的差值的 绝对值|x-y|,再与用户定义的误差值比较,只不大于误差值就认为两个浮点数相等

include Irvine32.inc
include Macros.inc
.data
epsilon REAL8 1.0E-12
val2 REAL8 0.0  ;比较的数值
val3 REAL8 1.001E-13  .code
main PROC;如果(val2 == val3),显示"Values are equal"fld epsilonfld val2fsub val3fabsfcomi ST(0),ST(1)ja skipmWrite <"Values are equal",0dh,0ah>
skip:INVOKE ExitProcess,0
main ENDP
END main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mcq 队列_MCQ | 基础知识 免费和开源软件| 套装4

mcq 队列Q1. What do you call the technique of storing encrypted user passwords in Linux? Q1。 您如何称呼在Linux中存储加密的用户密码的技术&#xff1f; System Password Management 系统密码管理 Shadow Password 影子密码 Encrypted Password 加密密码 None of the…

将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这4组数作为数当中的低4位分别放在AL,BL,CL,DL中。

将AX寄存器中的16位数据分成4组&#xff08;从高到低&#xff09;&#xff0c;每组4位&#xff0c;然后把这4组数作为数当中的低4位分别放在AL&#xff0c;BL&#xff0c;CL&#xff0c;DL中。 P176 4.14 编程思路&#xff1a;首先用BX、DX存放AX&#xff0c;即原AX原BX原DX&…

一个很不错的wp企业站模板

http://zjuhpp.com/chinese-localization-of-business-wordpress-theme-devster.html转载于:https://www.cnblogs.com/i-kyle/archive/2012/09/13/2683817.html

著名的自由软件圣战- “KDE/QT .VS. Gnome/Gtk”

在 Unix 的图形界面一向是以 MIT 的 X Window 系统为标准&#xff0c; 可是在商业应用上有两大流派&#xff0c;一派是以 Sun 公司领导的 Openlook 阵营&#xff0c;一派是 IBM/HP 领导的OSF (Open Software Foundation) 的 Motif&#xff0c; 双方经过多年竞争之后&#xff0c…

汇编语言-019(汇编程序与c\c++相互调用)

1&#xff1a;在C程序中使用__asm块插入汇编代码程序&#xff08;不能用LENGTHOF与SIZEOF运算符&#xff0c;而是LENGTH和SIZE&#xff09; struct Package {long originZip; //4long destinationzip;//4float shippingPrice; //4 };int main(int argcount,char* args[]) {c…

kotlin 判断数字_Kotlin程序检查数字是偶数还是奇数

kotlin 判断数字Given a number N, we have to check whether it is EVEN or ODD. 给定数字N &#xff0c;我们必须检查它是偶数还是奇数 。 Example: 例&#xff1a; Input:N 13Output:"ODD"Input:N 24Output:"EVEN"程序在Kotlin检查偶数或奇数 (Prog…

微机原理与接口技术(第2版)考点

第一章 1&#xff0c;微型计算机的特点&#xff1a; 功能强、可靠性高价格低廉系统设计灵活&#xff0c;适应性强体积小&#xff0c;重量轻&#xff0c;维护方便 2&#xff0c;微型计算机的硬件组成 微处理器内存储器I/O接口电路I/O设备系统总线 3&#xff0c;微机的工作过…

搜狗面试笔试一面二面全经历

09.25 华科西十二教&#xff0c;搜狗招聘笔试&#xff1a; C搜索引擎研发。同时有威盛、烽火两家笔试&#xff0c;就没有去。 09.26 华科校内某酒店&#xff0c;搜狗一面&#xff1a; 笔试做的不错&#xff0c;客观题错了3.5&#xff08;20个&#xff09;&#xff0c;后两个算法…

UltraEdit语法高亮

语法加亮分支位于配置&#xff0d;编辑器显示之下&#xff0c;允许用户配置语法加亮选项&#xff1a;语法加亮可以识别预定词语&#xff0c;并用不同颜色显示它们。该功能对于程序员来说尤其有用&#xff0c;并且对那些想用不同颜色显示文档中词语的用户也非常有用。提供二十种…

线性代数 向量长度_用户定义长度的向量| 使用Python的线性代数

线性代数 向量长度Prerequisite: Defining a vector 先决条件&#xff1a; 定义向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a matrix in n-dimensional space…

顺序表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ typedef void SeqList; //定义链表数据类型&#xff0c;void因为要适用不同链表数据类型 typedef void SeqListNode; //定义链表节…

设有两个16位整数变量A和B,试编写完成下述操作的程序。

设有两个16位整数变量A和B&#xff0c;试编写完成下述操作的程序。 &#xff08;1&#xff09;若有两个数中一个是奇数&#xff0c;则将奇数存入A中&#xff0c;偶数存入B中。 &#xff08;2&#xff09;若两个数均为奇数&#xff0c;则两数分别减1&#xff0c;并存回原变量中…

棋牌游戏服务器架构: 详细设计(三) 数据库设计

主要有3类Database: ServerInfoDB,UserInfoDB和GameDB。 ServerInfoDB主要存储的是游戏列表的信息,UserInfoDB存储玩家的全局信息&#xff0c;而GameDB就是积分以及积分变化情况。下面分别加以描述。 1. ServerInfoDB ServerInfoDB主要存储游戏列表信息。主要有以下几个表: 1. …

程序开发与性格特征

程序开发与性格特征 引言&#xff1a; 程序员给很多人的印象一般是不善于交际、表情严肃、思维紧密、做事认真、沉着冷静等等。那么这些特征到底和程序开发有没有关系呢&#xff1f;不同性格的人在团队开发当中将面临什么样的问题以及不同性格的人在团队开发中又将发挥着什么样…

汇编语言编写程序从1加到100要求使用循环结构。

汇编语言编写程序从1加到100要求使用循环结构。 汇编思路&#xff1a;AX用于存放每次累加的结果—>09998…0 首先&#xff0c;DATA段中定义SUM用来存放结果和&#xff0c;STACK段定义一个200DB类型空间&#xff0c;用来存放数据。CODE段&#xff0c;AX清0&#xff0c;CX赋值…

c语言指针++_C ++此指针| 查找输出程序| 套装3

c语言指针Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {int VAL;public:Test(int v){VAL v;}Test* Sum(Test T1, Test T2){VAL T1.VAL T2.VAL;return this;}void print(){cout << VAL << " ";}};int mai…

线性表(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //定义线性表类型 typedef struct _tag_LinkListNode LinkListNode;//定义线性表节点类型 struct _tag_Li…

WPF 操作 richTextBox

FROM:http://blog.csdn.net/wuzhengqing1/article/details/7010902 取出richTextBox里面的内容 第一种方法&#xff1a; 将richTextBox的内容以字符串的形式取出 string xw System.Windows.Markup.XamlWriter.Save(richTextBox.Document); 第二种方法&#xff1a;将richTe…

微软企业库4.1学习笔记(八)创建对象 续集2

3.3通过配置指定和Unity的整合 另外一种方法是在配置源中指定配置的需要&#xff0c;你可以指定下面的一条或者多条&#xff1a; 你可以在Unity配置中指定想要的BlockExtensions  你可以在Unity配置中的type配置节指定如何创建企业库对象&#xff0c;指定类型映射的关系&…

已知有几个数据存放在BUF为首址的字节存储区中,试统计其中正数的个数,并将结果存入ZNUM单元中。

已知有几个数据存放在BUF为首址的字节存储区中&#xff0c;试统计其中正数的个数&#xff0c;并将结果存入ZNUM单元中。 P160 例4.17 汇编思路&#xff1a;DATA段&#xff0c;定义BUF存储区&#xff0c;定义一下DB类型的数据&#xff0c;N为定义数据的总个数&#xff0c;ZNUM…