Par exemple, si nous écrivions un simple programme de type hello world, la section .data pourrait contenir quelque chose comme:
section .data
msg db 'Enter something: '
len equ $ - msg
Que représente le $ dans cet exemple et pourquoi $ - msg
égal à la longueur de la chaîne?
Cela signifie l'adresse de "ici". Ici "ici" est l'octet après la fin de la chaîne msg
. Toute documentation d'assembleur le décrira. Lisez la documentation.
Dans ce cas, le $ signifie l'adresse actuelle selon l'assembleur. $ - msg est l'adresse actuelle de l'assembleur moins l'adresse de msg, qui serait la longueur de la chaîne.
Documentation NASM
http://www.nasm.us/doc/nasmdoc3.html#section-3.5
NASM prend en charge deux jetons spéciaux dans les expressions, permettant aux calculs d'impliquer la position actuelle de l'assembly: les jetons $ et $$. $ évalue la position de l'assemblage au début de la ligne contenant l'expression; vous pouvez donc coder une boucle infinie en utilisant JMP $.
http://www.nasm.us/doc/nasmdoc3.html#section-3.2.4
EQU définit un symbole à une valeur constante donnée: lorsque EQU est utilisé, la ligne source doit contenir une étiquette. L'action d'EQU consiste à définir le nom d'étiquette donné à la valeur de son (seul) opérande. Cette définition est absolue et ne peut pas changer ultérieurement. Ainsi, par exemple,
message db 'hello, world' msglen equ $-message
définit msglen comme étant la constante 12
$ est utilisé pour faire référence à l'adresse actuelle et $$ est utilisé pour faire référence à l'adresse du début de la section actuelle dans Assembly.
exemple:
section .text
Mov A,0x0000
Mov B,0x0000
Mov C,0x0000
pour la 3ème ligne $ fait référence à l'adresse de la ligne elle-même tandis que $$ fait référence à l'adresse de la 1ère ligne (où notre section a commencé). Cette convention fonctionne pour moi dans Nasm.
source: nasm.us