dw 和 db 在汇编中有 dup 有什么区别

what is the difference beetwen dw and db with dup in assembly

我想知道这段代码和这段汇编语言代码有什么区别:

a db 2 dup (1fh)
b dw 1fh,1fh

而且我认为第二个代码更好,我不知道为什么他们先做数字。

第二行相当于db 1fh, 0, 1fh, 0,因为DW的每个arg都是一个字长的整数。 (而且 x86 是小端)

第一行相当于db 1fh, 1fh.

要使用 DW 做到这一点,请使用 dw 1f1fh。对于一个非常短的常量,这可能更清楚。对于任何超过 2 次重复的 2 字节,使用 dup 语法可能更容易让其他人更清楚地看到它是同一件事多次,而无需仔细查看以检查差异。


如果您使用的汇编程序隐式地将大小与符号相关联,那么使用 dw 还是 db 很重要,因此如果您希望将符号声明为 byte "variable", 你需要 a db 1fh,1fha db 2 dup (1fh).


dup 视为一个运算符,其中左侧是计数,右侧是被重复的内容。就像 Python 的 'abc' * 3 等同于 "abcabcabc",或 Perl 的 'abc' x 4,除了操作数的顺序相反。

不知道为什么 MASM 是这样设计的。

NASM 语法为 times 2 db 0x1ftimes 重复整个伪指令,或像 times 3 imul eax, ecx.

这样的整个指令