2 votes

L'équivalent de la directive MASM .data dans l'assemblage en ligne.

Je suis curieux de savoir quel est l'équivalent de (par exemple)

        .data
x       dword 42
        .code
main    proc
        ; Do stuff here.
        ret
main    endp
        end

serait, si j'écrivais de l'assemblage en ligne (en D). Je comprends que je pourrais faire quelque chose comme

int main()
{
    int x = 42;
    asm
    {
        // Do stuff here.
    }

    return 0;
}

mais le but de l'exercice n'est pas de "tricher" en utilisant D lui-même.

4voto

Walter Bright Points 151

L'assembleur en ligne de D n'a pas la possibilité de définir dans quelle section le code ou les données seront émis. Il sera toujours placé dans la même section que le code de la fonction dans laquelle il est intégré.

Mais vous pouvez insérer des données dans le segment de données de D en utilisant des déclarations D ordinaires :

__gshared int x = 42;

Notez que si vous n'utilisez pas __gshared, x se retrouvera dans les blocs de stockage locaux du thread, et nécessitera un code spécialement généré pour y accéder. De même, si le code est compilé avec -fPIC, un code spécialement généré sera nécessaire pour accéder à toutes les données du segment de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X