Hallöchen an alle da draussen :-)
Ich hab folgendes Problem: Wir sollen ein Assembler Programm schreiben, welches uns interativ die Anzahl der ganzzahligen Teiler einer Zahl ermittelt. Das Programm hab ich schon geschrieben und funktioniert auch prima. Nur haben wir Vorgaben bekommen, die wir nicht verändern sollen, was ich auch nicht getan habe ... jedoch frage ich mich, was genau die da machen ... kann mir das einer von Euch vielleicht erklären?
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
Die ersten Zeilen versteh ich ja auch, erst puschen die den basepointer auf den Stack, dann setzen sie den Basepointer auf das letzte Element des Stacks (der alte basepointer), dann reservieren sie 8 Byte (also Platz für 2 Integerzahlen) (subl $8, %esp) aber die nächsten Zeilen verwirren mich.
Was bewirkt die logische AND Verknüpfung mit der 16? Wir haben hier ein klein wenig herum probiert und heraus gefunden, daß bei and-Verknüpfung mit der -16 die letzten 4 Bits einfach auf 0 geschrieben werden. Demzufolge ziehen wir, je nachdem was vorher drin stand, eine Zahl zwischen 0 und 15 ab. Was soll das?
Des weiteren diese merkwürdigen letzten beiden Zeilen:
movl $0, %eaxerst schreiben sie anscheinend 0 in EAX und dann subtrahieren sie 0 von esp?
subl %eax, %esp
Unsere Vermutung ist ja, die haben erst ein C++ Programm geschrieben, das dann in Assembler Umgewandelt und uns dann die sch...e gegeben. Unser Proggi funktioniert, aber wenn die uns fragen, was das da vorne macht, sehen wir alt aus. Hat jemand von Euch eine Idee?
hoffnungsvollen Gruß
Maddin