Здесь есть полезное сравнение между газом и NASM: http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html
Смотрите, в частности, эту часть, которая, я думаю, решает ваш вопрос:
В листинге 2 также представлена концепция счетчика местоположений (строка 6). NASM предоставляет специальную переменную (переменные $ и $$) для управления счетчиком местоположений. В GAS нет способа манипулировать счетчиком местоположений, и вы должны использовать метки для вычисления следующего места хранения (данных, инструкций и т. Д.).
Например, чтобы вычислить длину строки, вы должны использовать следующую идиому в NASM:
prompt_str db 'Enter your name: '
STR_SIZE equ $ - prompt_str ; $ is the location counter
$ дает текущее значение счетчика местоположений, а вычитание значения метки (все имена переменных являются метками) из этого счетчика местоположений дает число байтов, присутствующих между объявлением метки и текущим местоположением. Директива equ используется для установки значения переменной STR_SIZE для выражения, следующего за ней. Подобная идиома в ГАЗЕ выглядит следующим образом:
prompt_str:
.ascii "Enter Your Name: "
pstr_end:
.set STR_SIZE, pstr_end - prompt_str
Конечная метка (pstr_end) дает следующий адрес местоположения, а вычитание начального адреса метки дает размер. Также обратите внимание на использование .set для инициализации значения переменной STR_SIZE для выражения, следующего за запятой. Соответствующий .equ также может быть использован. Альтернативы директиве set GAS в NASM нет.