In Assembler
-
for(int i=0; i<1000; i++) { a++; } return a;
Ist es schwierig so was in Assembler zu machen. Könnte mir das einer machen?
Und noch eine Frage. Kann ich mit VisualC den Assembler Code eines C Programms zeigen lassen.
großes Dankschön. cu
-
Hi.
Zur 1. Frage (?):
Nein.
2:
Gegenfrage: Wozu?
Wenn du vor hast, Assembler zu lernen, wirst da das nach kurzem Studium der Tutorials in den FAQ und ein wenig Gruebelei selbst hinbekommen.
Wenn du von uns nur einen Programmteil optimiert haben willst, kann ich dir nur raten: Lass es! Dein Compiler wird das mit hoher Wahrscheinlichkeit schon von selbst ausreichend optimieren.
3:
Auch wieder Gegenfrage: Meinst du VisualC++? VisualC kenne ich nicht.
-
Eigentlich finde ich keinen Einstieg. Ich hatte gehoft das ich so schneller reinkommen könnte.
Ich habe: VisualC++ 5.0 Prof. gibt es auch VisualC ?
-
Schon mit den Tutorials in den FAQ probiert?
Ansonsten: Bei VC++ bekommst du AFAIK nur Assembler Code zu gesicht, wenn du ein Programm debugst. Frag mich jetz aber bitte nicht, wie das genau geht - ich habe das Ding gerade nicht installiert.
-
;;;;;;; mov ebp, esp pushad sub esp, 4 ; 4 bytes aufm stack reservieren fuer i (dword) sub esp, 4 ; nochmal 4 bytes fuer a (dword) mov [ebp-4], 0 ; (i=0;) startwert mov [ebp-8], 33 ; (a=33;) startwert schleife: inc dword [ebp-8] ; a erhoehen inc dword [ebp-4] ; zaehler i erhoehen mov eax, [ebp-4] cmp eax, 999 ; und vergleichen jnz schleife popad mov eax, [ebp-8] ; return a; ret 8
also ich bin noch nich der megachecker aber ich habs mal auf die schnelle runtergetippt.. muesst aber gehn, hoff ich doch
der rueckgabewert (wenn du das iner unterfunktion hast) steht in eax zum auswerten
-
Wieso machst du es nicht einfach mit ECX und LOOP?
Wär ja einfacher!
-
schon klar, aber so aehnlich wuerds der c compiler machen..
weil immerhin beschaeftigt er sich ja auch damit, wie der c-compiler sowas macht
klar.. fuer den zaehlerindex koennte man einfach auch nen register nehmenich weiss auch net ob er ueberhaupt schon mal was in asm gemacht hat..
-
Wenn der Compiler nicht optimiert, koennte das so aehnlich aussehen, wie von dir vorgestellt.
Ausser zum Debuggen/Testen sind allerdings so compilierte Programme nicht zu gebrauchen.
Also: Zur Vorstellung, der ungefaehren Funktion dieser Schleife ist der Code vielleicht nicht schlecht, aber einen solchen Stil sollte man sich nicht unbedingt zum Vorbild beim Asm-Proggen nehmen (Sry).
BTW: So ganz stimmt die Umsetzung der Abbruchbedingung in dem Asm-Code auch net. :p
-
BinGast schrieb:
Und noch eine Frage. Kann ich mit VisualC den Assembler Code eines C Programms zeigen lassen.
Du kannst dir einfach einen Breakpoint (F9) in die Zeile setzen und das Programm mit F5 im Debugmodus starten lassen. Wenn du dann in der Zeile stehst, mit Rechtsklick in die Zeile rein und "Go to Disassembly" oder so anklicken
-
aaah!! ein fehler!
das pushad sollte vor dem mov ebp, esp stehen, damit man leichter mit ebp auf die internen variablen zugreifen kann... oder man laesst es so und fixt das ganze indem man die anzahl der gepushed register von pushad noch beruecksichtigt:
mov dword [ebp-36], xxxandersrum hat man aber das gleiche mit den parametern... mov eax, [ebp+40] z.b.
jedenfalls so gehts nich..
hab gestern 2 stunden gebraucht bis ich rausgefunden hab, warum ich meine localen var. nich ansprechen kann
*schwitz*