Question

Je suis à la lecture de l'ouvrage intitulé "Introduction au langage assembleur 80x86 et l'architecture de l'ordinateur" par Richard C.Detmer et à la page 59, il parle de la OCTET la directive de l'assemblée de la langue et de l'aide que pour les caractères et les chaînes de caractères.Voici le texte:

"En plus de numérique opérandes, l' OCTET la directive permet à caractère opérandes avec un seul caractère ou une chaîne opérandes avec de nombreux personnages.Soit des apostrophes (') ou des guillemets (") peut être utilisé pour désigner des caractères ou délimiter les chaînes de caractères.Ils doivent être en paires;vous ne pouvez pas mettre une apostrophe sur la gauche et un guillemet sur la droite.Une chaîne délimitée par des apostrophes peuvent contenir des guillemets, et un délimitées par des guillemets peuvent contenir des apostrophes, ce qui rend possible pour avoir les chaînes contenant ces caractères spéciaux."

C'est très compréhensible, mais ma curiosité lignes est le OCTET la directive parce que j'ai pensé qu'il ne pouvait contenir qu'un seul octet, huit bits.J'ai fait un test et si je l'ai dit

string BYTE "HelloWorld"

il serait compiler, bien sûr, mais si vous avez coché l'hexagone, vous remarquerez qu'il n'est pas seulement un octet unique, mais plusieurs octets.En regardant une table ascii, nous savons déjà qu'un seul personnage est un octet.Alors, comment pouvons-nous avoir des cordes?J'ai essayé d'appliquer ce avec des nombres.Nous savons que la plage de la OCTET la directive est de -128 à 255.J'ai essayé ce code:

number BYTE 9987

quand j'ai essayé de le compiler et de l'exécuter, j'ai eu une erreur parce que, naturellement, 9987, plus grande qu'un octet.Mais pourquoi sont des chaînes de caractères à l'abri de cette?Pourquoi le OCTET la directive détenir plus d'un octet dans le contexte des chaînes de caractères, mais ne pas faire la même chose avec des nombres?

J'imagine que quand j'ai compilé et exécuté la première instruction de code que j'ai énumérés pour avoir la même erreur que la seconde.Pourquoi est-ce que la "règle" est en panne?

-Dan

Était-ce utile?

La solution

Notez qu'il n'est pas simple assembleur de la syntaxe, de programmes différents peuvent utiliser une syntaxe différente.Vous devriez consulter votre assembleur manuel.

Cela dit, la constante de chaîne est généralement juste une notation abrégée pour chacun des personnages séparément, et l' BYTE la directive permet à plusieurs éléments à la fois.

Ainsi, par exemple, BYTE 1, 2, 3, 4 est valide et définit 4 octets, et votre string BYTE "HelloWorld" est équivalent à string BYTE 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' et définit 10 octets.La raison pour laquelle vous n'obtenez pas une erreur parce que chaque personnage à son propre s'inscrit dans un octet.

Certains assembleurs de ne même pas permettre à des littéraux de chaîne en BYTE ou l'équivalent directives, ils ont des directives pour les chaînes de caractères par exemple .string ou .ascii.

Autres conseils

L' BYTE la directive indique à l'assembleur pour réserver un bloc de stockage et de se souvenir de sa longueur, en octets.La durée est déterminée par le nombre d'octets dans l'initialiseur, ce qui pourrait être des nombres entre 0 et 255 en décimal ou en caractères entre guillemets simples.Les chaînes de caractères sont communs dans les langages de programmation, et sont généralement considérés comme des tableaux de caractères en octets consécutifs en mémoire.Pour la commodité des programmeur assembleur permet de réserver une séquence d'octets initialisé à une chaîne de caractères spécifiant la chaîne de guillemets simples ou doubles.Ce sont les équivalents des

string1 BYTE 'H', 'e', 'l', 'l', 'o'

ou

string1 BYTE 'Hello'

Certains assembleurs ont différentes directives pour cela, par exemple l'Oracle Solaris x86 en Langage d'Assemblage a un

  • .byte la directive qui ne prend octets
  • .ascii la directive qui prend une chaîne qui ne sera pas NUL résilié
  • .string la directive qui prend une chaîne de caractères qui will être NUL résilié
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top