quelle est la syntaxe pour définir une chaîne de caractères constante dans l'assemblée?
Je suis à l'apprentissage de l'assemblée, je vois deux exemples de définition d'une chaîne:
msg db " Bonjour, monde!",0xa
- ce qui ne l'0xa dire par là?
message DB " je suis amoureux d'elle!', 0
- pourquoi nous avons un 0 ici?
- est-il un caractère null de fin?
- pourquoi nous avons 0xa l'exemple ci-dessus, mais 0 ici? (ne me semble pas qu'ils sont liés à la longueur de la chaîne)
Si les exemples ci-dessus sont deux façons de définir un assemblage de chaîne, comment le programme de les différencier?
Merci d'avance pour toute aide 🙂
Cela dépend de ce que l'assembleur que vous utilisez. Qu'ils ont tous des exigences en matière de syntaxe.
OriginalL'auteur DuoD | 2013-10-22
Vous devez vous connecter pour publier un commentaire.
Les différents assembleurs ont une syntaxe différente, mais dans le cas de
db
directive ils sont assez cohérentes.db
est une assemblée de la directive, qui définit octets avec la valeur donnée dans l'endroit où la directive est situé dans la source. Éventuellement, certaines étiquettes peuvent être attribués à la directive.La commune de la syntaxe est:
où n1..nk sont quelques octets de taille des chiffres (de 0..0xff) ou une chaîne de caractères constante.
Tant que la chaîne de caractères ASCII consiste en octets, de la directive se contente de placer ces octets dans la mémoire, exactement comme les autres nombres dans la directive.
Exemple:
va allouer de 4 octets, et remplissez-les avec les numéros 1, 2, 3 et 4
sera compilé:
Le caractère dont le code ASCII 0Ah (0xa) est le caractère LF (saut de ligne) qui est utilisé dans Linux comme une nouvelle ligne de commande pour la console.
Le caractère dont le code ASCII 00h (0) est le caractère NULL est utilisé comme une fin de chaîne de marque dans le C-comme les langues. (et probablement dans les OS des appels d'API, parce que la plupart des Systèmes d'exploitation sont écrites en C)
Annexe 1: Il y a plusieurs autres directives de l'assemblée similaire à la DB en ce qu'ils définissent certaines données dans la mémoire, mais avec d'autres taille. Les plus courants sont DW (définir le mot), DD (définir le mot double) et DQ (définir le quadruple mot) pour 16, 32 et 64 bits de données. Cependant, leur syntaxe n'accepte que les chiffres, pas des chaînes de caractères.
La plupart des assembleurs vous donnera une erreur avec "DD" au lieu de "DB" de la directive.
Je suis nouveau à l'asm, mais je pense que si j'entends le DD puis assembleur va allouer 16bits pour easch élément. Aussi, comment pouvez-vous conserver de la valeur de plus de 255 dans un 8 bits de stockage en utilisant DB?
DD alloue 32 bits (4 octets) par article. Le stockage de plus de 1 octet valeurs dans le tableau d'octets sont stockés octet après octet (bien sûr).
OriginalL'auteur johnfound
0 est un null de fin, oui. 0xa est un retour à la ligne. Ils ne définissent pas de la même chaîne, donc, c'est comment vous différencier.
OriginalL'auteur Ry-
0xa
représente la valeur hexadécimale"A"
qui est10
en décimal. Le Saut de ligne caractère de contrôle a ASCII code 10 (Retour a D hexadécimal ou décimal 13).Les chaînes de caractères sont souvent terminés par un
nul
caractère pour indiquer leur fin.OriginalL'auteur Axel Kemper