Domanda

Sto leggendo il libro di testo intitolato "Introduzione al linguaggio assembly 80x86 e all'architettura del computer" di Richard C.Detmer e a pagina 59 si parla del BYTE direttiva in linguaggio assembly e utilizzandola per caratteri e stringhe.Ecco il testo:

"Oltre agli operandi numerici, il BYTE La direttiva consente operandi di carattere con un singolo carattere o operandi di stringa con molti caratteri.Per designare caratteri o delimitare stringhe è possibile utilizzare apostrofi (') o virgolette (").Devono essere in coppia;non è possibile inserire un apostrofo a sinistra e una virgoletta a destra.Una stringa delimitata da apostrofi può contenere virgolette, mentre una stringa delimitata da virgolette può contenere apostrofi, rendendo possibile avere stringhe contenenti questi caratteri speciali."

Questo è molto comprensibile, ma la mia curiosità è la BYTE direttiva perché pensavo che potesse contenere solo un singolo byte, otto bit.Ho fatto una prova e se ho detto

string BYTE "HelloWorld"

ovviamente verrebbe compilato, ma se controlli l'esadecimale noterai che non è solo un singolo byte ma più byte.Osservando una tabella ascii sappiamo già che un singolo carattere è un byte.Allora come possiamo avere delle stringhe?Ho provato ad applicarlo con i numeri.Conosciamo la gamma per il BYTE la direttiva va da -128 a 255.Ho provato questo codice:

number BYTE 9987

quando ho provato a compilare ed eseguire, ho ricevuto un errore perché ovviamente 9987 era più grande di un byte.Ma perché le stringhe ne sono immuni?Perché il BYTE la direttiva contiene più di un byte nei contesti delle stringhe ma non fa lo stesso con i numeri?

Immagino che quando ho compilato ed eseguito la prima istruzione di codice che ho elencato abbia lo stesso errore della seconda.Perché qui la "regola" è infranta?

-Dan

È stato utile?

Soluzione

Si noti che non esiste una sintice sintassi dell assemblatore, diversi programmi possono utilizzare la sintassi diversa.Dovresti consultare il manuale del gruppo Assembler.

Detto questo, la costante stringa è solitamente solo una notazione stennato per ciascuno dei caratteri separatamente e la direttiva BYTE consente di definire più elementi di essere definiti contemporaneamente.

Quindi, ad esempio, BYTE 1, 2, 3, 4 è valido e definisce 4 byte e il string BYTE "HelloWorld" è equivalente a string BYTE 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' e definisce 10 byte.La ragione per cui non si ottiene un errore è perché ogni personaggio su proprio si inserisce in un byte.

Alcuni assemblatori non consentono nemmeno gli scheduli di stringhe in BYTE o direttive equivalenti, hanno direttive specializzate per le stringhe, ad esempio .string o .ascii.

Altri suggerimenti

IL BYTE La direttiva dice all'assemblatore di riservare un blocco di memoria e di ricordarne la lunghezza in byte.La lunghezza è determinata dal numero di byte nell'inizializzatore, che potrebbe essere costituito da numeri compresi tra 0 e 255 decimali o da caratteri racchiusi tra virgolette singole.Le stringhe sono comuni nei linguaggi di programmazione e solitamente sono considerate matrici di caratteri in byte consecutivi in ​​memoria.Per comodità del programmatore, l'assembler consente di riservare una sequenza di byte inizializzata in una stringa di caratteri specificando la stringa tra virgolette singole o doppie.Questi sono equivalenti

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

O

string1 BYTE 'Hello'

Alcuni assemblatori hanno direttive diverse a questo scopo, ad esempio Oracle Solaris x86 Assembly Language ha un file

  • .byte direttiva che richiede solo byte
  • .ascii direttiva che accetta una stringa che non avrà terminazione NUL
  • .string direttiva che accetta una stringa which will avere una terminazione NUL
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top