Ordre des [BITS 16] et [ORG] 0x0000 directives
Question
Je commence une expérimentation par écrit un noyau et avoir du plaisir à le faire. Je le chargeur de démarrage de base fait et les directives suivantes:
[BITS 16]
[ORG 0x0000]
Dans le didacticiel du noyau, cependant, il commence par:
[ORG 0x0000]
[BITS 16]
Je me demandais si l'ordre dans lequel sont donnés ces directives fait une différence? J'utilise la version MSNA 2.06rc2, OpenSUSE 11.2
La solution
Le dernier MSNA est à la version 2.08, et à en juger par la documentation sur le directive de BITS ..
L'ordre ne doit pas faire une différence, car ils disent MSNA pour générer un fichier avec certaines conditions, telles que l'utilisation de 16 bits et d'adressage départ à zéro. De là, NASM semble être assez intelligent pour savoir quel type de sortie, il va générer.
Autres conseils
Il n'a pas d'importance que l'on vient d'abord, mais je suivent généralement cet ordre dans mes programmes:
cpu 8086
bits 16
org 256
(Parce que bits 16
est la valeur par défaut pour le format de sortie bin MSNA je ne précise pas, explicitement, sauf quand il y a des parties de bits 32
à un fichier.)
Par ailleurs, les formes avec crochets sont le niveau inférieur, les formes non « utilisateur » de ces directives. https://www.nasm.us/xdoc/ 14.02.02 / html / nasmdoc6.html # section 6.1
La directive BITS a une forme primitive exactement équivalente, [BITS 16], [32 BITS] et [BITS 64]. La forme de niveau utilisateur est une macro qui n'a pas d'autre fonction que d'appeler la forme primitive.