Noob en assembleur AAT

Noob en assembleur AAT - ASM - Programmation

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

Reply

Marsh Posté le 30-12-2005 à 16:06:59   

Reply

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...

Reply

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  

Reply

Marsh Posté le 08-01-2006 à 12:04:31    

Ah bon... c'est les mystères du pentium ça alors!

Reply

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.

Reply

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.

Reply

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]
[bonjour: B$ 'hello world!' CR LF taille: len]
[CarEcrits: D$ 0]
 
Main:
    call 'Kernel32.AllocConsole'
     
    push &STD_OUTPUT_HANDLE  
    call 'Kernel32.GetStdHandle'
 
    push 0
    push CarEcrits
    push D$taille
    push bonjour  
    push eax
    call 'Kernel32.WriteConsoleA'  
 
    call 'Kernel32.FreeConsole'
     
    call 'Kernel32.ExitProcess'


 


---------------
Scarmatil
Reply

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.

Reply

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.

Reply

Marsh Posté le 15-01-2006 à 20:34:09    

tris a écrit :

c'est déja optimisé ^^
étonamment, movl 1 prend plus de cycles que  
xorl %eax, %eax  
incl %eax


 
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...

Reply

Marsh Posté le 15-01-2006 à 20:34:09   

Reply

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 :)

Reply

Marsh Posté le 16-01-2006 à 12:41:03    

AT&T et non AAT


---------------
http://www.ikalizer.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed