汇编: `stos m32`和 `stosd`助记符有什么区别?

标签 assembly

在 IA-32 intel 指令集引用中,STOS/STOSB/STOSW/STOSD ,指令stos m32stosd有什么区别,它们的描述不一样吗?
m32的作用是什么?我们使用指令时,要设置eaxesedim32操作数有作用吗?

最佳答案

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/

相关文章:

linux - 破解linux可执行文件

c - 如何使用 Bruce 的 C 编译器进行编译以获得在 8086 处理器上运行的 asm 文件

assembly - GCC 内联汇编器,混合寄存器大小 (x86)

assembly - 我不理解 Microsoft x64 调用约定或 FASM 的实现

c - 如何在 GCC 内联汇编中使用标签?

assembly - 使用Intel SIMD SSE加载非连续值

memory - 获取 x86 AT&T 汇编中数据变量的地址

linux - 程序集 - 内联 asm - 从一个数组复制到另一个数组?

c - 反汇编c代码中的冗余操作

assembly - 使用 OUT 指令在传统 PC 扬声器上生成声音