填了一下之前的坑。首先是一个题外话,在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

最新文章

  1. Spring之注入的几种方式
  2. centos7.0安装后ifconfig无法使用
  3. wordpress 打开卡在1.gravatar.com
  4. flash flex 程序出现错误 Error #2032
  5. glyphicon halflings regular ttf 报错
  6. R.java 文件内报错:Underscores can only be used with source level 1.7 or greater。
  7. 如何保存CONSOLE LOG
  8. AngularJS Protractor
  9. Xcode 项目文件介绍
  10. org.springframework.web.bind.ServletRequestDataBinde
  11. Javascript的事件委托
  12. [C++程序设计]有默认参数的函数
  13. querySelector $() getElementBy区别
  14. 2017年你需要一个VPN
  15. Java中如何封装自己的类,建立并使用自己的类库?
  16. LOJ 2548 「JSOI2018」绝地反击 ——二分图匹配+网络流手动退流
  17. PornHub 正式发布 AI自动标注色情演员引擎
  18. MySql常用命令集Mysql常用命令3
  19. Codeforces.700E.Cool Slogans(后缀自动机 线段树合并 DP)
  20. Nginx浅析

热门文章

  1. HTTP的长连接(持久连接)和短连接
  2. 使用Jenkins部署Python项目
  3. 在线安装TIDB集群
  4. js day03
  5. 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰
  6. Netty4.0源码解析 NioServerSocketChannel
  7. DJango 基础(7)
  8. python爬虫小说代码,可用的
  9. elk中es集群web管理工具cerebro
  10. [剑指Offer]36-二叉搜索树与双向链表