Qu'est-ce que le dup (?)` dire dans TASM?
J'ai ce code ici, mais je suis familier avec la syntaxe.
STACK16_SIZE = 100h
stack16 db STACK16_SIZE dup (?)
Je pense que dup
signifie que nous déclarer une variable de type tableau, comme c'est une pile, mais je ne suis pas sûr. Donc, ce n'est dup
dire dans TASM, exactement?
OriginalL'auteur sashoalm | 2013-04-11
Vous devez vous connecter pour publier un commentaire.
STACK16_SIZE dup (?)
moyen pour dupliquer les données entre parenthèses parSTACK16_SIZE
fois. Il est équivalent à l'écriture?, ?, ?, ?,
... (100h fois)Les données dans les parenthèses est "non initialisé". Qui est, la mémoire est allouée, mais n'est pas définie à une valeur particulière de la charge.
Assemblée ne fournit pas un tableau "type". Si elle le fait, c'est seulement pour les débogueurs pour une utilisation lors de l'inspection des données. Cependant, dans cet extrait de code,
stack16
est un symbole avec une adresse de début d'un bloc de mémoire d'octets qui est contre-intuitif et potentiellement source d'un bug subtil. Pour un CPU de la pile, il faut vraiment être définis comme des mots de 16 bits (dw
) ou 32 bits (dd
).void*
et peut pointer vers n'importe quel type de données. Voici donc stack16 pointe vers le premier élément d'un tableau de 100 octets. Est-ce exact?Jamais l'esprit, j'ai trouvé une bonne explication à csi.ucd.ie/staff/jcarthy/home/alp/alp5.html
ARR1 DB 5 DUP(2) ce do u pense que cette expression ? qu'est-ce que la valeur à l'intérieur de la matrice ?
Que
5 dup(2)
produit 5 éléments, chacun ayant la valeur 2. Puisque c'est un arg pourdb
, la taille de l'élément est de 1 octet.Et BTW, "non initialisé" ne veut pas dire aléatoire / valeur d'ordures. Sous les Systèmes d'exploitation comme Windows, la mémoire dans la BSS est initialisé à zéro, et MSVC émettent de l'asm comme
foo db 100 dup(?)
pour C commestatic foo[100] = {0};
, parce quedup(?)
ne garantie zéro les valeurs de tous les éléments. (Mais ces octets ne sont pas stockées dans le fichier exécutable, juste une start / longueur de l'ensemble du segment BSS. IDK si Windows appelle même un BSS; c'est Linux / Unix terminologie, mais la même idée).OriginalL'auteur
?
signifie pas de valeur particulière, non initialisée.DUP
signifie en double.De sorte que vous obtenez 100h octets qui ne sont pas initialisées.
OriginalL'auteur