填了一下之前的坑。首先是一个题外话,在VS2015中默认汇编代码会使用SSE生成,如果想用FPU编译出FLD,FSTP这些指令,需要设置一下。

项目 >> 属性 >> C/C++ >> Code Generation

Enable Enhanced Instruction Set默认是是Not Set,但是会被开启,设置成IA32就行了。

方便生成浮点计算代码时使用。

然后进入正题,Sin,Cos,Pow计算,先上代码

.data
;0.52359877 = 30度
fval1 real4 0.52359877

x real4 3.14
power real4 1.1

;3.14^1.1 = 3.5206480575123685712125842405755

.code
SomeFunction proc
	fld fval1
	fsin
	;sin(30度) = 0.5,结果放到st0

	fld fval1
	fcos
	;cos(30度) = 0.86602540378443864676372317075294,结果放到st0

	fld fval1
	fsincos
	;st0 = sin,st1 = cos

;dividend被除数

LabelMyPower:
	;x^power = 2^(y*log2(x))
	;3.14^1.1
	fld power
    fld x
    fyl2x		;fyl2x = y * log2(x) = power * log2(x) = st1 * log2(st0),结果放到st0 = 1.8158411074047422
    fld1
    fld st(1)	;fyl2x的结果
    fprem		;相当于fmod(1.0, fyl2x的结果) = fmod(st0, st1),得到余数部分,结果放到st0 = 0.81584110740474229
    f2xm1		;2^x - 1,st0[-1.0, +1.0],操作数值域为[-1.0, +1.0],所以才有上面的fld1,结果st0 = 0.76032414147020678
    fadd		;st0 = 0.76032414147020678,st1 = 1.0,加上上一指令减去的1.0,结果st0 = 1.7603241414702068
    fscale		;st0 * 2^(st1取整为1, st1 = 1.8158411074047422) = 1.7603241414702068 * 2^1 = 3.5206482829404137
				;st0 = 2^小数次方 * 2^整数次方

    ;fxch st(1)
    ;fstp st
	;st0 = x^power

	ret
SomeFunction endp

end

  

  

注释都写好了,应该没问题,Sin,Cos不用说了。

Pow函数主要用到了指数和对数的性质,说实话指数对数咋用早忘光了,还好有笔记,下辈子真得考虑做个学霸了,这辈子的数学能力应该没救了。

简单来说,x^y可以化成2^(y*log2(x))这种方法计算。

汇编代码就是先计算y*log2(x)小数部分,求2的指数,再计算整数部分2的指数,再相乘

写汇编Intel手册果然少不了,10年前就听大牛说过这玩意,10年后终于有幸接触了Hello World级汇编编程,可喜可贺,也就比大牛晚个10年而已。

pow汇编代码来自

http://www.madwizard.org/programming/snippets?id=36

汇编语言计算Sin,Cos,Pow函数的更多相关文章

  1. C语言pow()函数的计算精度问题

    编程计算 a+aa+aaa+-+aa-a(n个a)的值,n和a的值由键盘输入.例如,当n=4,a=2,表示计算2+22+222+2222的值. 程序运行结果示例: Input a,n: 2,4↙ su ...

  2. pow函数(数学次方)在c语言的用法,两种编写方法实例( 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)

    关于c语言里面pow函数,下面借鉴了某位博主的一篇文章: 头文件:#include <math.h> pow() 函数用来求 x 的 y 次幂(次方),x.y及函数值都是double型 , ...

  3. pow()函数结果强制转化为int造成误差的分析

    开发环境:codeblocks,编译器gcc 在计算102时调用pow(10, 2),再强制类型转换为int类型后输出: printf(,)); 得到的结果却是:99 这是因为 double pow( ...

  4. Python3 pow() 函数

    Python3 pow() 函数  Python3 数字 描述 pow() 方法返回 xy(x的y次方) 的值. 语法 以下是 math 模块 pow() 方法的语法: import math mat ...

  5. pow函数

    pow函数如果直接强制类型转换成int,会导致精度的损失.如果是int的幂计算,建议重写函数.或者用double型进行计算.

  6. (函数分治法)实现pow函数(x的y次方幂)

    题目:实现pow函数. 题目分析:因为一个一个乘,循环太大,参考矩阵连乘问题:对于n=4的话,可以得出x的平方,然后平方与平方相乘.节省计算次数.对于偶数的幂,只要x的平方多次递归调用即可:对于奇数的 ...

  7. c++ pow函数

    函数名称:   pow 函数原型:   double pow( double x, double y ); 函数功能:   计算x的y次幂 例:z=pow(x,y);    x=9,y=8  z就是9 ...

  8. python实现pow函数(求n次幂,求n次方)

    目录 类型一:求n次幂 类型二:求n开方 类型一:求n次幂 实现 pow(x, n),即计算 x 的 n 次幂函数.其中n为整数.pow函数的实现--leetcode 解法1:暴力法 不是常规意义上的 ...

  9. 初中知识回顾tan,sin,cos关系

    如果K=tan, sin 是X x=k/power(1+k*k,0.5)  开平方 cos是y y=1.0/power(1+k*k,0.5) 开平方 gisoracle总结 ============= ...

随机推荐

  1. docker 批量删除

    杀死所有正在运行的容器docker kill $(docker ps -a -q) 删除所有已经停止的容器docker rm $(docker ps -a -q) 删除所有未打 dangling 标签 ...

  2. oracle数据库组件列表及相关的数据字典视图

    Component Data dictionary tables and views Database V$DATABASE, V$VERSION, V$INSTANCEShared server V ...

  3. 刘志梅 201771010115 《面向对象程序设计(java)》 第八周学习总结

    实验六 接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 接口定义:接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义:由常量和一组抽象方法组成:接 ...

  4. 【亲测】在网页上查找接口,Network--XHR,出来的每个Name都是后台的一个接口

  5. win7+win10系统使用日常经验集锦

    请保留此份 Cmd Markdown 的欢迎稿兼使用说明, 当然你也可以使用彩色字体. 或者使用小体字. 或者使用大体字. 如需撰写新稿件,点击顶部工具栏右侧的 新文稿 或者使用快捷键 Ctrl+Al ...

  6. scp: command not found

    scp 不能用? [root@doc]# scp jdk-8u144-linux-x64.tar.gz root@10.10.10.17:/root/ root@10.10.10.17's passw ...

  7. 再谈PHP设计模式

    设计模式 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法. 单例模式 $_instance必须声明为静态的私有变量 构造函数和析构函数必须声 ...

  8. (转)2018CRM系统最新排行榜

    https://www.jianshu.com/p/718cc29de91f 2018CRM系统最新排行榜 深谷幽兰呼 关注 2018.09.04 10:22 字数 1524 阅读 3182评论 0喜 ...

  9. springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config

    1.Hystrix断路器简介 Hystrix断路器简介 hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因 ...

  10. BlockTrain网络

    [BlockTrain网络] 1.每个节点都参与全⽹络的路由功能,同时也可能包含其他功能.每个节点都参与验证并传播交易及区块信息,发现并维持与对等节点的连接.在图6-1所⽰的全节点⽤例中,名为“⽹络路 ...