Was ist ein Scratch Register?

Gast #1576984
Lesenswert?
• ▲
▼
Ich kenne das nur als 'scratchpad', dürfte aber wohl auf das selbe 
hinauslaufen - 'Schmierblock' respektive '"Schmierblockregister"' dürfte 
hinkommen. Also ein Speicherbereich, in den man 'nur' was 
'hinkritzelt'.. Manche Sensoren z.B. messen in das Scratchpad hinein, 
und selbiges kann man dann (später, nach Abschluss der Messung) 
auslesen.
#1576997
Lesenswert?
• ▲
▼
Als Scratchregister werden Register bezeichnet, in denen für kurze Zeit 
Zwischenergebnisse gespeichert werden, auf die im weiteren Verlauf einer 
Berechnung zurückgegriffen werden muß.

Die Bezeichnung steht weniger für das physikalische Register, daß als 
Scratchregister benutzt wird, als vielmehr für den momentanen 
Verwendungszweck.

Wenn man einen Ausdruck, wie z.B.

   (a + b) * (c + d)

auf einer Registermaschine berechnen will, dann werden zunächst die 
Klammerausdrücke berechnet und in Scratchregistern gespeichert. 
Anschließend werden die Scratchregister multipliziert.
#1577190
Lesenswert?
• ▲
▼
Beim DS18B20 (Temperatur-Mess-IC) werden Messwerte, Einstellungen usw. 
zunächst in ein temporäres Register (RAM) geschrieben, das Scratchpad ( 
Kratztafel, Schiefertafel, Notizblock ).

Der Datenverkehr per onewire mit dem IC läuft ausschließlich über dieses 
Scratchpad.

Werte, die als neue Einstellung des IC bestimmt sind und in 
EEPROM-Zellen gehören, werden durch extra Befehle anschließend vom 
scratchpad in die betreffende EEPROM-Zellen übertragen.

Messergebisse landen ebenfalls zuerst im scratchpad und werden 
anschließend per onewire gelesen.
#1577220
Lesenswert?
• ▲
▼
so werden register bezeichnet, die nicht gesichert und wiederhergestellt 
werden müssen, wenn man diese in seiner Funktion verwendet.
Das heißt der Aufrufende muss sich bewusst sein, dass die Darin 
enthaltenen Daten verloren gehen können, wenn er eine Funktion aufruft.
sprich er muss diese entweder selbst vorher sichern, oder alle 
Berechnungen abschließen, die diese Daten noch brauchen.

Analog dazu gibt es auch Scratch(pad)-Memorie.
#1577351
Lesenswert?
• ▲
▼
Vlad Tepesch schrieb:
> so werden register bezeichnet, die nicht gesichert und wiederhergestellt
> werden müssen, wenn man diese in seiner Funktion verwendet.

Nein, das stimmt so nicht.

Z.B. wenn ein Interrupt kommt, während das Hauptprogramm gerade in einer 
Berechnung ist, dann müssen selbstverständlich auch Scratchregister 
erhalten werden.

Andererseits können solche Zwischenwerte natürlich auch von vorne herei 
im Speicher gehalten werden - darüber entscheidet der 
Register-Allokations-Algortihmus des Compilers.

Letzlich werden meist alle Register des Prozessors, außer dem 
Stackpointer, dem PC, dem Statusregister und dem Basepointer-Register, 
falls vorhanden, als Scratchregister verwendet.
#1577375
Lesenswert?
• ▲
▼
Uhu Uhuhu schrieb:
> Z.B. wenn ein Interrupt kommt, während das Hauptprogramm gerade in einer
> Berechnung ist, dann müssen selbstverständlich auch Scratchregister
> erhalten werden.

Logisch, ISRs dürfen natürlich nicht einfach was verändern.

Uhu Uhuhu schrieb:
> Andererseits können solche Zwischenwerte natürlich auch von vorne herei
> im Speicher gehalten werden - darüber entscheidet der
> Register-Allokations- Algortihmus des Compilers.

Mit Scratchregistern beschäftigt man sich ja normalerweise nur, wenn man 
Asembler schreibt und Bibliotheksfunktionen benutzen will, dann muss man 
sowas wissen.

Uhu Uhuhu schrieb:
> Letzlich werden alle Register des Prozessors, außer dem Stackpointer,
> dem PC, dem Statusregister und dem Basepointer-Register, falls
> vorhanden, als Scratchregister verwendet

Stimmt natürlich auch nicht.
Je nach Zielsystem (oder Toolchain) gibt es unterschiedliche 
Vereinbarungen, welche Register in einer Funktion geclobbert werden 
dürfen und welche nicht.
#1577399
Lesenswert?
• ▲
▼
Vlad Tepesch schrieb:
> Mit Scratchregistern beschäftigt man sich ja normalerweise nur, wenn man
> Asembler schreibt und Bibliotheksfunktionen benutzen will, dann muss man
> sowas wissen.

Oder wenn man Code debugt, zu dem man keine Quellen hat.

> Stimmt natürlich auch nicht.

Warum natürlich?

> Je nach Zielsystem (oder Toolchain) gibt es unterschiedliche
> Vereinbarungen, welche Register in einer Funktion geclobbert werden
> dürfen und welche nicht.

Oh, oh, oh. Ein Interrupt darf garnichts "clobbern".

Für Funktionsaufrufe aus einer Funktion heraus gelten gelockerte Regeln, 
weil die ja synchron zum aufrufenden Code laufen - die laufen dan unter 
Call Convention.
#1577622
Lesenswert?
• ▲
▼
Uhu Uhuhu schrieb:
> Oh, oh, oh. Ein Interrupt darf garnichts "clobbern".
hab ich ja geschrieben.

>
> Für Funktionsaufrufe aus einer Funktion heraus gelten gelockerte Regeln,
> weil die ja synchron zum aufrufenden Code laufen - die laufen dan unter
> Call Convention.

Und die legt fest, welches Scratchregister sind, also welche ohne 
Bedenken vollgekritzelt werden dürfen und welche saubergehalten (oder 
wider hergestellt) werden müssen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren