Wie sind die Registerkonvention im Assembler zu verstehen?

Guten Morgen,
ich bin Schülerstudentin und sitze seit ca 1 Woche an einer Aufgabe in Mips, die wir nun endlich fertig haben. Nun sind wir allerdings auf ein Problem gestoßen und zwar wissen wir nicht wie wir mit den Registerkonventionen umzugehen haben.

Ich zähle nun einmal die Regeln zu einer Funktion mit Funktionsaufrufen (nicht Blattfunktion auf), darunter (in dick) befinden sich meine Fragen und Kommentare.

Konventionen:

– Sichere $ra auf dem Stack!

Ist für uns klar, denn die Returnadresse geht sonst nach einem Funktionsaufruf verloren und es kommt zu einer Endlosschleife.

– Weise Variablen, die nach einem Aufruf benötigt werden, an

einen $si Register zu und sichere zuvor $si auf dem Stack.

– weise Variablen, die nach einem Aufruf nicht länger benötigt

werden, an einen $ti Register zu

Ich nehme diese zwei Punkte einmal zusammen, denn hier beginnt das böse Übel.
Wie ist das denn eigentlich gemeint ? Ich persönlich verstehe es so, dass die $si Register vor dem Aufruf in den Stack geladen werden müssen, wenn sie in der aufzurufenden Funktion auch vorhanden sind. Und durch das Speichern wird der Wert nicht überschrieben. Die Frage wäre nun, wenn ich ein Register (z.b für einen Counter) benötige, dass nicht in der aufzurufenden Funktion vorkommt, ich es auch auf den Stack speichern muss, oder ob es dann ein t Register wird, statt ein s?

Man sagt ja, dass die t-Register sind für die Haltung kurzlebiger (temporärere) Variablen bestimmt sind. Nur was ist damit genau gemeint?

– kopiere Argumente ($ai) , die nach einem Aufruf benötigt

werden, in ein $si-Register und sichere zuvor $si auf dem

Keller

Was meint man hiermit genau.

Es wäre sehr nett, wenn ihr konkret werden würdet, denn ich verstehe das meiste im Internet schon nicht.

Vielen Dank im Voraus

Luisa

...zur Frage

Guten Morgen zurück :)

Ich nehme diese zwei Punkte einmal zusammen, denn hier beginnt das böse Übel.
Wie ist das denn eigentlich gemeint ? Ich persönlich verstehe es so, dass die $si Register vor dem Aufruf in den Stack geladen werden müssen, wenn sie in der aufzurufenden Funktion auch vorhanden sind. Und durch das Speichern wird der Wert nicht überschrieben. Die Frage wäre nun, wenn ich ein Register (z.b für einen Counter) benötige, dass nicht in der aufzurufenden Funktion vorkommt, ich es auch auf den Stack speichern muss, oder ob es dann ein t Register wird, statt ein s?

Du machst soviel Platz im Stack frei wie Du $s-Register in Deiner aufzurufenden Funktion (Subroutine) brauchst + 4 Bytes für $ra und schreibst den gesicherten, ursprünglichen Inhalt beim Verlassen wieder zurück.

  • Sinn und Zweck ist, dass die ursprüngliche Funktion 'nicht mitbekommt' dass zwischenzeitlich mit dem $s-Registern gearbeitet wurde in der Subroutine.
  • Das ist auch die Antwort auf Deine Frage hier, nämlich dass Du dadurch nichts machen musst mit dem $s-Register, wenn sie nicht in deiner Subroutine vorkommt

Kannst natürlich auch ein $t-Register nehmen sofern die Subroutine keine weiteren Funktionen aufruft, die mit dem Register arbeitet. Dadurch sparst Du auch noch ein wenig Platz auf dem Stack. Technisch gibt es keinen Unterschied zwischen $t und $s Register - Du als Programmierer 'garantierst' mit Einhaltung der Konvention nur dass $s-Inhalte auch nach Funktionsaufrufe unverändert bleiben, bei $t-Registern musst Du es nicht garantieren.

kopiere Argumente ($ai) , die nach einem Aufruf benötigt werden, in ein $si-Register und sichere zuvor $si auf dem
  • Damit ist gemeint: Wenn Du z.B. 2 Argumente hast, in $a0 und $a1, dann...
  • machst Du Platz auf dem Stack frei für $ra und z.B. $s0 und $s1
  • speicherst (sicherst) den alten Inhalt von $s0 und $s1 auf dem Stack
  • und kopierst anschließend $a0 -> $s0, $a1 -> $s1

Jetzt konkret anhand eines Beispiels.

---

LG. Kesselwagen

...zur Antwort

Hey,

hast Du vor, Apple-exklusive Funktionen wie AirDrop (speziell zwischen iOS iPhone und Mac) zu nutzen? Dann würde ich definitiv ein 2013er MacBook Air nehmen, da bei diesem AirDrop problemlos möglich ist. Der 2011er Pro verfügt leider nicht über die entsprechende Hardware und muss hier umgerüstet werden mit einem Bluetooth-Dongle.

Zudem ist es mit dem 2011er Pro bereits unmöglich auf das aktuellste macOS Mojave zu upgraden. Würde nicht mit veralteter Software arbeiten.

---

Was ist aber der Hauptgrund für Dich diese Macs zu kaufen?

LG. Kesselwagen

...zur Antwort

Hallo,

habe sie gerne mal bei eBay gekauft und hatte noch nie Probleme gehabt. Wichtig ist, dass man mit PayPal bezahlt, damit man im Falle von Betrug nicht auf den Kosten sitzen bleibt. Auch sollte man kurz vorher schauen, wie viele Codes der Verkäufer zuvor schon verkauft hat und ob die Bewertungen alle stimmen.

---

LG. Kesselwagen

...zur Antwort

Moin,

die Stromversorgung kannst Du bspw. durch nen einfachen 230~ -> 5V= Netzadapter realisieren, sprich USB Ladegerät. Damit brauchst Du Dir keine Sorgen mehr zu machen um Batterie/Akku.

Mit einem Arduino und einer RTC (DS1307) z.B. lässt sich die Zeit gut erfassen und daraus kann man ja den Countdown berechnen. Falls Du ungern Module verwendest, baue Dir selbst nen DS1307 Modul: https://www.instructables.com/id/Arduino-Real-Time-Clock-DS1307/. Schaue generell mal auf Instructables, dort findest Du verschiedenste Realisierungsmöglichkeiten mehr oder weniger genial. 7 Segementanzeigen ansteuern kannst Du mit ULN2803 (ggf. Shift-Register) und Multiplexing.

---

LG. Kesselwagen

...zur Antwort

Hallo,

angenommen Du verwendest die LCD Library und eine RTC. Dann kannst Du mithilfe von RTC::now() die aktuelle Zeit abrufen.

char buf[10];
sprintf(buf, "%c%c:%c%c", hour / 10 + '0', hour % 10 + '0', minute / 10 + '0', minute % 10 + '0');
lcd.print(buf);

Wie schon erwähnt kann man sehr einfach mit sprintf (wie printf, nur eben in einen String schreiben und nicht auf Konsole) eine formatierte Ausgabe erzeugen. Nun gilt es nur noch, die einzelnen Ziffern durch Division bzw. Modulo herauszubekommen und sie an die LCD zu senden.

---

LG. Kesselwagen

...zur Antwort

Guten Abend,

nein, das reicht leider nicht aus. Unternehmen, die (neue) elektronische Geräte in Umlauf bringen und vertreiben, müssen ihre Geräte zusätzlich auch WEEE anmelden bzw. konform machen. Mehr Infos hierzu: https://www.mikrocontroller.net/articles/WEEE-Anmeldung

Musst mal schauen ob es für Dich lohnt - ist sehr teuer mal 'einfach so' Elektronik zu verkaufen.

---

LG. Kesselwagen

...zur Antwort

Hallo,

lt. Antworten unten hast Du eine 50K Leitung. 50.000 kBit/s Download sind ~ 6 MB/s. Die Upload-Rate ist immer deutlich geringer. 10.000 kBit/s Upload (i.d.R. so) sind ~ 1 MB/s Upload, also eine völlig angemessene Upload-Rate.

Lösung: Bisschen Geduld haben, schneller gehts nicht. In RAW zu schießen ist schön aber die Datenmenge schmerzt immer sehr. Vielleicht helfen auch externe Festplatten? Kannst ja auf externe Festplatten komprimieren (zippen).

---

LG. Kesselwagen

...zur Antwort

Hallo,

  1. Jein, kommt drauf an was für ein IC. Was für einer isses denn? Ein IC ja erstmal kann alles sein von Transistor-Array bis komplexer 32-bit Mikrocontroller. Immer Datenblatt auf haben. Ersteres könnte man bspw. testen indem man zwischen Source und Drain den Widerstand misst. Wenn der super klein ist, hat der IC ein Problem. Viele ICs haben Beispielbeschaltungen, Testbeschaltungen oder Standardaufbauten (Typical Application). Kannst ja damit testen ob ein IC in Ordnung ist.
  2. Schaue auch hier ins Datenblatt. Pin 1 ist bei den meisten DIP-ICs zumindest mit nem Punkt oder mit einer Notch markiert. Wenn Du den N-Pin-IC so drehst dass die Noct nach Links zeigt, ist Pin 1 links unten und Pin N gegenüber (links oben)

---

LG. Kesselwagen

...zur Antwort

Hey,

schau Dir mal diese Tabelle an: https://en.wikipedia.org/wiki/MacBook_Air#Technical_specifications_2

Über die Jahre hinweg:

  • Hat sich der Prozessor stets (leicht) aktualisiert, ist jedoch bei Broadwell hängengeblieben. Technischer Stand: 2014/2015 für einen 2017er Laptop
  • Thunderbolt 2 ist für 16/17 dazugekommen. Jetzt wird aber eh - wenn dann USB C/Thunderbolt 3 verwendet
  • Sonst wohl nichts.

---

Viele Grüße Kesselwagen

...zur Antwort

Moin,

falls Du selbst noch keine Lösung gefunden hast: Das liegt nicht am Timer, sondern daran, dass die IR-Library für eingehende Daten einen Interrupt auslöst. Die show()-Methode der NeoPixel-Library deaktiviert aber alle Interrupts, bevor sie die Pixel setzt und Interrupts wieder reaktiviert.

Lösungsvorschläge

  • Wie oft rufst Du denn show() auf? show() muss ja (korrigier mich) nur bei einer Farbänderung aufgerufen werden
  • Eine andere IR-Library, die nicht interruptgetrieben funktioniert, oder eine NeoPixel Library, die Interrupts nicht deaktiviert? Such mal danach - gibt bestimmt sowas

---

Viele Grüße Kesselwagen

...zur Antwort

Hey,

Du musst erstmal schauen, ob es von Deinem iPad unterstützt wird. Der ältere Pencil wird vom iPad 6. Gen (2018) und von den iPad Pros der letzten Generation unterstützt, der neue nur von dem neuesten iPad Pro.

Ich arbeite persönlich mit einem Pencil der 1. Generation auf einem 2018er iPad und schreibe sämtliche Notizen bzw. Vorlesungsaufzeichnungen im Studium mit dem Pencil. Bin selbst zufrieden und beeindruckt davon :)

---

LG. Kesselwagen

...zur Antwort

Moin,

könnte sein, dass es am char WortArray[128][128]; liegt. Du musst Dir bewusst sein, dass Du damit 128 * 128 Bytes, also 4 MB Speicher auf dem Stack anforderst. Damit produzierst Du einen Stack Overflow.

Schau mal hier: https://softwareengineering.stackexchange.com/questions/310658/how-much-stack-usage-is-too-much. Für Windows wird der Stackspeicher auf 1 MB beziffert.

Besser: Verwende dynamischen Speicher mit "new" und packe da Deine 128 Sätze rein. Denke aber dran, dynamisch reservierten Speicher wieder freizugeben.

https://www.tutorialspoint.com/cplusplus/cpp_dynamic_memory.htm

---

LG. Kesselwagen

...zur Antwort

Moin,

find ich komisch, denn am Netzteil muss es definitiv einen Überstrom bzw. Kurzschlussschutz geben - es sei denn es ist ein Superbillogerät (Was für ein Netzteil hast Du denn?). Ist nicht eher das Mainboard aufgrund eines Kurzschlusses beschädigt worden? Oder funktioniert das Board noch?

Könnte auch sein, dass das Netzteil herunterfährt, weil nicht genug Last angeschlossen ist und es eigentlich in Ordnung ist. ^^

---

LG. Kesselwagen

...zur Antwort

Moin,

bei solch einer großen Menge könnte es sich durchaus lohnen bei AliExpress zu kaufen und es Dir mit einer schnellen Versandmethode zuschicken zu lassen. Neben der kostenlosen Versandmethode kannst Du i.d.R. auch noch DHL, FedEx etc. wählen - dann liegen die Teile nach maximal einer Woche bei Dir.

---

LG. Kesselwagen

...zur Antwort

Hey,

bei mir (Safari am macOS) geht es ganz einfach durch Rechtsklick auf das Highlight Icon. Wähle dann "Open Image in New Tab" aus und schon kann ich das Bild in guter Auflösung abspeichern - sollte bei Dir auch ähnlich funktionieren.

Kannst Dir auch welche aus Google ziehen, vielleicht bietet jemand sowas ja an oder Deine eigenen Covers erstellen :D

---

LG. Kesselwagen

...zur Antwort

Moin,

kann schlecht beurteilen wie zufrieden man mit dem Surface Book sein kann. Kann nur sagen, dass ich mit meinem 2013er MacBook Air problemlos durch den Bachelor gekommen bin (Elektrotechnik-Studium, auch viele Programme wo man nicht erwarten würde, dass sie auf macOS laufen). Würde trotzdem ein wenig warten wenn Du Dich für die Apple Variante entscheidest, denn anscheinend soll der Oktober noch, hoffe mal, einen neuen MacBook vor allem mit besserer Display-Auflösung bringen:

https://www.digitaltrends.com/computing/new-macbook-september-2018/

Arbeitest Du denn lieber mit Windows oder macOS? Welcher Studiengang? ^^

---

LG. Kesselwagen

...zur Antwort
Laptop

Moin,

habe beides (Stationären PC und Laptop) und ich verwende viel lieber mein Laptop, weil ich oft und gern unterwegs bin. Alle Aufgaben lassen sich auch auf meinem Laptop bewältigen und der PC steht meist wochenlang als Deko rum.

Liegt aber auch daran, dass ich nur im Internet surfe, Netflix schaue, (Haus)arbeiten schreibe und Lightroom zum Bilder bearbeiten verwende. Wenn Du hauptsächlich oder zumindest sehr gerne auch mal zockst, nimm lieber nen PC. Da zahlst Du viel weniger für leistungsstarke Komponenten, die sich auch vor allem Upgraden lassen.

---

LG. Kesselwagen

...zur Antwort

Moin,

Apple ist es egal ob Du gleichzeitig Spotify noch mit Rabatt nutzt, und andersrum ebenso. Deiner Logik nach dürftest Du mit Rabatt auf Apple Music gar kein Prime Student nutzen? :D

Habe auch Phasen gehabt wo beide Dienste aktiv waren. Mir ist aber Spotify doch lieber, da der Community-Effekt stärker ausgeprägt ist (was Freunde hören etc) und es gefühlt mehr gute, ausgewählte Playlists gibt.

---

LG. Kesselwagen

...zur Antwort

Hey,

dann hast Du nur die Verlinkung (Verknüpfung) kopiert. Natürlich kannst Du auch den Programmordner kopieren. Allerdings ist nicht garantiert dass alle Programmteile sich ausschließlich im Programmordner befinden und gerade die Einstellungen (z.B. auch in der Registry) kannst Du nicht mitnehmen.

Würde also das Programm auf einem anderen System neu installieren.

---

LG. Kesselwagen

...zur Antwort

Hey,

ohne zu technisch zu werden... Wage zu bezweifeln dass Dir Sims 4 auf dem Laptop Spaß machen wird - dafür ist der Prozessor, der eine integrierte Grafikeinheit besitzt, viel zu schwach. Für 'Schulkram' wirds aber definitiv reichen.

Würde ein wenig sparen und dann einen schnelleren Laptop nehmen.

---

LG. Kesselwagen

...zur Antwort