汇编——SSE打包整数

SSE也可以进行整数向量的加法,示例如下:

;sse_integer.asm
extern printfsection .datadummy db 13
align 16pdivector1  dd  1dd  2dd  3dd  4pdivector2  dd  5dd  6dd  7dd  8fmt1    db      "Packed Integer Vector 1: %d, %d, %d, %d", 10, 0
fmt2    db      "Packed Integer Vector 2: %d, %d, %d, %d", 10, 0
fmt3    db      "Sum Vector: %d, %d, %d, %d", 10, 0
fmt4    db      "Reverse of Sum Vector: %d, %d, %d, %d", 10, 0section .bss
alignb 16pdivector_res   resd    4pdivector_other resd    4section .textglobal mainmain:
push rbp
mov rbp, rsp; 打印向量1mov rsi, pdivector1mov rdi, fmt1call printpdi
; 打印向量2mov rsi, pdivector2mov rdi, fmt2call printpdi; 添加两个对齐的双整数向量movdqa  xmm0, [pdivector1]paddd   xmm0, [pdivector2]
; 将结果保存在内存中movdqa  [pdivector_res], xmm0
; 打印内存中的向量mov     rsi, pdivector_resmov     rdi, fmt3call    printpdi; 将内存向量复制到xmm3movdqa  xmm3, [pdivector_res]
; 从xmm3中提取打包值pextrd  eax, xmm3, 0pextrd  ebx, xmm3, 1pextrd  ecx, xmm3, 2pextrd  edx, xmm3, 3
; 以相反顺序插入xmm0pinsrd  xmm0, eax, 3pinsrd  xmm0, ebx, 2pinsrd  xmm0, ecx, 1pinsrd  xmm0, edx, 0
; 打印反转后的向量movdqa  [pdivector_other], xmm0mov     rsi, pdivector_othermov     rdi, fmt4call    printpdi; 退出
mov rsp, rbp
pop rbp
ret;打印函数------------------------------------
printpdi:
push rbp
mov rbp, rspmovdqa xmm0, [rsi]; 从xmm0中提取打包值pextrd esi, xmm0, 0pextrd edx, xmm0, 1pextrd ecx, xmm0, 2pextrd r8d, xmm0, 3mov rax,0call printf
leave
ret

以上代码展现了两个整数向量的相加操作,并且将结果向量反向写进一个向量,然后输出。结果如下:
运行结果示例
需要注意的几个指令整理如下:

  • movdqa 把值复制到寄存器中,这个指令可以一下复制4个4字节的整型,字节/字/双字/四字有各自版本相同功能;
  • paddd 这个指令求寄存器和内存之和,这里应该不是pad-dd而是p-add-d,最后的那个d表示相加的是4字节的整型,字节/字/双字/四字有各自版本相同功能;
  • pextrd 这个指令把xmm寄存器中的指定双字提取出来,放到寄存器里,字节/字/双字/四字有各自版本相同功能;
  • pinsrd 这个指令和pextrd功能相反,字节/字/双字/四字有各自版本相同功能;

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

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

相关文章

【鹅厂摸鱼日记(二)】(生活篇)初到深圳的人情冷暖

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:重生之我在鹅厂摸鱼⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多知识   🔝🔝 摸鱼日记 1. 前言2. 鹅厂的人文关怀…

论文笔记:NEFTune: Noisy Embeddings Improve Instruction Finetuning

iclr 2024 reviewer 评分 5666 1 论文思路 论文的原理很简单:在finetune过程的词向量中引入一些均匀分布的噪声即可明显地提升模型的表现 2 方法评估

JavaScript数组操作方法全录

改变原数组的方法: push() - 将一个或多个元素添加到数组的末尾,并返回新数组的长度。 pop() - 从数组中移除最后一个元素,并返回该元素。 shift() - 从数组中移除第一个元素,并返回该元素。 unshift() - 将一个或多个元素添加到…

2024年第二届交通运输与建筑工程国际会议(IACTCE2024)

2024年第二届交通运输与建筑工程国际会议(IACTCE2024) 会议简介 本次会议旨在为从事交通建设工程等相关领域的专家学者、工程技术人员和研发人员提供一个平台,分享科研成果和前沿技术,了解学术发展趋势,拓宽研究思路…

docker 安装canal

一、新建文件夹 新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml canal.propertie 修改如下: 修改instance.properties内容如下 1.1 canal.properties ################################################# ######### …

算法刷题应用知识补充---数论

这里写目录标题 快速幂求a^k%p题结 快速幂求逆元题结 扩展欧几里得求逆元题结 排列组合题结二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 快速幂求a^k%p 题 结 主要用到a的k次方,可以用多个a的…

fastadmin + laragon + nginx的后台访问路径配置

使用过fastadmin的小朋友都知道, fastadmin 默认的是不能访问admin模块的, 它在public 文件夹中又新建了一个 XXX.php 来指向 admin 模块的,作用像 index.php 的文件 以前我每次使用的时候,直接就到 config配置文件中把 admin 模块…

磁盘管理与逻辑卷

磁盘管理 会在linux中使用硬盘 分区 格式化(重新安装文件系统) 挂载 磁盘的硬件架构 扇区:一个扇区512字节,是磁盘的最小单位 磁道:同一盘片不同半径的同心圆 柱面:不同盘片相同半径构成的圆&#xf…

String类(1)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…

CC工具箱使用指南:【融合同类碎图斑】

一、简介 在一些经过不合理处理的数据中,经常会存在碎图斑,正常情况下用【融合】或【消除】工具即可解决。 但是【融合】工具会融掉无关的字段,【消除】工具则会将碎图斑融给不同用地类型的图斑。 如下图所示,因为B1面积更大&a…

Go-学会方法的基本使用

本节重点: 学会方法的基本使用 方法主要源于 OOP 语言,在传统面向对象语言中 (例如 C), 我们会用一个“类”来封装属于自己的数据和函数,这些类的函数就叫做方法。 虽然 Go 不是经典意义上的面向对象语言,但是我们可以在一些接收…

蓝桥杯嵌入式(G431)备赛笔记——PWM+LCD+按键

目录 题目要求(真题): cubeMX配置: 小试牛刀: Keil代码: 效果演示: 题目要求(真题): 使用第十一届第二场真题,练习PWM波部分的代码&#xff0c…

德国FSL18罗德与施瓦茨频谱分析仪

181/2461/8938产品概述: 频率范围:9 kHz至18 GHz(超范围至20 GHz)频率分辨率:1赫兹28 MHz的信号分析带宽低测量不确定性,即使在微波范围内通用测量应用,例如光谱图轻巧紧凑,便于现场安装、维护和服务 9 kH…

【图论】链式前向星+BFS实现拓扑排序(topSort)

拓扑排序 👏引入 重要概念: 入度:表示一个结点的所有前结点的个数 问题:给定 n 个结点和 m 个边,然后输入所有的边,输出拓扑排序序列 topsort在网上有很多的介绍,这里就省略,主要讲解拓扑排序的思路。 🤔思…

Anthropic Claude 3 加入亚马逊云科技 AI“全家桶”

编辑 | 宋慧 出品 | CSDN AIGC 每天都有新动态发生。最新的消息是亚马逊在 3 月底完成了对 Anthropic 的 40 亿美元投资(也是亚马逊 30 年来最大一笔外部投资),以及 GPT-4 最强对手的 Anthropic Claude 3 已经在亚马逊云科技 Amazon Bedrock…

什么是企业邮箱?企业邮箱和个人邮箱的区别是什么?

拥有一个企业邮箱究竟能给公司带什么益处?这是许多中小企业管理者好奇的,很多人觉得邮箱只要用来收发邮件就够了。但实际上,什么是企业邮箱?企业邮箱和个人邮箱在功能范围有着很大的区别。好的企业邮箱不仅能提高公司内部的沟通效…

【电控笔记5】电流环pi参数整定

旋转坐标系下的电压方程,由id和iq计算出ud和uq 把常数项(上面两个红框)拿出来解耦合,作为前馈,如下 电流环传递函数 电流带宽 响应时间 另一种方法:内膜控制器

RISC-V特权架构 - 中断注入

中断注入 1 中断注入的作用2 mip寄存器3 中断注入后的处理过程 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 中断注入的作用 中断注入,就是在M模式下,手动向S模式去产生一个中断。 比如:向mip寄存器的bit5…

Web前端开发——Vue概述

前言: 整理下学习笔记,打好基础,daydayup!!! Vue Vue是一套前端框架,基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的专注点放在数据上,可以免除原生JavaScript中的DOM操作&am…

600MA线性锂电池充电芯片 - YB4054DJ

描述: YB4054一款完整的单节锂离子电池充电器。其SOT23-5的封装与较少的外部元件数使得YB4054成为便携式应用的理想选择。采用了内部PMOSFET架构,加上防倒充电路,不需要外部检测电阻器和隔离二极管。热反馈可对充电电流进行自动调节,以便在大…