web-dev-qa-db-fra.com

Que signifie le signe dollar ($) dans un assemblage x86 lors du calcul de longueurs de chaîne comme "$ - label"?

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?

31

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.

23
Alexey Frunze

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.

13
Will Hartung

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

0
Sahil Singh