我想知道这段代码和这段汇编语言代码之间的区别:
a db 2 dup (1fh)
b dw 1fh,1fh
我认为第二个代码更好,而且我不知道为什么他们首先要编号。
答案 0 :(得分:1)
第二行等效于db 1fh, 0, 1fh, 0
,因为DW的每个arg是一个字长的整数。 (而x86是little-endian)
第一行等效于db 1fh, 1fh
。
要使用DW进行此操作,请使用dw 1f1fh
。对于非常短的常量,这可能更清楚。对于2个字节以上的2个重复,使用dup
语法可能会让其他人更清楚地看到同一遍是同一回事,而不必仔细检查是否存在差异。
如果您使用的是将大小与符号隐式关联的汇编程序,则无论您使用dw
还是db
都很重要,因此如果要将符号声明为{{1 }}“变量”,则需要byte
或a db 1fh,1fh
。
将a db 2 dup (1fh)
视为运算符,其中左侧是计数,右侧是重复的事物。就像Python的dup
等效于'abc' * 3
或Perl的"abcabcabc"
一样,只是操作数的顺序相反。
IDK为什么MASM是用这种方式设计的。
NASM语法为'abc' x 4
。 times 2 db 0x1f
重复一条完整的伪指令,或一条times
之类的完整指令。