11
votes

Comment puis-je écrire une application "Hello World" dans la langue d'assemblage?

Duplicaté possible:

Comment écrire Bonjour World in Assembleur sous Windows?

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.

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.

juste purement à court de curiosité, que devrais-je écrire un "World Hello!" application?

Modifier pour ajouter, je suis en cours d'exécution Windows 7 64bit

Modifier pour ajouter, je me demande s'il y a un plugin de langue d'assemblage pour Visual Studio?


4 Réponses :


2
votes

regarder Winasm .


0 commentaires

7
votes

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: < Pré> xxx

Si vous souhaitez une sortie sur la console, elle est (étrangement suffisante) un peu plus complexe: xxx

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 pour le code 64 bits. Le code de travail ne serait pas un tout 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.


5 commentaires

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 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 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); } .


Ah d'accord. Je ne pouvais jamais accéder à Win32 API, donc simplement sans une charge du code initial d'abord.



1
votes

Je vous conseille de trouver un outil supportant l'ASM de style Intel, plutôt que la syntaxe horrible de AT & T.


0 commentaires

1
votes

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   


0 commentaires