【发布时间】:2019-02-23 04:18:44
【问题描述】:
我想知道这段代码和汇编语言的这段代码有什么区别:
a db 2 dup (1fh)
b dw 1fh,1fh
而且我认为第二个代码更好,我不知道他们为什么先做数字。
【问题讨论】:
我想知道这段代码和汇编语言的这段代码有什么区别:
a db 2 dup (1fh)
b dw 1fh,1fh
而且我认为第二个代码更好,我不知道他们为什么先做数字。
【问题讨论】:
第 2 行等价于db 1fh, 0, 1fh, 0,因为 DW 的每个 arg 都是一个字大小的整数。 (而且 x86 是 little-endian)
第一行相当于db 1fh, 1fh。
要使用 DW 执行此操作,请使用 dw 1f1fh。对于一个非常短的常数,这可能更清楚。对于超过 2 次重复 2 字节的任何内容,使用 dup 语法可能更容易让其他人多次看到它是同一件事,而无需仔细检查是否存在差异。
如果您使用的汇编程序隐含地将大小与符号相关联,那么使用dw 或db 很重要,因此如果您希望将符号声明为byte“变量”,你需要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 这样的整个指令。
【讨论】: