nasm用XMM寄存器计算double类型累加
global sumsection .text sum:xorpd xmm0, xmm0 ; initialize the sum to 0 初始化xmm0cmp rsi, 0 ; special case for length = 0 rsi计数je done ; //计数到了,就done,退出 next:addsd xmm0, [rdi] ; add in the current array element rdi是一个偏移,用于取数组的地址, rdi默认存储的是数组的首地址add rdi, 8 ; move to next array element rdi 增加一个偏移dec rsi ; count down 计数减少jnz next ; if not done counting, continue done:ret ; return value already in xmm0
最终的返回值,保存在xmm0中。
/** Illustrates how to call the sum function we wrote in assembly language.*/#include <stdio.h> #include <inttypes.h>double sum(double[], uint64_t);int main() {double test[] = {40.5, 26.7, 21.9, 1.5, -40.5, -23.4};printf("%20.7f\n", sum(test, 6));printf("%20.7f\n", sum(test, 2));printf("%20.7f\n", sum(test, 0));printf("%20.7f\n", sum(test, 3));return 0; }
那我们可不可以用别的寄存器计算累加double和呢?答案是可以的。
global sum
section .text
sum:
xorpd xmm1, xmm1
cmp rsi, 0
je done
next:
addsd xmm1, [rdi]
add rdi, 8;add 命令作用于寄存器xmm0
dec rsi
jnz next
done:
movsd xmm0, xmm1
ret
我们初始化寄存器xmm1, 最终把得到的结果放到xmm0就可以了
nasm用XMM寄存器计算double类型累加相关推荐
- nasm 用xmm寄存器做矩阵相加溢出了如何处理?
一 假设相加的两个数大于255,8bit存储不下. 比如200 + 200. 二 先scale到16bit存储,然后再相加即可 汇编代码: global Add global AddSafe Add: ...
- 当double类型数学计算精度偏差解决
使用Java.math包中的BigDecimal类进行高精度计算 1. 通过构造函数的方式把要计算的值给BigDecimal对象传入,使用BigDecimal对象进行乘除加减操作 //通过构造函数的 ...
- double类型计算
由于double类型转换成二进制时可能出现不能被精确的表示,导致我们在进行double类型的计算时,会出现数值不正确的情况. 解决以上问题,我们都很知道应该使用BigDecimal来处理,通常的操作是 ...
- [ JAVA编程 ] double类型计算精度丢失问题及解决方法
[ JAVA编程 ] double类型计算精度丢失问题及解决方法 参考文章: (1)[ JAVA编程 ] double类型计算精度丢失问题及解决方法 (2)https://www.cnblogs.co ...
- 项目经理:不要再使用Double类型去进行金额计算啦
文章目录 问题描述: 原因分析: 解决方案: 经验总结: 前言:看之前我们先思考一个问题,为什么不使用Double类型去进行金额计算? 浮点数是计算机用来表示小数的一种数据类型,采用科学计数法. 在J ...
- java 既然出现double类型×2的n次方的时候计算结果出现偏差
java 既然出现double类型×2的n次方的时候计算结果出现偏差! 代码如下: package Com.Aftvc.tsing; public class example { /** * @ ...
- Java Double类型计算工具类 BigDecimal
BigDecimal 处理Double类型的基本运算 BigDecimal 处理Double类型的基本运算 Java Double 数据在进行数据计算的时候,很容出现丢失精度的问题,因此借助于BigD ...
- 输入在一行中给出两个正整数m和n(m≤n),以空格分隔。按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。建议定义和调用函数fact(n)计算n!
本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数. 建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是 ...
- 对于c语言int类型和float,以及double类型表示范围的计算
首先说一下我原来错误的认识 int是32个bit, 如果我们把第一位理解为符号位,那么很显然int的范围是-(2^31-1)~2^31-1 但是实际上我们都知道int的最小值是-2^31次.. 为什么 ...
最新文章
- Centos7开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000
- 图灵LAMP类图书精彩荟萃
- 解决nodejs环境下端口号被占用的方法
- SpringMVC无法获取请求中的参数的问题的调查与解决(1)
- iOS 几种初始化的分析比较
- chardet java_java实现文件编码监测
- 搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )
- 竟然如此简单!C++实现完全随机加密、解析库,并附上完整代码分析
- Visual SourceSafe(VSS)使用手册(转载)
- springboot 2中文手册_熬夜整理了一套最新版的Java面试题和开发手册(附答案)...
- insert php code test
- 【Python爬虫实战】使用Selenium爬某音乐歌曲及评论信息啦~
- C语言输出一个菱形图案,最优方案,不需要分上下两部分输出
- Centos7之Hadoop完全分布式集群搭建和配置
- 口袋战争服务器维修,口袋战争最新版
- .net输入汉字转拼音
- 九度oj-1158-买房子
- STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程
- 统一身份认证子系统界面设计与实现
- 提高企业计算机网络安全意识,对企业计算机网络安全建设问题综合分析探讨.doc...