[英]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.