汇编:`stos m32`和`stosd` mnemonic之间有什么区别?

时间:2016-04-29 02:26:39

标签: assembly

在IA-32英特尔指令集参考STOS/STOSB/STOSW/STOSD中,指令stos m32stosd之间有什么区别,它们的描述不一样吗?
m32的功能是什么?当我们使用该指令时,我们应该设置eaxesedim32操作数是否有效?

1 个答案:

答案 0 :(得分:2)

STOS m32 表单和STOSD表单是表达相同指令的两种不同方式。您可能已经注意到,在较新的SIMD(SSE,AVX等)指令之外,大多数指令助记符都没有后缀,表示它们执行的操作的大小。例如,没有INCD或MOVW指令。相反,操作数的大小决定了操作的大小。 STOS m32 形式允许此指令与此约定保持一致。

在MASM中,这允许以下代码,其中STOS指令的大小取决于符号的类型(大小):

array DW 30 DUP (?)

    mov ecx, LENGTH array
    mov edi, OFFSET array
    mov eax, 1
    rep stos array

将DW更改为DD,代码将填充一个带有1的DWORD数组,而不是WORD数组。请注意,仅使用内存操作数的大小。该指令仍然写入EDI给出的地址。

虽然它不适用于STOS,但某些其他字符串指令的内存操作数形式允许您覆盖默认的DS段。 (STOS指令使用无法覆盖的ES段。)例如,您可以这样做:

    rep outs dx, WORD PTR fs:[esi]