2-я строка эквивалентна db 1fh, 0, 1fh, 0
, потому что каждый аргумент 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
как о операторе, в котором левая сторона - это число, а правая сторона - вещь, которую повторяют.Например, 'abc' * 3
Python эквивалентен "abcabcabc"
или 'abc' x 4
в Perl, за исключением того, что порядок операндов обратен.
IDK, почему MASM разработан таким образом.
Синтаксис NASM имеет видtimes 2 db 0x1f
.times
повторяет всю псевдоинструкцию или целую инструкцию, например times 3 imul eax, ecx
.