argc
и argv
передаются в стек. Вы можете получить к ним доступ следующим образом:
ldr r0, [sp] /* Get argc... */
add r1, sp, #4 /* ... and argv ... */
argv
- это массив указателей, и значения будут переданы в ASCII или текстовом формате, поэтому вам нужно будет преобразовать значения в двоичный файл. Если у вас есть arg c из четырех (во-первых, это имя программы), вы можете использовать ниже, чтобы получить указатель на числовые строки
add r2, r1,#4
add r3, r1,#8
add r4, r1,#12
Я бы просто закодировал это в 'C', как это много хлопот, чтобы сделать это в ассемблере без реальной выгоды; кроме как воспитывать себя. Но вы можете видеть, полезный пример с встроенным ассемблером , где «образование» действительно полезно. С помощью встроенного ассемблера вы используете гибкость ассемблера и оставляете все измельчения выделения регистров компилятору 'C'. Компилятор 2020 намного лучше, чем компиляторы 1970–1980-х годов, и часто бывает, что ручной ассемблер сделает много mov Rn, Rm
... Это пустая трата циклов и места для кода, так как алгоритмы распределения SSA и регистров часто устранить их в скомпилированном коде. Кроме того, скомпилированный код, скорее всего, будет правильным, чем ручной ассемблер.