Salut,
Je voudrai savoir comment installer MASM sur Vista.
Parce que je viens d'acheter "Assembleur x86" de Kip Irvine et il parle seulement de MASM.
Alors c'est possible ?
Salut,
Je voudrai savoir comment installer MASM sur Vista.
Parce que je viens d'acheter "Assembleur x86" de Kip Irvine et il parle seulement de MASM.
Alors c'est possible ?
Bonjour,
as-tu essayé d'installer MASM32 ?
http://www.masm32.com/masmdl.htm
Oui, c'est celui-ci que j'ai et j'utilise.
Avec "easy Code Masm"
Mais avec la lib "Irvine32" ca ne marche pas.......
Qu'est-ce qui ne "marche pas" exactement ? (difficile à deviner sans plus de précisions...)
Est-ce un problème de link, ou de compilation ?
Quel sont exactement les messages d'erreurs ?
Est-ce que la compilation et l'édition de lien se passent bien, mais les programmes utilisant la lib en question ne fonctionnent pas ? Est-ce qu'ils plantent directement ? Y'a-t-il un message d'erreur quelconque ?
Bon j'ai réussi a Assembler depuis un batch et obtenir un Module1.obj et un Module1.lst.
Mais je peu rien linker voilà comment j'ai fait (corrigez moi svp):
J'ai créé un batch contenant ceci:
(link32.exe et Module1.obj sont dans le même dossier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 link32.exe Module1.obj cmd
Voil ce que le batch me renvoit:
Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 C:\Masm615>link32.exe Module1.obj Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK32 : fatal error LNK1221: a subsystem can't be inferred and must be defined C:\Masm615>cmd Microsoft Windows [version 6.0.6001] Copyright (c) 2006 Microsoft Corporation. Tous droits réservés. C:\Masm615>
Voici deux exemple de ligne de commande :
(avec ML et LINK du pack MASM32, mais peu importe).
Ici, la compilation avec ML (on compil le fichier "blabla.asm", pour obtenir "blabla.obj") :
L'option /I indique le chemin des fichier *.inc.D:\masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"D:\masm32\Include" "blabla.asm"
Une fois compilé, on donc obtient un *.obj. Il suffit de faire l'édition de lien dessus (avec link ou link32) :
Le /SUSBSYSTEM peut être CONSOLE ou WINDOWS (ou autre mais plus rare). WINDOWS est utilisé généralement pour les programmes ayant un GUI.D:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPATH:"D:\masm32\Lib" /OUT:"blabla.exe" "blabla.obj"
/LIBPATH sert à indiquer le chemin des *.lib (on peut mettre plusieurs chemins, pas besoin de coller toutes les libs au même endroit).
/OUT sert à indiquer le nom de l'exécutable de sortie.
En toute fin de ligne de commande pour link, on passe simplement le fichier obj obtenu à la compilation.
Pour plus d'infos, voir sur la MSDN :
Options de commande pour LINK
Options de commandes pour ML
N'hésite pas à poser des questions si ce n'est pas clair ou que tu n'y arrives toujours pas.
Mon linker contient ceci:
Mais la console me renvoie ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 C:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPATH:"C:\masm32\Lib" /OUT:"Module1.exe" "Module1.obj" cmd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 C:\masm32>C:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPA TH:"C:\masm32\Lib" /OUT:"Module1.exe" "Module1.obj" Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. Module1.obj : error LNK2001: unresolved external symbol _ExitProcess@4 Module1.obj : error LNK2001: unresolved external symbol _DumpRegs@0 Module1.exe : fatal error LNK1120: 2 unresolved externals C:\masm32>cmd Microsoft Windows [version 6.0.6001] Copyright (c) 2006 Microsoft Corporation. Tous droits réservés. C:\masm32>
Ah oui , je crois savoir d'où vient ce problème.
J'utilise une forme de commande pour link qui ne donne pas le nom de bibliothèque au linker mais les passe dans le fichier .obj.
au début de ton code source, tu dois avoir quelque chose comme ça :
Il suffit de rajouter les "includelib", ça évite de passer toutes les bibliothèques (*.lib) au linker.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 .686 .model flat, stdcall ; A mettre pour éviter les erreurs de link includelib kernel32.lib ; pour ExitProcess includelib .... ; le nom de la la lib qui contient DumpRegs .data ;... .code start: ...
Sinon il suffit de passer les noms des libs au linker :
Personnellement, je préfère la manière includelib.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 C:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPATH:"C:\masm32\Lib" /OUT:"Module1.exe" kernel32.lib blabla.lib "Module1.obj"
Merci !
Petite question de noob: Comment on bloque une console pour pouvoir voir le contenu ? En C c'est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 system("PAUSE");
Bonjour,
Le problème c'est que la fenêtre console se ferme dès que le programme se termine. Deux solutions :
1) Tu démarres ton programme en passant par l'interpréteur de ligne de commande :
Touche "windows" + R > tape "CMD"
A l'invite de commande :
Comme ça tu pourra voir ce qui passe par le flux de sortie.C:\ > C:\foo\mon_programme.exe
2) Par programmation (on empêche le programme de se terminer). Il y a plusieurs solutions (kbdhit(), getch(), utiliser les APIs consoles, system(), etc.).
Pour system(), avec MASM32, il faut utiliser le fichier d'en-tête msvcrt.inc et la bibliothèque msvcrt.lib.
Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 comment $ TestCrt.asm $ include windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib include msvcrt.inc includelib msvcrt.lib .const CRLF equ 13d, 10d .data format_string byte "%s", CRLF, 0 message byte "Simple message", 0 pause_command byte "PAUSE",0 .code start: invoke crt_printf, addr format_string, addr message invoke crt_system, addr pause_command ret end start
Les fonctions courantes du C sont accessibles en les préfixant avec "crt_" (ex : crt_printf, crt_system, crt_strcat, crt_strcmp, etc.).
Ok.
C'est normale que:
Ne marche pas. (Désolé je début :s)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 TITLE Add and Subtract (AddSub.asm) INCLUDE Irvine32.inc .code main PROC mov eax, 10000h add eax, 40000h sub eax, 20000h mov ebx, 10000h call DumpRegs crt_getch() exit main ENDP END main
cf. ce post pour "Ne marche pas".
Impossible de deviner ce qui ne va pas si tu ne dis pas exactement ce qui ne fonctionne pas.
P.S : je ne vois qu'un seul include, tu n'en aurais pas oubliés par hazard ?
Il (ML.exe) ne reconnait pas la sysntaxe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Assembling: Module1.asm Module1.asm(14) : error A2008: syntax error : crt_getch Appuyez sur une touche pour continuer...
La syntaxe exacte est :
il y a deux underscore ( _ ). La fonction getch du crt commence déjà par un underscore (_getch sur MSDN ) , donc si on préfixe avec 'crt_' ça en fait deux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 crt__getch
Ok, mais que j'essaie avec crt__getch() ou crt__getch, j'ai toujours la même erreur...(celle de syntaxe)
Hmm, c'est de l'assembleur, pas du C
tout assembleur syntaxe Intel :
MASM :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2call crt__getch
Regarde attentivement le code au point 2) du post #10 de ce fil de discussion. C'est un code complet, compilable, pour MASM32 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2invoke crt__getch
http://www.developpez.net/forums/sho...8&postcount=10
il y a un exemple d'utilisation de printf et system avec PAUSE.
Ok. il vient de quelle .inc ou .lib "invoke crt__getch" parce que MASM ne le reconnais toujours pas.
Pour tout ce qui est crt_ :
il faut utiliser le fichier d'en-tête msvcrt.inc et la bibliothèque msvcrt.lib.
Ca marche pas.
Bon pas grave, j'utilise un debugeur pour voir ca.
Il faut ajouter "include msvcrt.inc" et "includelib msvcrt.lib" et normalement ça devrait marcher. Ce sont des fichiers qui devraient se trouver dans le répertoire \include et \lib de MASM32 (ou quelque chose comme ça).
Pour mettre le programme en pause je préfère faire un .bat qui appelle un programme passé en paramètre et fait un "pause > nul". Après je mets un raccourci clavier dans mon éditeur pour l'appeler en lui passant le chemin du programme que je viens de compiler. Comme ça si je l'utilise en console après je ne devrai pas appuyer sur une touche à chaque fois qu'il se termine.
:wq
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager