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,1fh
或 a db 2 dup (1fh)
.
将 dup
视为一个运算符,其中左侧是计数,右侧是被重复的内容。就像 Python 的 'abc' * 3
等同于 "abcabcabc"
,或 Perl 的 'abc' x 4
,除了操作数的顺序相反。
不知道为什么 MASM 是这样设计的。
NASM 语法为 times 2 db 0x1f
。 times
重复整个伪指令,或像 times 3 imul eax, ecx
.
这样的整个指令
我想知道这段代码和这段汇编语言代码有什么区别:
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,1fh
或 a db 2 dup (1fh)
.
将 dup
视为一个运算符,其中左侧是计数,右侧是被重复的内容。就像 Python 的 'abc' * 3
等同于 "abcabcabc"
,或 Perl 的 'abc' x 4
,除了操作数的顺序相反。
不知道为什么 MASM 是这样设计的。
NASM 语法为 times 2 db 0x1f
。 times
重复整个伪指令,或像 times 3 imul eax, ecx
.