Ответ 1
Это означает адрес "здесь". Здесь "здесь" находится байт после окончания строки msg
. Это будет описано в любой документации ассемблера. Прочтите документацию.
Например, если бы мы писали простую программу hello world type, раздел.data может содержать что-то вроде:
section .data
msg db 'Enter something: '
len equ $ - msg
Что представляет собой $ в этом примере, и почему $ - msg
равно длине строки?
Это означает адрес "здесь". Здесь "здесь" находится байт после окончания строки msg
. Это будет описано в любой документации ассемблера. Прочтите документацию.
В этом случае значение $ означает текущий адрес в соответствии с ассемблером. $ - msg - текущий адрес ассемблера минус адрес msg, который будет длиной строки.
Документация NASM
http://www.nasm.us/doc/nasmdoc3.html#section-3.5
NASM поддерживает два специальных токена в выражениях, позволяя вычислениям включать текущую позицию сборки: токены $ и $$. $ оценивает позицию сборки в начале строки, содержащей выражение; поэтому вы можете закодировать бесконечный цикл, используя JMP $.
http://www.nasm.us/doc/nasmdoc3.html#section-3.2.4
EQU определяет символ для заданного постоянного значения: при использовании EQU строка источника должна содержать метку. Действие EQU состоит в том, чтобы определить данное имя метки для значения его (только) операнда. Это определение является абсолютным и не может измениться позже. Так, например,
message db 'hello, world' msglen equ $-message
определяет msglen как константу 12
$ используется для обозначения текущего адреса, а $$ используется для обозначения адреса начала текущего раздела в сборке.
пример:
section .text
Mov A,0x0000
Mov B,0x0000
Mov C,0x0000
для третьей строки $ ссылается на адрес самой строки, а $$ - на адрес первой строки (где начинается наш раздел). Эта конвенция работает для меня в nasm.
Источник: nasm.us