汇编——SSE对齐(一. 未对齐情况)

2024-04-02 10:36
文章标签 情况 汇编 对齐 sse

本文主要是介绍汇编——SSE对齐(一. 未对齐情况),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SIMD是(Single Instrument Multi Data),MMX实现了SIMD;SSE是(Streaming SIMD Extension),它取代了MMX;后来AVX(Advanced Vector Extension,高级向量扩展)对SSE进行了扩展。如下代码展示了SSE处理未对齐内存的情况:

; sse_unaligned.asm
extern printf
section .dataspvector1   dd  1.1dd  2.2dd  3.3dd  4.4spvector2   dd  1.1dd  2.2dd  2.2dd  3.3dpvector1   dq  1.1dq  2.2dpvector2   dq  3.3dq  4.4fmt1        db  "Single Precision Vector 1: %f, %f, %f, %f", 10, 0fmt2        db  "Single Precision Vector 2: %f, %f, %f, %f", 10, 0fmt3        db  "Sum of Single Precision Vector 1 and Vector 2: %f, %f, %f %f", 10, 0fmt4        db  "Doule Precision Vector 1: %f, %f", 10, 0fmt5        db  "Doule Precision Vector 2: %f, %f", 10, 0fmt6        db  "Sum of Double Precision Vector 1 and Vector 2: %f, %f", 10, 0section .bssspvector_res resd 4dpvector_res resq 4
section .textglobal main
main:
push rbp
mov rbp, rspmov     rsi, spvector1mov     rdi, fmt1call    printspfpmov     rsi, spvector2mov     rdi, fmt2call    printspfpmovups  xmm0, [spvector1]movups  xmm1, [spvector2]addps   xmm0, xmm1movups  [spvector_res], xmm0mov     rsi, spvector_resmov     rdi, fmt3call    printspfpmov     rsi, dpvector1mov     rdi, fmt4call    printdpfpmov     rsi, dpvector2mov     rdi, fmt5call    printdpfpmovupd  xmm0, [dpvector1]movupd  xmm1, [dpvector2]addpd   xmm0, xmm1movupd  [dpvector_res], xmm0mov     rsi, dpvector_resmov     rdi, fmt6call    printdpfp
leave
retprintspfp:
push rbp
mov rbp, rspmovss       xmm0, [rsi]cvtss2sd    xmm0, xmm0movss       xmm1, [rsi+4]cvtss2sd    xmm1, xmm1movss       xmm2, [rsi+8]cvtss2sd    xmm2, xmm2movss       xmm3, [rsi+12]cvtss2sd    xmm3, xmm3mov         rax, 4call        printf
leave
retprintdpfp:
push rbp
mov rbp, rspmovsd   xmm0, [rsi]movsd   xmm1, [rsi+8]mov     rax, 2call    printf
leave
ret

需要注意的几个指令如下:
movups: 移动未对齐的打包单精度;(u:未对齐unalignedp:打包的packeds:单精度single;)
addps: 打包单精度相加;
movss: 移动标量单精度;(s:标量scalars:单精度single
cvtss2sd: 将标量单精度转换为标量双精度;(d:双精度double

这篇关于汇编——SSE对齐(一. 未对齐情况)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869747

相关文章

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4