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类型累加相关推荐

  1. nasm 用xmm寄存器做矩阵相加溢出了如何处理?

    一 假设相加的两个数大于255,8bit存储不下. 比如200 + 200. 二 先scale到16bit存储,然后再相加即可 汇编代码: global Add global AddSafe Add: ...

  2. 当double类型数学计算精度偏差解决

    使用Java.math包中的BigDecimal类进行高精度计算 1.  通过构造函数的方式把要计算的值给BigDecimal对象传入,使用BigDecimal对象进行乘除加减操作 //通过构造函数的 ...

  3. double类型计算

    由于double类型转换成二进制时可能出现不能被精确的表示,导致我们在进行double类型的计算时,会出现数值不正确的情况. 解决以上问题,我们都很知道应该使用BigDecimal来处理,通常的操作是 ...

  4. [ JAVA编程 ] double类型计算精度丢失问题及解决方法

    [ JAVA编程 ] double类型计算精度丢失问题及解决方法 参考文章: (1)[ JAVA编程 ] double类型计算精度丢失问题及解决方法 (2)https://www.cnblogs.co ...

  5. 项目经理:不要再使用Double类型去进行金额计算啦

    文章目录 问题描述: 原因分析: 解决方案: 经验总结: 前言:看之前我们先思考一个问题,为什么不使用Double类型去进行金额计算? 浮点数是计算机用来表示小数的一种数据类型,采用科学计数法. 在J ...

  6. java 既然出现double类型×2的n次方的时候计算结果出现偏差

    java 既然出现double类型×2的n次方的时候计算结果出现偏差! 代码如下: package Com.Aftvc.tsing; public class example {  /**   * @ ...

  7. Java Double类型计算工具类 BigDecimal

    BigDecimal 处理Double类型的基本运算 BigDecimal 处理Double类型的基本运算 Java Double 数据在进行数据计算的时候,很容出现丢失精度的问题,因此借助于BigD ...

  8. 输入在一行中给出两个正整数m和n(m≤n),以空格分隔。按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。建议定义和调用函数fact(n)计算n!

    本题要求编写程序,根据公式C​n​m​​=​m!(n−m)!​​n!​​算出从n个不同元素中取出m个元素(m≤n)的组合数. 建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是 ...

  9. 对于c语言int类型和float,以及double类型表示范围的计算

    首先说一下我原来错误的认识 int是32个bit, 如果我们把第一位理解为符号位,那么很显然int的范围是-(2^31-1)~2^31-1 但是实际上我们都知道int的最小值是-2^31次.. 为什么 ...

最新文章

  1. Centos7开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000
  2. 图灵LAMP类图书精彩荟萃
  3. 解决nodejs环境下端口号被占用的方法
  4. SpringMVC无法获取请求中的参数的问题的调查与解决(1)
  5. iOS 几种初始化的分析比较
  6. chardet java_java实现文件编码监测
  7. 搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )
  8. 竟然如此简单!C++实现完全随机加密、解析库,并附上完整代码分析
  9. Visual SourceSafe(VSS)使用手册(转载)
  10. springboot 2中文手册_熬夜整理了一套最新版的Java面试题和开发手册(附答案)...
  11. insert php code test
  12. 【Python爬虫实战】使用Selenium爬某音乐歌曲及评论信息啦~
  13. C语言输出一个菱形图案,最优方案,不需要分上下两部分输出
  14. Centos7之Hadoop完全分布式集群搭建和配置
  15. 口袋战争服务器维修,口袋战争最新版
  16. .net输入汉字转拼音
  17. 九度oj-1158-买房子
  18. STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程
  19. 统一身份认证子系统界面设计与实现
  20. 提高企业计算机网络安全意识,对企业计算机网络安全建设问题综合分析探讨.doc...

热门文章

  1. rails 构建高性能web
  2. elasticsearch 父子文档
  3. ec11编码器c语言程序,旋转编码器 关于EC11计数的程序 - 下载 - 搜珍网
  4. 看似不负责任的菩提祖师,却用另外一种方式,造就了孙悟空的人生
  5. 【硬件】常见芯片封装技术
  6. python空气质量分析与预测_AQI(空气质量指数)分析与预测(一)
  7. 树莓派驱动1.44寸TFT液晶并实时显示摄像头图像
  8. 网络技术-ENSP 华为模拟器(三)身份认证
  9. 网站推荐用的软文说明
  10. 详解边缘计算系统逻辑架构:云、边、端协同