Главная цель GNU ассемблера-компоновка результатов работы других программ-компиляторов. Если Вы должны вручную кодировать отдельные части кода на ассемблере, это значит, что GNU ассемблер "недружественный" обработчик: он не имеет директив для макросов, условных директив и многих других удобств, на которые Вы могли рассчитывать.
В некоторых случаях Вы можете просто использовать препроцессор C или обобщенный препроцессор типа M4,; но это может быть неудобно, поскольку ни один из них не предназначен именно для ассемблера.
GASP заполняет эту нишу. Он написан специально для предоставления удобств, необходимых вам для ручной работы с ассемблерным кодом. Используйте его как препроцессор, вернее, как часть ассемблера, предоставляющую максимальную гибкость: Вы можете использовать его для ручного программирования на ассемблере без дополнительных сложностей ассемблера, который Вы используете для обработки результата работы компилятора.
Вот маленький пример, позволяющий ощутить преимущества GASP'а. Этот входной файл для GASP'а:
.MACRO saveregs from=8 to=14
count .ASSIGNA \from
! save r\from..r\to
.AWHILE \&count LE \to
mov r\&count,@-sp
count .ASSIGNA \&count + 1
.AENDW
.ENDM
saveregs from=12
bar: mov #H'dead+10,r0
foo .SDATAC "hello"<10>
.END
генерирует такой ассемблерный текст:
! save r12..r14
mov r12,@-sp
mov r13,@-sp
mov r14,@-sp
bar: mov #57005+10,r0
foo: .byte 6,104,101,108,108,111,10