инструкция resd в синтаксисе AT & T - PullRequest
0 голосов
/ 25 марта 2020

У меня возникли проблемы с поиском эквивалентной операции для команды "resb", как описано в руководстве nasm .

У меня также были проблемы с поиском эквивелентных значений для "db", "dw", et c. Они выглядят как «.byte», «.short» и «.long», соответствующие «db», «dw» и «dd» соответственно, но я не уверен, так как я собрал это только из случайных фрагментов кода , Я не могу найти эквивалент «dq».

Кто-нибудь знает правильные эквиваленты для этих псевдо-операций и, возможно, некоторую ссылку, в которой исчерпывающе перечислены все эквиваленты синтаксиса AT & T?

1 Ответ

2 голосов
/ 25 марта 2020

Прочтите руководство по ГАЗУ (https://sourceware.org/binutils/docs/as/) для получения исчерпывающего списка директив, которые он поддерживает. Обратите внимание, что директивы в основном одинаковы для всех целей, которые поддерживает GAS, а не для синтаксиса AT & T от c до x86. У них немного другая философия дизайна от NASM / YASM, но, по крайней мере, вам не нужно заново изучать их для ARM, AArch64, RIS C -V или чего-либо еще.

В общем, если вы нужно выяснить, как сделать что-то в синтаксисе GAS, проверить руководство и / или скомпилировать некоторые C, которые должны сделать то же самое, например, при https://godbolt.org/z/QUqvL2 компиляции int foo; в файле

Синтаксис GAS не имеет эквивалента для resw/d/q, только .space / .skip / .zero для resb. Избыточность наличия трех синонимов для одной и той же вещи исходит от GAS с целью обеспечения совместимости с ассемблерами, предоставляемыми различными историческими поставщиками Unix.

Кроме того, вы можете зарезервировать пространство в BSS без переключение на этот раздел с помощью .section .bss (или просто .bss) и затем обратно, используя .lcomm (неэкспортированный символ) или .comm (глобальный символ)

Вы должны вручную умножить количество элементов на 2/4/8, чтобы получить количество байтов, например

* 1 036 *

Это, я думаю, логически эквивалентно .pushsection .bss; label: .space ...; .popsection

IIR C, вам может понадобиться .section .bss, если вы хотите использовать .p2align для придания объекту BSS дополнительного выравнивания. Или используйте 3-й аргумент для .lcommm

Некоторые цели позволяют использовать третий аргумент с .lcomm. Этот аргумент указывает желаемое выравнивание символа в секции bss.

...