Wenn man eine Adresse als einen Satz von k
Bits definiert, die verwendet werden können, um ein Element aus einem Satz von bis zu 2^k
Elementen auszuwählen , dann ist es üblich, dass viele Register in vielen Prozessoren und Controllern Adressen haben, aber auch, dass Controller einige haben Register, die von Schaltkreisen abgetastet werden, die bestimmte Bedingungen erkennen und über keine Adresse identifizierbar sind. Es ist jedoch wichtig zu beachten, dass in vielen Fällen die Adressdrähte, die CPU-Register steuern, keine Beziehung zu den Adressdrähten haben, die mit größeren Speichersystemen verbunden sind. Daher existieren Register- "Adressen" häufig in einem völlig getrennten "Universum" von Speicheradressen.
Auf den meisten Prozessoren werden Register- "Adressen" immer entweder intern von der Prozessorlogik außerhalb der Steuerung des Programmiergeräts generiert oder von bestimmten Bits in jedem Befehl abgerufen. Die einzige Möglichkeit, durch Ändern des Codes unter Software zu beeinflussen, welches Register von einem bestimmten Befehl abgerufen werden soll, besteht darin, die entsprechenden Bits innerhalb dieses Befehls zu patchen. Auf dem General Instruments PIC, dessen Design in Form des Microchip PIC weiterlebt, würde Hardware, wenn ein Opcode alle Nullen für eine Adresse spezifiziert, den Inhalt eines anderen Registers ersetzen, das sich an Adresse 3 befindet. Dies ermöglicht es dem Code, Berechnungen zur Auswahl zu verwenden eine Adresse.
Das vielleicht wichtigste Verständnis von Adressen ist, dass ein System unterschiedliche Adressräume haben kann, die effektiv in verschiedenen Universen existieren. Auf dem 8051 gibt es zum Beispiel, je nachdem wie man zählt, mindestens vier verschiedene Adressräume und möglicherweise bis zu sechs; vier von ihnen sind völlig unabhängig (die Anweisungen:
mov a,80h ; Direct address space
mov a,@r0 ; Assume R0 = 80h
movc a,@a+dptr ; Assume A = 0 and DPTR = 80h
movx a,@dptr ; Assume DPTR = 80h
Alle rufen Daten von "Adresse 80h" ab, lesen jedoch vier nicht miteinander verbundene Dinge: eine Adresse im E / A-Bereich (das Datenregister von Port 0, glaube ich), das interne Datenregister 80h, den Codespeicher unter der Adresse 0x0080 und den externen Datenspeicher unter der Adresse 0x0080 . In vielen Systemen hätten diese Dinge tatsächlich keinerlei Beziehung zueinander. Die Tatsache, dass ein Register auf eine bestimmte Adresse in einem Universum reagiert, sagt wenig oder gar nichts darüber aus, ob es auf diese oder eine andere Adresse in einem anderen Universum reagiert.