2010-08-19 4 views
0

Je suis responsable d'un code au niveau de l'application dont j'ai hérité et qui contient du x86 ... Code d'assemblage Intel basé sur des instructions et un adressage 32 bits. Je vais faire l'hypothèse que ce code assembleur 32 bits sera exécuté lorsque nous migrons un système d'exploitation Windows 64 bits. Oui?Migration du code d'assemblage de 32 à 64 bits

+0

Ceci est intégré dans le code C++. – ddm

+0

Pourquoi les votes serrés, je me demande. – Sathya

+0

Peut-être que ce ne sera pas aussi facile que je le pensais. J'ai reçu un lien d'un répondeur (désolé - pas sûr de qui cette question a été déplacée) http://msdn.microsoft.com/fr-fr/library/hb5z4sxd.aspx Cela indique que "Inline ASM n'est pas supporté pour x64 Utilisez MASM ou les intrinsèques du compilateur (x64 Intrinsics). " – ddm

Répondre

0

Plus que probablement, il fonctionnera; Windows 64 bits prend en charge le mode 32 bits pour les applications et il est généralement très fiable. (Évidemment, ces choses ne sont jamais 100%, cependant - caveat emptor.)

0

Oui. Le code 32 bits s'exécutera sur des machines 64 bits, mais ils ne pourront pas accéder à plus de 4 Go de RAM.

2

Il fonctionnera probablement, mais il ne profitera d'aucune des fonctionnalités que les extensions 64 bits de x86 asm fournissent (x86-64, qui est ce que toutes les versions "64 bits" de Windows) ou être capable d'interopérer étroitement avec les bibliothèques x64. La couche WoW64 est très stable et 99,999% des applications 32 bits fonctionnent correctement sur les systèmes d'exploitation «64 bits» actuels.

Si vous voulez migrer vers un véritable système d'exploitation 64 bits (les seuls que je connaisse sont basés sur Itanium, ia64), vous n'avez pas de chance. Editer: De plus, si vous voulez activer l'accès aux adresses larges (pouvant utiliser> 4 Go de RAM), vous pouvez inverser un drapeau d'en-tête PE qui l'activera et lui permettre d'adresser de plus grandes quantités de mémoire.

+0

Fantastique! Merci beaucoup! Je suis nouveau ici (mais j'ai une bonne réputation sur SO) si j'avais une assez bonne réputation ici pour que je puisse voter. – ddm

+0

Même. Je ne m'inquiète pas pour le représentant, donc voter n'a pas d'importance, mais si je répondais pour vous, vous pourriez vouloir accepter juste pour que les gens le sachent. :) – ssube

+0

Ok acceptera, mais ce n'est pas évident comment faire cela (au moins pour moi). Envoyer un lien FAQ :-) – ddm

0

Il va exécuter si vous continuez à créer des applications x86 32 bits, pour le moment. Toutefois, si vous devez porter le code en 64 bits x86, il est probable que le code d'assemblage ne sera pas exécuté (et pourrait même ne pas être compilé). Et en fonction de votre chaîne d'outils et s'il s'agit d'un assembleur en ligne dans le code C/C++ ou non, vous ne pourrez peut-être même pas le compiler du tout.

+0

Pourriez-vous élaborer? Pas même compiler? C'est un code C++ intégré. – ddm

+0

De la mémoire - au moins avec le compilateur MS, l'assembleur inline ne compilera simplement pas sur la chaîne d'outils 64 bits car le compilateur ne supporte pas '__asm'. Je ne sais pas si d'autres compilateurs comme GCC souffrent également de ce problème. –

+0

Nous utilisons VS - probablement 2010 au moment où le transfert de code a lieu. Je ne suis donc pas impatient de réécrire le code assy, ​​pas impossible pour moi, mais pas une tâche pour laquelle je me suis inscrit. – ddm

Questions connexes