Существуют различные ассемблеры с открытым исходным кодом, такие как gas, nasm и yasm. У них разные синтаксисы pseudo-ops
и macro
. Для многих проектов с открытым исходным кодом ассемблер предварительно обрабатывается для замены констант и условий платформы.
Какие ограничения будут gcc
при создании ассемблера, если вы можете использовать все текущие attributes
и #pragmas
, за исключением производительности перевода (компиляция / сборка в двоичное время)?
Я не говорю о inline-assembly.
#define MOV(RA,RB) (OXFEB10000UL | RA << 16 | RB)
#define ADD(RA,RB) (OXFEB20000UL | RA << 16 | RB)
#define RET (OXFEB7ABCDUL)
unsigned long add4[] __attribute(section(".text")) =
{
ADD(R0,R1),
ADD(R2,R3),
MOV(R1,R2),
ADD(R0,R1),
RET()
};
Я считаю, что использование арифметики указателей может позволить моделировать .
и другие labels
. Возможно, это проблема XY; Я пытаюсь понять, зачем вообще столько ассемблеров. Кажется, что все может быть сделано с помощью препроцессора, а ассемблер - действительно предпочтение программистов; или есть техническое ограничение, которое мне не хватает.
Я предполагаю, что это может быть связано с тем, что вы можете сделать с ассемблером, чего нельзя сделать с помощью кода оболочки '.
Изменить: я изменил теги с C на compiler. Меня интересуют технические детали ассемблера. Это просто перевод 1-1
и выдача перемещений (как сделает компилятор) или есть что-то еще? Я не имею в виду, чтобы люди писали код на ассемблере, как я обрисовал выше. Пытаюсь понять, что делают монтажники. Я не верю, что существует книга драконов для сборщиков. Конечно, препроцессор не может создать binary
сам по себе и нуждается в дополнительном оборудовании; он только переводит текст.
byte
выравнивания. Должен ли ассемблер x86 хранить в памяти большие базовые блоки для создания кодов операций? - person artless noise   schedule 18.03.2013MOV AX,1
отличается отMOV other_reg,1
. - person Bo Persson   schedule 18.03.2013