在IA-32英特尔指令集参考STOS/STOSB/STOSW/STOSD中,指令stos m32
和stosd
之间有什么区别,它们的描述不一样吗?
m32
的功能是什么?当我们使用该指令时,我们应该设置eax
和es
,edi
,m32
操作数是否有效?
答案 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]