我想知道这段代码和汇编语言中的代码有什么区别:
a db 2 dup (1fh)
b dw 1fh,1fh
而且我认为第二个代码更好,我不知道为什么他们会先编号。
第二行相当于db 1fh, 0, 1fh, 0
,因为每个arg到DW都是一个字大小的整数。 (而x86是小端)
第1行相当于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
,除了操作数的顺序颠倒。
IDK为什么MASM是这样设计的。
NASM语法是times 2 db 0x1f
。 times
重复一整个伪指令,或整个指令,如times 3 imul eax, ecx
。