Hallo, dieses Semester machen wir einige Assembler und C-Projekte in der Uni und bis jetzt ist mir leider eine Sache nicht ganz klar geworden. Konkret geht es um die Verwendung von ASM-Files (*.s) in C-Programmen. Bei einem Projekt haben wir eine main.c als Rahmenprogramm (Funktionsköpfe und main{...}) vorgegeben bekommen und mussten die einzelnen Funktionen in Assembler in einem separatem Assembler-File implementieren. Bei der Implementation habe ich immer angenommen, dass der erste Parameter einer Funktion in R0 und der zweite in R1 ankommt. Ich weiß, dass die Register R0 bis R3 für Übergabeparameter vorgesehen sind (Procedure Call Standard for the Arm® Architecture, Seite 18/19), aber kann man immer annehmen, dass R0 der erste Parameter, R1 der zweite, usw. ist?
Felix M. schrieb: > Übergabeparameter Hi Felix, Dem Prozessor ist das (grundsätzlich) erstmal wurscht. Von C-Seite betrachtet, könnte der C-Compiler die Übergabelogik auf ‚irgendeine‘ Weise machen. Wenn Du Dich da per Assembler einklinken willst, musst Du das natürlich nach dieser Vorgabe machen und die Übergabe nach der Logik erwarten. Es haben sich aber Techniken etabliert (hast Du ja auch schon einige genannt). Kurzum: es hängt am Compiler/Assembler wie da genau passiert. Hier mal die Dokumentation z.B. des IAR Compilers (for ARM): http://ftp.iar.se/WWWfiles/arm/webic/doc/EWARM_DevelopmentGuide.ENU.pdf#page163 Gab es denn keine Aussage zur einzusetzen Tool-Chain (wie das neu-deutsch heisst)? VG Stephan
Felix M. schrieb: > aber kann man immer annehmen, dass R0 der erste Parameter, R1 der > zweite, usw. ist? Und wenn 10 oder 100 Parameter übergeben werden? Oder der erste 70 Byte hat?
Felix M. schrieb: > aber kann man immer annehmen, dass R0 der erste Parameter, R1 der > zweite, usw. ist? Welcher Parameter wo liegt, ist in der entsprechenden Architektur-ABI-Dokumentation definiert. A. S. schrieb: > Und wenn 10 oder 100 Parameter übergeben werden? Oder der erste 70 Byte > hat? Auch das ist dort definiert.
A. S. schrieb: > Felix M. schrieb: >> aber kann man immer annehmen, dass R0 der erste Parameter, R1 der >> zweite, usw. ist? > > Und wenn 10 oder 100 Parameter übergeben werden? Oder der erste 70 Byte > hat? Wenns zu viele Parameter werden gibts dann noch den Stack.
Vielen Dank für eure Antworten. Ich sehe, dass ich mich wohl noch durch so einiges an Dokus durchwälzen darf :D Dennis H. schrieb: > Wenns zu viele Parameter werden gibts dann noch den Stack. Stimmt, das hab ich fast schon wieder vergessen. Aber ganz so umfangreiche Argumente haben wir dann auch wieder nicht - da sah es bei den C++-Projekten schon ganz anders aus.
Felix M. schrieb: > Aber ganz so umfangreiche Argumente haben wir dann auch wieder nicht - Aber genau das kann der Compiler nicht wissen bzw. Berucksichtigen. Er muss heute Funktionen und Funktionsaufrufe umsetzen, die später mit ganz anderen Projekten zusammenarbeiten. Von daher musst Du die genaue Festlegung nachlesen (in Doku oder notfalls im erzeugten Assembler erstelllter Dummy-Funktionen). Annahmen helfen da nicht.
Bezogen war das eigentlich mehr auf das Ausweichen auf den Stack. Aber du hast natürlich Recht - die Register könnten genauso durch {something} aus dem restlichem C-Programm belegt sein und deswegen der Stack verwendet werden.
Felix M. schrieb: > Bezogen war das eigentlich mehr auf das Ausweichen auf den Stack. > Aber du hast natürlich Recht - die Register könnten genauso > durch {something} aus dem restlichem C-Programm belegt sein und > deswegen der Stack verwendet werden. Die ABI, mit der ich mal zu tun hatte (Cortex-M3), definierte das ungefähr wie folgt (mal aus meinen alten Folien gekratzt und übersetzt): Die ersten vier 32-Bit-Argumente liegen in R0, R1, R2 und R3 oder die ersten beiden 64-Bit-Argumente liegen in R0:R1 und R2:R3 oder das erste 128-Bit-Argument liegt in R0-R3. Was bei Mischbestückung passiert, weiß ich aus dem Kopf nicht. Weitere Argumente liegen auf dem Stack, von links nach rechts. Der Rückgabewert liegt in R0 (32-Bit), R0:R1 (64-Bit) oder R0-R3 (128-Bit). Die Register R0-R3, R9, R12, LR und PC dürfen von einer Funktion zerstört werden, alle anderen Register müssen vor und nach dem Funktionsaufruf gleich sein. Weitere Regeln existieren, hatte ich aber nicht in der Vorlesung. Der Kurs damals war ausschließlich Assembler, die ABI wurde also für jede Funktion und Aufgabe irgendwie definiert und musste von den Studenten entsprechend dokumentiert werden.
Lass das doch vom Compiler erledigen: https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Felix M. schrieb: > Ich sehe, dass ich mich wohl noch durch so einiges an Dokus durchwälzen > darf :D Eigentlich nicht. Abgesehen vom grundlegendem "Datenblatt" und von grundlegenden Programmiertechniken kommt es vor allem auf die Formalitäten bei der Parameterübergabe an. Das kann von Compiler zu Compiler, bzw. von Programmiersprache zu Programmiersprache etwas anders sein. Genau diese Formalitäten (des Entwicklungspacketes) sollte man aber gut kennen und im Debugger/Disassembling schnell wiederfinden.
Zien schrieb: > Lass das doch vom Compiler erledigen: Wenn der Dozent vorgibt, dass externe Assemblerquellen zu verwenden sind, dann ist das nicht zulässig.
S. R. schrieb: > Wenn der Dozent vorgibt, dass externe Assemblerquellen zu verwenden > sind, dann ist das nicht zulässig. Ja doch. Man implementiert die Schnittstelle zum C-Code in Inline-Asm und ruft von dort aus die ASM-Bibliotheken auf.
Dafür hätte es von mir einen Punkt für Originalität gegeben. Mehr nicht, weil Aufgabenstellung nicht erfüllt.
MaWin schrieb: > Was funktioniert denn damit nicht? Dein Vorschlag würde mit ziemlicher Sicherheit funktionieren (man könnte genauso gut auch alles rein in C schreiben), aber die Vorgabe der Profs ist, dass bestimmte Teile des Programms in Assembler zu schreiben sind. Im aktuellem Projekt ist z.B. die main() und das komplette Interrupt Handling samt SysTick in Assembler zu schreiben.
MaWin schrieb: >> weil Aufgabenstellung nicht erfüllt > Was funktioniert denn damit nicht? Solcherlei Aufgabenstellungen lauten nicht "schreibe funktionierenden Code", sondern sie lauten eher "löse folgendes Problem auf die in der Vorlesung / hier beschriebene Weise".
Felix M. schrieb: > aber die Vorgabe der Profs > ist, dass bestimmte Teile des Programms in Assembler zu schreiben sind. Das wäre ja erfüllt.
Felix M. schrieb: > aber die Vorgabe der Profs > ist, dass bestimmte Teile des Programms in Assembler zu schreiben sind. Was ist denn die Aufgabe genau? a) Schreibe ein Assembler-Programm und rate, was der Compiler macht? b) Schaue in der fiktiven Beschreibung ABC wie es der XY-Compiler mit Einstellung Z macht c) bringe das zuverlässig zum Laufen bei a... viel Glück, bei b lies halt nach und bei c kannst Du es auch den Compiler machen lassen und in Assembler weitermachen.
Wenn man faul ist, kann man sich die Assemblerquelle ja vom C-Compiler ausgeben lassen. Das haelt dann garantiert auch die ABI ein. Problem geloest.
S. R. schrieb: > Weitere Argumente liegen auf dem Stack, von links nach rechts Das muss nicht so sein, für grössere Argumente kann man auch Speicherplatz reservieren und nur einen Pointer darauf übergeben. Das hat natürlich auch so seine Tücken, wenn man keine Erfahrung damit hat. Meistens hat man sowieso die Wahl, ob man einer Prozedur die Daten selbst oder eine Kopie davon übergibt. In vielen Fällen (beliebt z.B. beim Windows API) kann man viele Parameter in einem Record zusammenfassen und übergibt den Pointer darauf als einzigen Parameter. Georg
Georg schrieb: > Das muss nicht so sein, für grössere Argumente kann man auch > Speicherplatz reservieren und nur einen Pointer darauf übergeben. Welcher Compiler macht das denn bitte?
Georg schrieb: > Das muss nicht so sein, für grössere Argumente kann man auch > Speicherplatz reservieren und nur einen Pointer darauf übergeben. Das > hat natürlich auch so seine Tücken, wenn man keine Erfahrung damit hat. Das hat aber mit dem ABI nichts zu tun sondern ist eine Ebene höher, dem API.
Oliver S. schrieb: > Keiner. Das macht der Programmierer. Du hast leider das Thema verfehlt. Es geht hier um das Plattform-ABI.
Das ist mir völlig klar, der Vorschlag kam aber nicht von mir. Das Thema hat da jemand anderes verfehlt. Oliver
Felix M. schrieb: > Im aktuellem Projekt ist z.B. die main() und das komplette Interrupt > Handling samt SysTick in Assembler zu schreiben. Da ist man schon mal im Vorteil, wenn man die Aussage kennt, dass es sich in C vor allem um Zeiger dreht. Darüberhinaus geht es wohl u.a. auch darum, einen ordentlichen Interrupt selber zu schreiben, und entsprechend aufzurufen (lassen) zu können.
Georg schrieb: >> Weitere Argumente liegen auf dem Stack, von links nach rechts > Das muss nicht so sein, [...] Für die von mir zitierte ABI ist das aber so. Immer.
S. R. schrieb: > Solcherlei Aufgabenstellungen lauten nicht "schreibe funktionierenden > Code", sondern sie lauten eher "löse folgendes Problem auf die in der > Vorlesung / hier beschriebene Weise". wenn das mal so wäre! Leider sind auch Dozenten nicht fehlerfrei und lassen den Frust bei korrekter Umsetzung gemäß der Aufgabenstellung auch mal gerne an dem Prüfling aus! Wie verstehst du denn folgende Aufgabenstellung: "ermitteln sie den Wert des Integrals" programmierbare Rechner sind zugelassen! Mit der keplerschen Fassregel und Programm habe ich die Aufgabe erfüllt und trotzdem 0 Punkte und eine Note 6 kassiert! https://de.wikipedia.org/wiki/Simpsonregel An keiner Stelle war Handarbeit gefordert und Käsekästchen unter der Funktion zu addieren kann der Rechner viel besser als ich.
:
Bearbeitet durch User
Joachim B. schrieb: > Leider sind auch Dozenten nicht fehlerfrei [...] Das ist mir klar. Aber wenn du mir unterstellen möchtest, ich sei ein furchtbarer Dozent gewesen, dann kann ich dir nur sagen, dass ich aus dem System raus bin. :-) Arschlöcher gibt's überall im Leben und Arschlöcher mit Machtgefälle sind überall besonders unangenehm, egal ob das nun Dozenten, Lehrer, Chefs oder höherqualitative Kollegen sind.
S. R. schrieb: > Aber wenn du mir unterstellen möchtest nie im Leben, ich kenne dich nicht! Mit meinem Dozenten konnte ich mich später einigen und musste in der mündlichen Prüfung die 6 zu einer 2 umbauen..... puh noch mal gut gegangen! Aber ärgerlich fand ich das schon, leider waren nicht alle Dozenten fair, da konnte man nur demütig abnicken und hinnehmen.
Joachim B. schrieb: >> Aber wenn du mir unterstellen möchtest > nie im Leben, ich kenne dich nicht! Das freut mich. Es gibt hier nur so einige Spezialisten, die das vermutlich aus Prinzip anders sehen. Was mich halt stört ist, wenn (absichtlich) Vorschläge gemacht werden, die die Aufgabenstellung untergraben. Und dann muss man sich als Korrektor - oft genug nichtmal für die Aufgaben verantwortlich! - mit Lösungen rumschlagen, die weder ins Lösungsschema passen noch ausgearbeitet sind. Das kostet Zeit und Nerven, wenn man den Studenten gegenüber einigermaßen fair sein möchte. Es geht ja nicht nur um "die Lösung funktioniert theoretisch", sondern auch "die Standardlösung gibt 20 Punkte, die hier vorgestellte Lösung funktioniert komplett anders und funktioniert auf Anhieb nicht, könnte aber mit ein bisschen Debugging funktionieren, wieviele Punkte vergibt man dafür?". Wer das nie gemacht hat, kann das vermutlich nichtmal einschätzen. Und ich kann Dozenten verstehen, die das komplett ausblenden und mit "hau ab" quittieren, obwohl ich das absolut nicht respektiere.
S. R. schrieb: > Was mich halt stört ist, wenn (absichtlich) Vorschläge gemacht werden, > die die Aufgabenstellung untergraben. Und dann muss man sich als > Korrektor - oft genug nichtmal für die Aufgaben verantwortlich! - mit > Lösungen rumschlagen, die weder ins Lösungsschema passen noch > ausgearbeitet sind. Das kostet Zeit und Nerven, wenn man den Studenten > gegenüber einigermaßen fair sein möchte. Man darf auch nicht vergessen, bzw. übersehen, dass bestimmtes Know How bzw. bestimmtes Wissen oftmals schon ökonomisiert/optimiert angeboten wird. Und als Student ist es heute oft so, da hat man kaum noch Freiheitsgrade, bei so vielem was zu Lernen ist. Hier haste Telefonbuch. Morgen wird abgefragt.. Einer der wenigen Wege hinaus aus dem Dilemma ist wirklich viel zu lernen - dabei helfen gut ökonomisierte Angebote, Überblicksartikel/professionelle Dokumentationen oder Hinweise wie bei Antwort 8. Die kann man ganz gut irgendwo hinpinnen. Vorzugsweise an einem der zehn Finger z.B. Mit der AT&T Asm-Sytax (beim gcc) müsste man sich erstmal anfreunden. Ich meine, das geht leichter, wenn man schon die wichtigsten Assembler-Grundlagen intus hat. Als ich an der Uni angefangen hatte, konnte man die Sprechzeiten bei den Professoren nutzen. Manchmal war ein Student vorher da, der brauchte die ganze Stunde.., ein anderes mal waren 2-5 Leute da, und man selbst kam auch schnell dran. Manchmal war gar keiner (vor mir) da. Als ich (zur Jahrtausendwende) ging, standen 30-50 - und mehr Leute vor der Türe vom Professor. Da kann man Klausurbesprechung u.ä. vergessen - Belange wie Klausurbesprechung sollte man heutzutage möglichst vorher abhandlen. Normalerweise klappt das auch ganz gut, weil man Studenten fragen kann, die vor einem da waren. Aber das ist auch wieder so eine Sache. Übertrieben abkürzen (mit Klausuroptimierten Skripts) sollte man nicht - sonst kann man das Studium (+ Motivation) an sich vergessen - aber weil die Inhalte großer Wissensmengen zu bearbeiten sind - gehen manche auf die Strategie, auf Lücke zu lernen oder man kickt halt einen Bereich - oder mehrere komplett raus und lernt nur auf bestehen. Letztlich muss jeder für sich selbst einen Weg finden, wie mit den Unmengen an Wissen klarkommen.
rbx schrieb: > Mit der AT&T Asm-Sytax (beim gcc) müsste man sich erstmal anfreunden. > Ich meine, das geht leichter, wenn man schon die wichtigsten > Assembler-Grundlagen intus hat. In erster Linie erwarte(te) ich, dass der Student in der Klausur den gleichen Assembler-Dialekt und Architektur verwendet, den er in den Vorlesungen vermittelt, in den Übungen verinnerlicht und im Praktikum angewendet hat. > Als ich (zur Jahrtausendwende) ging, standen > 30-50 - und mehr Leute vor der Türe vom Professor. Dafür haben kluge Leute mal E-Mails erfunden. Dummerweise ist nicht jeder Professor willens, das auch zu benutzen. Dummerweise ist nicht jeder Student zur sinnvollen Nutzung fähig. Klausurbesprechung kenne ich grundsätzlich aus der letzten Vorlesung. Bei manchen Dozenten sehr sinnvoll, bei manchen eher nutzlos. > Letztlich muss jeder für sich selbst einen Weg finden, wie mit den > Unmengen an Wissen klarkommen. Bulimie-Lernen ist verbreitet und in den meisten Fächern (leider) die optimale Herangehensweise. Das Bildungssystem ist da nicht ganz unschuldig. Andererseits muss man auch sagen, dass Frontalunterricht bei allen Nachteilen die mit Abstand die beste Methode ist, wenn man viel Wissen in kurzer Zeit vermitteln will. Und Studenten wollen Youtube-Videos, was ja effektiv auch nichts anderes ist, nur mit besseren Mitteln.
S. R. schrieb: > Bulimie-Lernen ist verbreitet und in den meisten Fächern (leider) die > optimale Herangehensweise. Das Bildungssystem ist da nicht ganz > unschuldig. Der spannende Teil ist: der Begriff (Bulimie) hört sich irgendwie schon so krank an.. Um so wichtiger ist auf jeden Fall, und das wird hier deutlich, dass vorsortiertes und voroptimiertes "Material" genutzt wird - sonst würde diese Geschichte gar nicht gut funktionieren, und die Gefahr von Motivationsverlust und Verzettelung wäre um so größer. Für Assembler finde ich die Analogie mit Stützrädern bei einem einfachen Fahrrad gut. Man braucht die eine Zeit lang bzw. kann sie einfach nutzen, und bald kann man drauf verzichten und (Generalisiertechnisch) problemlos auf andere Fahrräder umsteigen. Für Motorradfahrerei ist dieser Schritt für Schritt-Aufbau sicher auch nicht so schlecht. Aus einem ganz ähnlichen Grund hänge ich noch immer an dem Funktionsgenerator von Andreas (Ausgangsbasis/Stützrad für so einen Phase-Distortion-Synth). Motivationstechnisch ist es bei mir aber eher so, das mich ARM-Hintergründe schon etwas stärker anfixen (als AVR). ( https://www.mikrocontroller.net/articles/Digitaler_Funktionsgenerator )
S. R. schrieb: > Bulimie-Lernen ist verbreitet der Begriff gefällt mir, wie hiess es früher? Nicht für die Schule sondern fürs Leben lernen wir, zugegeben manches darf aus dem Langzeitspeicher ruhig verschwinden, dummerweise tut es nicht immer das Sinnloseste, "333 Isos Keilerei" https://de.wikipedia.org/wiki/Schlacht_bei_Issos
Felix M. schrieb: > Konkret geht es um die Verwendung von ASM-Files (*.s) in C-Programmen. > Bei einem Projekt haben wir eine main.c als Rahmenprogramm > (Funktionsköpfe und main{...}) vorgegeben bekommen und mussten die > einzelnen Funktionen in Assembler in einem separatem Assembler-File > implementieren. > > Bei der Implementation habe ich immer angenommen, dass der erste > Parameter einer Funktion in R0 und der zweite in R1 ankommt. > Ich weiß, dass die Register R0 bis R3 für Übergabeparameter vorgesehen > sind (Procedure Call Standard for the Arm® Architecture, Seite 18/19), > aber kann man immer annehmen, dass R0 der erste Parameter, R1 der > zweite, usw. ist? wegen .s vermute ich mal, daß es sich um nasm Assembler handelt? Welchen C Compiler verwendet Ihr denn? gcc oder was anderes? Bißchen konkreter wäre nicht schlecht ... hier wirst Du allerdings sowieso keine Antwort finden; trotzdem viel Erfolg.
rbx schrieb: > Der spannende Teil ist: der Begriff (Bulimie) > hört sich irgendwie schon so krank an.. Ist es ja auch... rbx schrieb: > Um so wichtiger ist auf jeden Fall, und das wird hier deutlich, dass > vorsortiertes und voroptimiertes "Material" genutzt wird - sonst würde > diese Geschichte gar nicht gut funktionieren, und die Gefahr von > Motivationsverlust und Verzettelung wäre um so größer. Breit gefächertes, wenig sortiertes und optimiertes Material wird von all jenen bevorzugt, die ein "holistisches" Bildungssystem wünschen. Was hier mit "seinen Namen tanzen lernen" verspottet wird, hat durchaus Hand und Fuß; vernetztes Wissen bleibt hängen, eine Faktensammlung nicht. Davon abgesehen führt optimiertes Material immer zu einem Verlust von Wissen und dem wiederum trauern die Älteren nach, die dafür einstmals ihre Lebenszeit opfern mussten. Es gibt durchaus interessante Technologien, die mal verbreitet waren, es nicht mehr sind, aber unter den aktuellen Bedingungen durchaus wieder werden könnten. Haben die Entscheider aber nie von gehört, wird also auch nicht berücksichtigt.
S. R. schrieb: > Davon abgesehen führt optimiertes Material immer zu einem Verlust von > Wissen und dem wiederum trauern die Älteren nach mit was? Mit Recht Wir können 1000 Jahre alte Steinplatten entziffern aber kaum noch digitale Medien seit 1980. Zur Optimierung gefällt mir immer wieder: https://www.youtube.com/watch?v=7FeqF1-Z1g0
S. R. schrieb: > Bulimie-Lernen ist verbreitet und in den meisten Fächern (leider) die > optimale Herangehensweise. Das Bildungssystem ist da nicht ganz > unschuldig. Manchmal ist es gut, wenn manche Dinge überhaupt einmal "drin" waren. In Mechanik (bei uns ein Nebenfach) weiss ich noch, wie der Prof seinerzeit resümierte, dass ein Großteil der Studenten die Schrauben-Berechnung zum ersten Mal in ihrem Leben überhaupt in der Klausur selbstständig machen. In vielen anderen Fächern ist es ähnlich. Die Klausur nicht als Lernstandskontrolle sondern Akt des Lernens. Ich weiss nur nicht, ob das jemals anders war: Bei Abkürzung im Bildungssystem (Mediziner-Test, IQ-Tests, Aufnahmeprüfungen) ist es oft genauso. Die einen, die die Materie als Hobby schon immer betrieben, schaffen "einfach so" Bestleistungen (ihnen fällt es also zu), die anderen üben den ganzen Abend vorher und fallen trotzdem durch. Klavierspielen schafft man doch auch, wenn man Abends vorher übt. Und daneben gibt es eine Vielzahl mittelmäßiger Kandidaten, die 2 Wochen vorher intensiv lernen, sich damit signifikant verbessern und das ganze erst die letzten Jahre als Bulimie-Lernen brandmarken.
A. S. schrieb: > In Mechanik (bei uns ein Nebenfach) weiss ich noch, wie der Prof > seinerzeit resümierte, dass ein Großteil der Studenten die > Schrauben-Berechnung zum ersten Mal in ihrem Leben überhaupt in der > Klausur selbstständig machen. Daran ist der Prof aber nicht ganz unschuldig. Und mal Hand aufs Herz: Die wenigsten Studenten brauchen im ersten Studienjahr höhere Mathematik. Der Bedarf kommt erst lange nach den Klausuren. Rückblickend waren die späteren und interessanteren Kurse auch immer mehr qualitativ als quantitativ. Da hat man dann auch keine DFTs mehr berechnet, sondern sich berechnen lassen und analysiert. Hauptsache man wusste, (a) dass man das berechnen kann, (b) grob was man tun müsste, wenn man wöllte und (c) was man daraus ablesen kann. Unser Prof in E-Technik war immer traurig, dass die Studenten die Winkelfunktionen nicht mehr im Kopf zwischen bekannten Punkten interpolieren konnten. Mussten wir auch nicht können, wir hatten Taschenrechner... A. S. schrieb: > Klavierspielen schafft man doch auch, wenn man Abends vorher übt. Ja, aber nicht, wenn man nur am Abend vor der Klausur intensiv übt und sich dann auf sein Kurzzeitgedächtnis verlässt. ;-)
:
Bearbeitet durch User
Felix M. schrieb: > aber kann man immer annehmen, dass R0 der erste Parameter, R1 der > zweite, usw. ist? Der erfahrene Programmierer nimmt gar nichts an. Er schreibt eine Dummyfunktion, die genau die benötigte Anzahl und Typen der Argumente, Returnwerte und Variablen verwendet. Diese läßt er dann nach Assembler compilieren und hat somit den Rumpf für sein Assemblerprogramm. Wichtig ist dabei, auch die gewünschten Compilerschalter und Optimierungslevel zu setzen. Je nach Compiler und Target kann das nämlich auch die Argumentenübergabe beeinflussen. Z.B. beim Keil C51 unterscheidet sich der erzeugte Rumpf für Small und Large erheblich.
Beitrag #6533701 wurde vom Autor gelöscht.
Peter D. schrieb: > Der erfahrene Programmierer nimmt gar nichts an. Würde ich so nicht unterschreiben. Der erfahrene Programmierer schaut sich an, was garantiert wird (d.h. schaut in die Dokumentation vom ABI), prüft das und hält sich dann an die Regeln. Peter D. schrieb: > Z.B. beim Keil C51 unterscheidet sich der > erzeugte Rumpf für Small und Large erheblich. Ja, das sind unterschiedliche ABIs, die von Keil ganz sicher auch passend dokumentiert sind.
S. R. schrieb: > Der erfahrene Programmierer schaut > sich an, was garantiert wird (d.h. schaut in die Dokumentation vom ABI), > prüft das und hält sich dann an die Regeln. Nun, das ist prima, wenn man mehrere Baustellen gleichzeitig aufreißen will. Funktioniert etwas nicht, dann kann es sein, daß die ABI-Doku fehlerhaft ist oder man hat sie nicht richtig verstanden/verwendet oder das Programm ist fehlerhaft. Läßt man aber den Compiler das machen, was er am besten kann, also einen Rahmen erstellen, fallen schonmal 2 Baustellen weg. Außerdem geht das deutlich schneller.
Peter D. schrieb: > Funktioniert etwas nicht, dann kann es sein, daß die > ABI-Doku fehlerhaft ist oder man hat sie nicht richtig > verstanden/verwendet oder das Programm ist fehlerhaft. Darum das "prüfen". Peter D. schrieb: > Außerdem geht das deutlich schneller. Ja, das macht man dann in der Realität und irgendwann fliegt es einem um die Ohren. Been there, done that.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.