2010-09-01 12 views
2

J'ai décidé de commencer à apprendre l'assemblage il y a quelques temps, et j'ai donc commencé avec l'assemblage 16 bits, en utilisant FASMW. Cependant, j'ai récemment eu un tout nouvel ordinateur fonctionnant sous Windows 7 64 bits, et maintenant aucun des fichiers .COM compilés que le programme assemble ne fonctionne plus. ils donnent un message d'erreur indiquant que le .COM n'est pas compatible avec les fenêtres 64 bits. Les assemblages 32 bits fonctionnent toujours, mais je préférerais commencer par 16 et mon chemin vers le haut ... Est-il possible d'exécuter un programme 16 bits sur Windows 7? ou existe-t-il un moyen spécifique de les compiler? ou devrais-je abandonner et passer à 32 bits à la place?Assemblage 16 bits sur Windows 64 bits?

+5

Vous pouvez toujours exécuter une machine virtuelle pour votre environnement cible. –

+0

L'assemblage est spécifique au processeur. Quel processeur utilisez-vous? Quel processeur utilisiez-vous? – Oded

+2

Une machine virtuelle comme Windows Virtual PC. Mais cette question est trompeuse de toute façon car il n'y a pas de travail à partir de 16 bits. Le mode 64 bits est beaucoup plus simple et assez similaire à 32 bits que vous n'avez pas besoin d'apprendre ce dernier spécifiquement non plus. Plus de bits! = Plus difficile – jbcreix

Répondre

6

La raison pour laquelle vous ne pouvez pas utiliser l'assemblage 16 bits est que le 16-bit subsystemhas been removed de toutes les versions 64 bits de Windows. La seule façon de remédier à cela est d'installer quelque chose comme DOSBox, ou un paquet de machine virtuelle tel que VirtualBox et ensuite installer FreeDOS dans celui-ci. De cette façon, vous obtenez le vrai DOS de toute façon. (NTVDM is not true DOS)

Personnellement, est-ce que j'encourage l'écriture de l'assemblage 16 bits pour DOS? J'utiliserais un assemblage 32 ou même 64 bits - la raison en est qu'il existe un ensemble différent d'appels de fonction pour différents systèmes d'exploitation (appelé l'ABI). Ainsi, l'ABI pour les applications Linux 64 bits est différent des applications 32 bits. Je ne sais pas si c'est le cas avec Windows. Cependant, je garantis que la signification des interruptions est probablement différente.

En outre, vous avez toutes sortes de choses à prendre en compte avec l'assemblage 16 bits, comme le modèle de mémoire utilisé. Je peux me tromper, mais je crois que DOS vous donne 64K mémoire pour jouer avec "et c'est tout". Tout, tout votre tas et pile avec le code doit tenir dans cet espace, si je comprends bien, ce qui vous fait vous demander comment tout a toujours fonctionné, vraiment.

+0

À votre réflexion sur 64K mémoire suffisante, vous devriez consulter la demoscene -> http://www.demoscene.info/ – Esko

+0

Inaccurate (mais pas de votre faute). Il a été supprimé car il ne fonctionnera pas correctement en mode Long. http://en.wikipedia.org/wiki/Long_mode –

+0

Intéressant, je ne savais pas que c'était la raison de sa suppression, je savais juste qu'il avait été mis au rebut par Microsoft. Ce n'est pas une mauvaise chose en ce qui me concerne, nous ne devrions pas non plus utiliser WOW64 non plus. –

5

Mon conseil serait de simplement écrire du code 32 bits. Alors qu'il semblerait initialement logique d'apprendre à écrire du code 16 bits, puis de "passer" au code 32 bits, je dirais en réalité plutôt le contraire est vrai: écrire du code 32 bits est en fait plus facile car certaines contraintes architecturales arbitraires (par exemple, sur ce que vous pouvez utiliser comme registre de base) sont fondamentalement supprimées en code 32 bits.

D'ailleurs, je considère qu'il est très difficile de savoir s'il existe vraiment une bonne raison d'écrire du code x86 16 bits. Pour la plupart des applications pratiques, c'est une plate-forme morte - pour les machines de bureau, elle est obsolète, et pour les machines embarquées, vous êtes plus susceptible de voir des choses comme des ARM ou des PIC Microchip. Sauf si vous avez une cible spécifique en tête et que vous savez avec certitude qu'il s'agira d'un x86 16 bits, j'oublierais probablement qu'il existait, tout comme la plupart des autres pays du monde.

+0

+1, j'allais mentionner embarqué mais je ne sais pas assez à ce sujet du point de vue de l'assemblage. Bien dit r.e. courbe d'apprentissage aussi. –