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?
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.
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 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
$ 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