Zeiger

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen finden sich unter Zeiger (Begriffsklärung).


Ein Zeiger (engl. pointer) stellte eine Speicheradresse dar, welche auf eine Speicherstelle verweist, ab der dann die gewünschten Daten hinterlegt sind oder ein entsprechender Programmteil erreichbar ist. Im Zusammenhang mit angesprungenen Programmroutinen wird auch häufig von Vektoren gesprochen. Eine Zeigervariable einer Programmiersprache enthält demnach nicht etwa den Wert an sich, sondern lediglich den Verweis (als Adresse) auf den Wert.

Ein Zeiger ist stets von der zugrunde liegenden Architektur abhängig und sollte den Adressbereich des jeweiligen verwendeten Speichermodells abdecken können. Typischerweise sind Zeiger auf einem C64 und der zugrundeliegenden 6502-Architektur 16 Bit breit, um den Adressbereich von 0 bis 65.535 ($FFFF) abzudecken. Es gibt aber auch Zeiger für speziellere Bereiche, die sich auf 8 Bit beschränken, wie etwa der Stapelzeiger, welcher sich immer auf Page $01 bezieht. Oft orientieren sich Register eines Prozessors an der Zeigergröße, aber beim 6502 stehen bis auf den PC (Program-Counter) nur 8-Bit-Register zur Verfügung, weshalb Zeiger über eine Adressierungsart in der Zeropage (die quasi als Registersatz dient) gebildet werden.
Bei Systemen mit Banking ist ein Zeiger manchmal auch zusammen mit der Bank-Nummer zu bilden. Das findet man beim BASIC V4.0+ der CBM-II-Reihe vor, wo in der 256-KByte-Ausstattung alle vier Bänke von BASIC genutzt werden und der Stringheap Zeiger auf einfache String-Variablen oder String-Array-Elemente in verschiedenen Bänken enthalten kann.

Erst mit CPU-Nachfolgegeneration der 65816-Familie (z.B. bei der SuperCPU) werden Register 16 Bit breit und können so Zeiger aufnehmen, die eine Bank vollständig ansprechen können. Um den vollen Adressbereich (16 MByte) ansprechen zu können, gibt es auch "Long-Pointer", die 24 Bit umfassen. Daher sind die Zeropage-Zeiger sowohl in einer 16-Bit- (2 Byte) als auch in einer 24-Bit-Variante (3 Byte) vor.

Zeiger sind zwar Grundelemente der Assembler-Programmierung und damit eine Basisstruktur der Maschinensprache, aber auch unter Hochsprachen spielen Zeiger eine größere oder kleinere Rolle. Bekannt dafür sind speziell C oder C++, andere Sprachen verzichten komplett auf das Zeigerkonzept. Manche BASIC-Erweiterungen wie z.B. Exbasic Level II liefern mit der VARPTR-Funktion Zeiger auf Interna, was die Schnittstelle BASIC-Maschinensprache bereichert.

Darüber hinaus findet der Begriff "Zeiger" auch in diversen anderen Bereichen Anwendung:

  • DATA-Zeiger − in im BASIC-Interpreter intern geführter Verweis auf das nächste von READ zu lesende DATA-Element. Manchmal auch als READ-Zeiger bezeichnet.
  • BASIC-Textzeiger − enthält die aktuelle Position im BASIC-Programm, welche über die CHRGET-Routine gelesen wird.
  • Zeiger auf die Tastaturdekodiertabelle
  • Sprite-Datenzeiger − Im Anschluss an den Bildschirmspeicher verwaltet der VIC-II-Chip eine acht Speicherstellen (für die acht Sprites), aus deren Werten die Speicheradresse mit den Sprite-Daten errechnet wird.
  • Bildschirm- und Farb-RAM-Zeiger − Registerwerte des VIC-II, aus denen die entsprechenden Adressen für Bildschirmspeicher und Farb-RAM errechnet werden.
  • Zeiger auf den Anfang oder das Ende von Speicherregionen, wie sie vom BASIC-Interpreter bzw. vom KERNAL üblicherweise in der Zeropage verwaltet werden, z.B. der Zeiger auf den Beginn des BASIC-Programms (BASIC-Text).
  • Sprungverktoren sind typische Vertreter von Zeigern auf Programmcode, wie die Vektoren, die ab $0300 bis $333 abgelegt sind oder die Hardware-Vektoren der CPU (z.B. IRQ-Vektor).
  • Track/Sektor-Zeiger im Aufbau der Dateien (Block-Verkettung, Side-Sector-Tabelle) auf einer Diskette unter CBM-DOS.

Weblinks[Bearbeiten]

WP-W11.png Wikipedia: Zeiger (Informatik)