intel x86 中的 REP stosl 相当于什么

Ami*_*mar 4 x86 assembly intel-syntax

我正在尝试运行从 GAS 风格获取的指令,但是当我将此指令移植到 intel 风格时,出现如下错误:

"error: parser: instruction expected"
Run Code Online (Sandbox Code Playgroud)

我尝试了各种组合,例如 REP movsl、REP loadsl,但都给出了相同的问题,任何人都可以告诉这个正确的命令相当于 x86 中的 REP stosl

Jon*_*art 7

我相信是的

rep stosd
Run Code Online (Sandbox Code Playgroud)

用于重复存储字符串DWORD(32位)。

(在具有ERMSB 功能的CPU 上,效率很高,因此如果您有字节值而不是双字模式,则rep stosb无需imul eax, 0x01010101进行设置。)rep stosd

您可以在 Intel 指令集参考中找到这些stos_指令。它们使用1 字节、2 字节、4 字节和8 字节字符串操作的后缀。bwdq

/ /有一个单独的手动条目repreperepne,它记录了它作为实际重复前缀有效的每条指令。

(但请注意,只有 和rep stos_具有rep movs_快速字符串微码;所有条件 repe/ne cmps/scas 指令在现代 CPU 上都很慢,每 1 个甚至 2 个时钟仅进行 1 次计数。)


Dev*_*lus 5

istrep只是一个前缀,表示后面的指令必须重复 (E)CX 次。但这仅对有限的指令集有效。实际的指令是stos在你的情况下,它需要一个类型操作数。b对于字节、w字和d双字操作数大小。

在你的情况下d应该是正确的操作数大小。

  • @AmitSinghTomar:正确的替换是“stosd”,而不是“stosw”。 (2认同)