Forum: PC-Programmierung ASM-Code und C in einem Programm


von Felix M. (djfelix)


Lesenswert?

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?

von Stephan (Gast)


Lesenswert?

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

von A. S. (Gast)


Lesenswert?

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?

von MaWin (Gast)


Lesenswert?

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.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

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.

von Felix M. (djfelix)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von Felix M. (djfelix)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von Zien (Gast)


Lesenswert?


von rbx (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

Zien schrieb:
> Lass das doch vom Compiler erledigen:

Wenn der Dozent vorgibt, dass externe Assemblerquellen zu verwenden 
sind, dann ist das nicht zulässig.

von MaWin (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

Dafür hätte es von mir einen Punkt für Originalität gegeben.
Mehr nicht, weil Aufgabenstellung nicht erfüllt.

von MaWin (Gast)


Lesenswert?

S. R. schrieb:
> weil Aufgabenstellung nicht erfüllt

Was funktioniert denn damit nicht?

von Felix M. (djfelix)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von S.B.Z.ettler (Gast)


Lesenswert?

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.

von Georg (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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?

von Blechbieger (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

MaWin schrieb:
> Welcher Compiler macht das denn bitte?

Keiner. Das macht der Programmierer.

Oliver

von MaWin (Gast)


Lesenswert?

Oliver S. schrieb:
> Keiner. Das macht der Programmierer.

Du hast leider das Thema verfehlt.
Es geht hier um das Plattform-ABI.

von Oliver S. (oliverso)


Lesenswert?

Das ist mir völlig klar, der Vorschlag kam aber nicht von mir. Das Thema 
hat da jemand anderes verfehlt.

Oliver

von rbx (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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
von S. R. (svenska)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von rbx (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von rbx (Gast)


Lesenswert?

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 
)

von Joachim B. (jar)


Lesenswert?

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

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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

von S. R. (svenska)


Lesenswert?

Geschichte wiederholt sich, auch in der IT.

von A. S. (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

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.
von S. R. (svenska)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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
Noch kein Account? Hier anmelden.