Warum haben Register im uC Adressen?

Gast #209582
Wie würdest du an Stelle des Mikrocontrollers zwischen deinen Registern
unterscheiden wollen wenn nicht über Adressen?

Ein SRAM besteht typischerweise aus Flip-Flops!
Gast #209583
na da bin ich mal auf die Antworten gespannt.

Gegenfrage:
Was ist für Dich der Unterschied, ob ich nun 3 Register
RegX, RegY, RegZ nenne
oder
0x00, 0x01, 0x02 ?
Gast #209584
... und wie willst Du z.B. mit einem 8-Bit BUS die Worte RegX, RegY oder
RegZ codieren?
Da ist nunmal eine Adresse in Form einer 8-Bit-Zahl die einzig
sinnvolle Lösung!

Andreas
Gast #209585
Hi,

> ... und wie willst Du z.B. mit einem 8-Bit BUS die Worte RegX, RegY
> oder RegZ codieren?
> Da ist nunmal eine Adresse in Form einer 8-Bit-Zahl die einzig
> sinnvolle Lösung!

Ganz einfach: bei diesen Register-Namen (!), die Du idR. in
Assemblerbefehlen nutzt, wird die Adresszuweisung im Microcode der CPU
vorgenommen. Abhängig von der CPU-Architektur haben die Register idR.
jedoch direkten Zugang zum internen Datenbus. Was liegt also näher, als
den Registern (die durchaus auch mal mehr als nur eine Handvoll sein
können - dann gehen Dir die Namen aus!) gleich auch(!) Adressen
zuzuordnen. Das hat sogar den Vorteil, ev. einen schnellen
Speicher-Speicher-Transfer nutzen zu können. (z.B. DMA) Die
Registernamen für bei speziellen Operationen (ACU etc.) genutzten
Registern hast Du trotzdem.

cu Tom
Gast #209586
Es ist praktisch, die Register auf die gleiche Weise wie Speicher
ansprechen zu können, da die Controller oft nur sehr wenig Speicher
haben. Manche haben sogar überhaupt keinen. Da hätte man schon das
Problem, daß man auf den Stack verzichten müßte, wenn die Register
nicht wie Speicher adressierbar wären.
Gast #209588
"Register bestehen aus FlipFlops und Speicher bestehen
aus Flash oder SRAM, also physikalisch verschieden"


Wer sagt denn sowas, alles drei sind FFs, also funktional gleich.
SRAM und Register sind auch physikalisch gleich.

Ein Unterschied ist, Register haben die meisten Adressierungsarten,
Flash die wenigsten.

Und nicht alle Architekturen mappen die Register mit in den SRAM, z.B.
die ARM machen das nicht. Will dort ein Interrupt die Register des
Hauptprogramms auslesen, geht das nur extrem umständlich.


Peter
Gast #209589
@Peter
"Wer sagt denn sowas, alles drei sind FFs, also funktional gleich"

Also das versteh ich nicht, bitte korrigiere mich, wenn ich da
falsch liege:

FLASH besteht aus MOSFET-Transistoren mit isoliertem Gate,
speichert prinzipiell 1 bit pro Transistor per Gate-Ladung

SRAM: über Kreuz gekoppelte MOSFET-Transistoren, (z.B.
4 Stück für 1 bit), sog Flip-Flops

Wo ist beim FLASH das Flip-Flop ???
Gast #209590
Ein FF ist ein Gebilde, welches 2 unterschiedliche Zustände annehmen und
speichern kann.

Ob das nun mit Transistoren, Röhren, Relais oder Kondensatoren
aufgebaut ist, spielt funktional gesehen keine Rolle.


Z.B. im original 8051 wurden einige Register als DRAM (= Kondensator)
aufgebaut. Deshalb durfte die minimale Taktfrequenz nicht unter 3,5MHz
liegen, sonst wurden die DRAM-Zellen vergeßlich.


Peter
Gast #209591
"Ein FF ist ein Gebilde, welches 2 unterschiedliche Zustände annehmen
und speichern kann."

Wie nennst Du Flash-Memory, in dem pro Floating-Gate-Transistor mehrere
Bits gespeichert werden? Und Ringkernspeicher besteht auch aus
Flipflops?

Nein, so kann man das nicht definieren.
Gast #209593
@puff

Die Unterscheidung ist weniger wichtig, ob Bits in Ringkernen,
Magnetblasendomänen, in optischen Beugungsgittern oder in Form von
irgendwelchen Halbleiterzellen beliebigster Bauart aufbewahrt werden.
Wichtig ist die Zugriffsgeschwindigkeit, die Adressierbarkeit und die
Frage, ob oder wie die Daten veränderbar sind oder sein sollen.

wenn du es nicht nur auf uC beziehst:

Viele (alle?) CPU, uC etc. haben Sprungvektor-Tabellen an definierter
Adresse im Hauptspeicher abgelegt. In die gleiche Richtung gehen
Stapelzeiger (Stackpointer), welche "intern" im Prozessor benötigt
werden, aber "extern" (im Hauptspeicher) zumindest als Duplikat
abgelegt werden, möglicherweise auch nur die einzige Stelel im
Rechnergefüge sind, wo diese Informationen gespeichert sind.

die ST20 Prozessor-Serie hat ihren (internen) Register- und Portbereich
auf den "normalen" Hauptspeicher-Adressbereich gemappt.

(Bestimmte? Alle?) Sparc-Prozessoren haben eine
"Ring-Register-Struktur", welche im Hauptspeicher abgelegt wird:
Beispiel: x interne Register, y Registersets. Ein Ringpufferzeiger
verweist auf den aktuellen Registersatz. Ein Lade-Automatismus
verdrängt dan zum Kontext-Wechsel-Zeitpunkt die momentan im Prozessor
befindlichen Register des Registersets n in den Hauptspeicher, und holt
sich aus dem Hauptspeicher die Register des Registersets n+1
Gast #209594
Adressen sind ja doch nur die Hausnummern.
Ohne Bezeichnung (egal welcher Art) würde man sie ja nicht finden
(benutzen) können.

Dabei ist es doch gleich, welcher Art (die Speicher) sie sind.
Die Art ist ja nur für die Verwendung wichtig (Ram Rom ...)

Oder seh ich das falsch?

Kurt
Gast #209595
Ich glaube euer (puff, Kurt) grundsätzliches Problem besteht darin, daß
ihr "einen zu großen" Zusammenhang seht zwischen Verwendungszweck
einer digitalen Speicherzelle und der Architektur, wo und wie deise
Spricherstelle angesprochen wird.

Wie ich schon sagte: Grundsätzlich ist es erstmal schnurz, welche
Technologie welche Speicherzelle benutzt ("Speicherzelle" als
Platzhalter für ein Objekt zur Speicherung digitaler Informationen wo
auch immer plaziert). Wichtig ist, wie schnell diese Technologie ist,
und ob die Speicherzelle nur-lesbar, manchmal beschreibbar oder
"immer" beschreibbar sein soll.

Fakt ist, daß Dinge "sehr nah im Prozessor" schneller verarbeitet
werden, und Zeugs im Hauptspeicher halt langsamer, und Zeugs auf einem
"externen" Speichermodul wei eienr Festplatte halt noch langsamer
(1:10:100). Und das was am häufgsten benutzt wird, ist halt mehr drin
im Prozessor.

Architekturen wie die vom Sparc-Prozessor erlauben einen schnellen
Context- (=Prozessor-Task) -Wechsel, und deshalb hat sich deise
Design-Idee halt gut bewährt bei Aufgaben, die des verlangen (z.B. bei
einem Multitasking-Betriebssystem wie Unix)
Gast #209596
Letzthin hatte im Forum mal jemand einen Weg gesucht, ein Array/String
oder sowas in der Art in Register zu kopieren. Explizit mit einzelnen
Moves/Loads fand er bei zig Registers etwas zu blöd und suchte einen
anderen Weg. Sind die Register als Speicher adressierbar, dann wird's
einfach.

Seinen Ursprung mag das in jenen Rechnern früherer Zeitalter haben (bis
in die 70er zu finden), die man in der Einfachheit halber mit
Einzelbitschaltern urgeladen hat, und mit selbigen Schaltern und
Anzeigelämpchen auch Fehler suchen durfte. An Speicherworte kam man so
problemlos ran, an Registerinhalte nicht.
Gast #209597
@ Peter
-- Und nicht alle Architekturen mappen die Register mit in den SRAM,
-- z.B. die ARM machen das nicht.

Register mit der ARM-Architektur haben doch Adressen, zuminstest bei
meinem LPC2114.
z.B. PINSEL0 = 0xE002C000

Gruss
Puff
Gast #209599
Der interne SRAM und die Register sind wohl bei praktisch fast allen
Mikrocontrollern physikalisch exakt gleich gebaut.

Der einzige Unterschied sind die Adressierungsarten. Wenn Dein Opcode
nur 16 Bits hat, und einen Move implementieren willst, verbrauchst Du
bei 16 Registern schon 8 Bit dafür. D.h. Opcode selbst und
Adressierungsart etc. müssen in den verbleibenden 8 Bits codiert
werden.

Der Ablaufsteuerung und der ALU ist's egal, ob sie für bestimmte
Funktionen nur die unteren Adressen des SRAMs verwenden kann, die der
Programmierer als Register sieht.

Die Grenzen zwischen Register und RAM sind nicht mehr so scharf, wie
bei den Prozessoren wie vor 20 Jahren.

Man denke nur mal an die ganzen Caches bei größeren Prozessoren, und
die Pipelines etc.

Die Unterscheidung "Register" und "RAM" ist mehr ein
konzeptionelles Kriterium, nicht so sehr ein physikalisches.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.