Duplicaté possible: strong>
Comment écrire Bonjour World in Assembleur sous Windows? p> blockQuote>J'ai souvent entendu parler des applications écrites en utilisant la langue des dieux, la langue de montage. Je n'ai jamais essayé cependant, et je n'ai même pas d'idée de le faire. P>
Si je voulais marcher, comment vais-je continuer à le faire? Je ne connais absolument rien à propos de ce qui est requis, bien que probablement une sorte de compilateur et de bloc-notes. P>
juste purement à court de curiosité, que devrais-je écrire un "World Hello!" application? P>
Modifier pour ajouter, je suis en cours d'exécution Windows 7 64bit P>
Modifier pour ajouter, je me demande s'il y a un plugin de langue d'assemblage pour Visual Studio? P>
4 Réponses :
Pour cela, vous ne gagnerez rien en écrivant du code 64 bits - vous pouvez aussi bien coller au code 32 bits.
Si vous souhaitez sortir dans une messagerie, cela pourrait ressembler à ceci: P> < Pré> xxx pré>
Si vous souhaitez une sortie sur la console, elle est (étrangement suffisante) un peu plus complexe: p> en théorie, passant à 64 bits Le code ne fait pas beaucoup de différence - par exemple, vous pouvez utiliser les mêmes fonctions dans les deux. En réalité, il est un peu douloureux, car la convention appelante pour le code 64 bits est quelque peu complexe et vous ne pouvez pas utiliser d'invoquer MASM's d'invoquer code> pour le code 64 bits. Le code de travail ne serait pas un tout em> beaucoup plus complexe, mais que le code fonctionne probablement serait un peu plus de travail. L'idée générale est que pour le code 64 bits, vous allouez de l'espace sur la pile pour tous vos paramètres, mais les premiers paramètres qui sont suffisamment petits pour s'adapter, vont dans des registres. P> P>
Pourquoi l'écriture de la console est-elle si compliquée? De retour Quand je faisais montage, écrire une ficelle était un appel d'interruption trivial ... Je pense que c'était INT 10H, mais je ne peux pas me rappeler certains. C'était comme 4 instructions, aucune bibliothèque externe requise.
@RMeAdor: La longueur est principalement du fait qu'ils traitent la console sous forme de fichier normal et que WriteFile prend des paramètres supplémentaires, nous ne nous soucions pas beaucoup dans ce cas. En théorie, vous pouvez utiliser writeconsoleoutput code> ou quelque chose sur cet ordre, mais il n'est pas non trivial aussi.
Est-ce vraiment tout ce qui est nécessaire? Je pensais que vous devriez configurer des charges de sections de code et des trucs. Comment une application ASM Windows i> peut-elle être tellement plus courte que tout le code C ++ nécessaire? C'est seulement un peu plus longtemps qu'une console C ++ "Bonjour Word"!
@John: L'équivalent C ++ du premier serait: int Main () {Retour Messasgebox (NULL, "HELLO WORLD!", "WIN32 Hello World", MB_OK); } code>.
Ah d'accord. Je ne pouvais jamais accéder à Win32 API, donc simplement sans une charge du code initial d'abord.
Je vous conseille de trouver un outil supportant l'ASM de style Intel, plutôt que la syntaxe horrible de AT & T. P>
in FASM :
include 'win32axp.inc' .code start: invoke AllocConsole invoke WriteConsole,<invoke GetStdHandle,STD_OUTPUT_HANDLE>,tex,tex.size,dummy,0 invoke Sleep,-1 .end start .data tex TCHAR 'Hello World!' .size = ($-tex) dummy rd 1
Dupliquer Stackoverflow.com/questions/1023593/...