Que signifie le signe dollar ($) dans l'assemblage x86 lors du calcul des longueurs de chaîne comme "$ - label"? [dupliquer]

Cette question a déjà une réponse ici:

Par exemple, si nous écrivions un programme de type hello world simple, le .la section de données peut contenir quelque chose comme:

section .data

msg     db      'Enter something: '
len     equ     $ - msg

Que représente le $ dans cet exemple, et pourquoi $ - msg égale-t-il la longueur de la chaîne?

27

4 réponses

Cela signifie l'adresse de "ici". Ici "ici" est l'octet après la fin de la chaîne msg. Toute documentation de l'assembleur le décrira. Lisez la documentation.

22
répondu Alexey Frunze 2012-04-28 06:36:22

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.

11
répondu Will Hartung 2012-04-28 06:35:48

Documentation MSNA

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 d'assemblage actuelle: les jetons $ et$$. $ évalue à la position d'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 de EQU est de définir le nom d'étiquette donné à la valeur de son opérande (seulement). Cette définition est absolue et ne peut pas changer plus tard. Ainsi, par exemple,

message         db      'hello, world' 
msglen          equ     $-message

Définit msglen comme étant la constante 12

4

$ est utilisé pour se référer à l'adresse actuelle et de $$ est utilisé pour désigner l'adresse de début de section en cours de montage.

Exemple:

section .text
  Mov A,0x0000
  Mov B,0x0000
  Mov C,0x0000

Pour la 3e ligne $ désigne l'adresse de la ligne elle-même, tandis que $$ désigne l'adresse de la 1ère ligne (où notre section). Cette convention fonctionne pour moi en msna.

Source:msna.nous

0
répondu Sahil Singh 2017-10-14 04:06:14