какая разница между dw и db с dup в сборке - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу знать, в чем разница между этим кодом и этим кодом на ассемблере:

a db 2 dup (1fh)
b dw 1fh,1fh

, и я думаю, что второй код лучше, и я не знаю, почему они делают номер первым.

1 Ответ

0 голосов
/ 19 сентября 2018

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.

...