繁体   English   中英

如何使xmm寄存器中的特定字节为空?

[英]how to null a particular byte in an xmm register?

我想知道是否有一种简单有效的方法来执行以下操作

给定:

sample       db   'hello worldxxxxx'
sample_len   db   11

我想要:

movdqa xmm0, [sample]
; here I want to put a zero in the 11th byte of xmm0 (11 coming from [sample_len].
; I don't want to modify the original data.

高于[sample_len]的字节可以归零或不归零,无关紧要。 我知道我可以用6个sse指令和/或使用pcmpestrm等来完成它,但我希望有一个更简单更有效的方法。 这似乎是一个如此简单的普通要求,如果没有更简单的解决方案,我会感到惊讶。

如果在编译时已知大小,您可以使用几个移位指令,如下所示:

PSLLDQ xmm0, (16 - 11) * 8
PSRLDQ xmm0, (16 - 11) * 8

您也可以使用PAND指令。 但是,这需要另一个128位数:

; if in a loop, you would pre-load the mask in a register
MOVDQA xmm1, [mask]
PAND xmm0, xmm1

; if one time event, directly access memory
PAND xmm0, [mask]

如果需要动态定义,可以在堆栈上构建掩码。 只要确保它正确对齐......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM