在 IA-32 intel 指令集引用中,STOS/STOSB/STOSW/STOSD ,指令stos m32
和stosd
有什么区别,它们的描述不一样吗?
而m32
的作用是什么?我们使用指令时,要设置eax
和es
,edi
,m32
操作数有作用吗?
最佳答案
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]
关于汇编: `stos m32`和 `stosd`助记符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928544/