Noob en assembleur AAT - ASM - Programmation
Marsh Posté le 05-01-2006 à 12:39:23
Ben là en gros tu affiche "hello world" et c'est tout!
Il y a un truc que tu peux otpimiser:
xorl %eax, %eax
incl %eax
Tu peux le réduire a movl 1, %eax (puisque c'est ce que tu fais au final) , c'est du fignolage
Sinon pour ton logiciel pourquoi ne pas regarder en haut à droite du forum dans la partie programmation, puis tu clic sur "logiciels pour programmer" et là tu cherches ASM...
Marsh Posté le 08-01-2006 à 11:59:17
c'est déja optimisé ^^
étonamment, movl 1 prend plus de cycles que
xorl %eax, %eax
incl %eax
Marsh Posté le 08-01-2006 à 13:40:52
ben oui, mais en fait moi je cherche un compilateur et un débugger pour faire tt ça sous windows, et dans le topic que tu me donnes, il n'est question que d'éditeurs.
Marsh Posté le 08-01-2006 à 14:00:40
Essaye de repartir avec cywin, tu n'as peut être pas installé le compilateur et le déboggeur.
Marsh Posté le 08-01-2006 à 17:34:09
Si tu utilises Windows, il faudra de toute façon changer d'interruptions donc tu peux utiliser RosAsm, c'est un IDE/Assembleur/Debugger.
Voilà ce que ton programme donnerais (en utilisant WriteConsole qui est l'équivalent de la fonction utilisée ici pour afficher le message):
(Il faut juste sélectionner Console dans File/Output pour que ça fonctionne)
[CR 0D LF 0A] |
Marsh Posté le 09-01-2006 à 13:00:06
Bonjour
A la vue du programme publié fort simple, quel est l'intéret de faire une référence à main vu qu'il n'y a aucun contexte spécial à préparer, il n'y a pas de liaison à faire. J'aurais utilisé _start à la place de main et un ld du .o pour faire l'exécutable ou un gcc -nostdlib le tout suivit d'un sstrip devrait donner un exécutable de moins de 1 Ko
Dans l'exemple de scarmatil, où est l'assembleur dans tout ça ?
ceux ne sont que mise en pile des paramètres de fonctions C appelés puis appels de fonctions. Autant utiliser le C directement c'est plus lisible.
sous linux, l'exemple met les paramètres dans les registres et appelle une fonction par une interruption c'est guère mieux mais fait plus assembleur. Cet exemple n'est vraiment pas démonstratif de ce qu'est la programmation en assembleur.
Marsh Posté le 15-01-2006 à 14:11:12
le programme n'est pas intéressant en lui même, je l'étudie a des fins pédagogiques, je l'ai copié ici juste pour qu'on soit bien d'accord sur le type de syntaxe. programmer en C ne m'interesse pas, mon but est d'apprendre l'assembleur. sinon c'est sur que c'est plus simple en java, en ada, ou en php ... mais ce n'est pas le but...
je repartirai sur cygwin alors, un jour peut être, en attendant j'ai installé mandriva 2005, j'ai rarement vu on OS aussi lourd, lent et peu pratique. meme sur le net j'ai l'impression d'avoir un 56 K.
Marsh Posté le 15-01-2006 à 20:34:09
tris a écrit : c'est déja optimisé ^^ |
heu non c'est pas étonnant :
xorl %eax, %eax : met a zero le registre ( et oui a xor a = 0 ! ) en manipulant les bits du registre
incl %eax : fait un decalage de sorte d'avoir 1 dans le registre : bref il fait entrer un 1 en bit poids fort et fait sortir un zero
=> il ne fait que de la manip sur les registres, probablement cablé
movl 1 : ca doit aller chercher 1 dans la memoire : tres tres long
mais bon un bon assembleur peut optmiser ca tout seul...
Marsh Posté le 16-01-2006 à 10:41:42
Ca va chercher loin ces optimisations, tant que ça me prenait moins de place sur le papier ça m'allait
Marsh Posté le 30-12-2005 à 16:06:59
Voila je suis étudiant en IUT informatique, et on fait de l'assembleur AAT sous linux, en utilisant emacs en compilant avec gcc et en exécutant pas a pas avec le débuggueur gdb. ainsi notre premier programme (hello world bien sur ^^) ressemble à ça
.data
bonjour:
.string "hello world!\n"
taille:
.long taille - bonjour
.text
.globl main
main:
movl $4, %eax
movl $1, %ebx
leal bonjour, %ecx
movl taille, %edx
int $0x80
xorl %eax, %eax
incl %eax
xorl %ebx,%ebx
int $0x80
Je comprends à peu près ce que ça veut dire, mais j'aimerai pouvoir le modifier, le compiler et l'éxécuter pas à pas mais dans un environnement windows XP. Quels sont les logiciels qui permettent de faire ça (éditeurs, compileurs les plus simples) ?
(j'ai essayé avec cygwin mais ça bug : /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):: undefined reference to `_WinMain@16')
Merci