[{"@context":"http:\/\/schema.org\/","@type":"BlogPosting","@id":"https:\/\/wiki.edu.vn\/wiki18\/2021\/01\/04\/adressierungsmodus-wikipedia\/#BlogPosting","mainEntityOfPage":"https:\/\/wiki.edu.vn\/wiki18\/2021\/01\/04\/adressierungsmodus-wikipedia\/","headline":"Adressierungsmodus – Wikipedia","name":"Adressierungsmodus – Wikipedia","description":"before-content-x4 Adressierungsmodi sind ein Aspekt der Befehlssatzarchitektur in den meisten CPU-Designs (Central Processing Unit). Die verschiedenen Adressierungsmodi, die in einer","datePublished":"2021-01-04","dateModified":"2021-01-04","author":{"@type":"Person","@id":"https:\/\/wiki.edu.vn\/wiki18\/author\/lordneo\/#Person","name":"lordneo","url":"https:\/\/wiki.edu.vn\/wiki18\/author\/lordneo\/","image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Organization","name":"Enzyklop\u00e4die","logo":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":600,"height":60}},"image":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":100,"height":100},"url":"https:\/\/wiki.edu.vn\/wiki18\/2021\/01\/04\/adressierungsmodus-wikipedia\/","wordCount":9402,"articleBody":" (adsbygoogle = window.adsbygoogle || []).push({});before-content-x4Adressierungsmodi sind ein Aspekt der Befehlssatzarchitektur in den meisten CPU-Designs (Central Processing Unit). Die verschiedenen Adressierungsmodi, die in einer gegebenen Befehlssatzarchitektur definiert sind, definieren, wie die Maschinensprachenbefehle in dieser Architektur die Operanden jedes Befehls identifizieren. Ein Adressierungsmodus gibt an, wie die effektive Speicheradresse eines Operanden unter Verwendung von Informationen berechnet wird, die in Registern und \/ oder Konstanten enthalten sind, die in einem Maschinenbefehl oder anderswo enthalten sind. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4In der Computerprogrammierung sind Adressierungsmodi in erster Linie f\u00fcr diejenigen von Interesse, die in Assemblersprachen schreiben, und f\u00fcr Compiler-Autoren. F\u00fcr ein verwandtes Konzept siehe orthogonalen Befehlssatz, der sich mit der F\u00e4higkeit eines Befehls befasst, einen beliebigen Adressierungsmodus zu verwenden.Table of ContentsVorsichtsma\u00dfnahmen[edit]Anzahl der Adressierungsmodi[edit]N\u00fctzliche Nebenwirkung[edit]Einfache Adressierungsmodi f\u00fcr Code[edit]Absolut oder direkt[edit]PC-relativ[edit]Indirekt registrieren[edit]Sequentielle Adressierungsmodi[edit]Sequentielle Ausf\u00fchrung[edit]CPUs, die keine sequentielle Ausf\u00fchrung verwenden[edit]Bedingte Ausf\u00fchrung[edit]\u00dcberspringen[edit]Einfache Adressierungsmodi f\u00fcr Daten[edit]Registrieren (oder direkt registrieren)[edit]Basis plus Offset und Variationen[edit]Sofort \/ w\u00f6rtlich[edit]Implizit[edit]Andere Adressierungsmodi f\u00fcr Code oder Daten[edit]Absolut \/ direkt[edit]Indiziert absolut[edit]Basis plus Index[edit]Basis plus Index plus Offset[edit]Skaliert[edit]Indirekt registrieren[edit]Registrieren Sie die automatische Inkrementierung indirekt[edit]Registrieren Sie die automatische Dekrementierung indirekt[edit]Speicher indirekt[edit]PC-relativ[edit]Veraltete Adressierungsmodi[edit]Mehrstufiger Speicher indirekt[edit]Speicherabgebildete Register[edit]Speicher indirekt und automatisch erh\u00f6ht[edit]Nullseite[edit]Direkte Seite[edit]Skalierter Index mit \u00dcberpr\u00fcfung der Grenzen[edit]Indirekt zum Bitfeld innerhalb des Wortes[edit]Index n\u00e4chste Anweisung[edit]Glossar[edit]Siehe auch[edit]Verweise[edit]Externe Links[edit]Vorsichtsma\u00dfnahmen[edit]Beachten Sie, dass es keine allgemein akzeptierte M\u00f6glichkeit gibt, die verschiedenen Adressierungsmodi zu benennen. Insbesondere k\u00f6nnen verschiedene Autoren und Computerhersteller demselben Adressierungsmodus unterschiedliche Namen oder unterschiedlichen Adressierungsmodi dieselben Namen geben. Dar\u00fcber hinaus kann ein Adressierungsmodus, der in einer gegebenen Architektur als ein einzelner Adressierungsmodus behandelt wird, eine Funktionalit\u00e4t darstellen, die in einer anderen Architektur von zwei oder mehr Adressierungsmodi abgedeckt wird. Beispielsweise behandeln einige komplexe CISC-Architekturen (CISC = Instruction Set Computer), wie beispielsweise die VAX der Digital Equipment Corporation (DEC), Register und Literal- oder Sofortkonstanten als nur einen weiteren Adressierungsmodus. Andere, wie das IBM System \/ 360 und seine Nachfolger sowie die am meisten reduzierten RISC-Designs (RISC = Instruction Set Computer), codieren diese Informationen innerhalb des Befehls. Somit haben die letzteren Maschinen drei unterschiedliche Befehlscodes zum Kopieren eines Registers in ein anderes, zum Kopieren einer Literalkonstante in ein Register und zum Kopieren des Inhalts eines Speicherorts in ein Register, w\u00e4hrend der VAX nur einen einzigen “MOV” -Befehl hat. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Der Begriff “Adressierungsmodus” unterliegt selbst unterschiedlichen Interpretationen: entweder “Speicheradressenberechnungsmodus” oder “Operandenzugriffsmodus”. Bei der ersten Interpretation wird davon ausgegangen, dass Anweisungen, die nicht aus dem Speicher lesen oder in den Speicher schreiben (z. B. “Literal zum Register hinzuf\u00fcgen”), keinen “Adressierungsmodus” haben. Die zweite Interpretation erm\u00f6glicht Maschinen wie VAX, die Operandenmodusbits verwenden, um ein Register oder einen Literaloperanden zu erm\u00f6glichen. Nur die erste Interpretation gilt f\u00fcr Anweisungen wie “effektive Adresse laden”.Die unten aufgef\u00fchrten Adressierungsmodi sind in Codeadressierung und Datenadressierung unterteilt. Die meisten Computerarchitekturen behalten diese Unterscheidung bei, aber es gibt (oder gab) einige Architekturen, mit denen (fast) alle Adressierungsmodi in jedem Kontext verwendet werden k\u00f6nnen.Die unten gezeigten Anweisungen sind rein repr\u00e4sentativ, um die Adressierungsmodi zu veranschaulichen, und spiegeln nicht unbedingt die von einem bestimmten Computer verwendeten Mnemoniken wider.Anzahl der Adressierungsmodi[edit]Unterschiedliche Computerarchitekturen unterscheiden sich stark in Bezug auf die Anzahl der Adressierungsmodi, die sie in der Hardware bereitstellen. Das Eliminieren komplexer Adressierungsmodi und die Verwendung nur eines oder einiger einfacherer Adressierungsmodi bietet einige Vorteile, obwohl einige zus\u00e4tzliche Anweisungen und m\u00f6glicherweise ein zus\u00e4tzliches Register erforderlich sind.[1][2] Es hat sich bew\u00e4hrt[3][4][5] Es ist viel einfacher, Pipeline-CPUs zu entwerfen, wenn nur einfache Adressierungsmodi verf\u00fcgbar sind. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Die meisten RISC-Architekturen verf\u00fcgen nur \u00fcber f\u00fcnf einfache Adressierungsmodi, w\u00e4hrend CISC-Architekturen wie die DEC VAX \u00fcber ein Dutzend Adressierungsmodi verf\u00fcgen, von denen einige recht kompliziert sind. Die IBM System \/ 360-Architektur hatte nur drei Adressierungsmodi. F\u00fcr das System \/ 390 wurden einige weitere hinzugef\u00fcgt.Wenn es nur wenige Adressierungsmodi gibt, wird der bestimmte erforderliche Adressierungsmodus normalerweise im Anweisungscode codiert (z. B. IBM System \/ 360 und Nachfolger, die meisten RISC). Wenn es jedoch viele Adressierungsmodi gibt, wird in der Anweisung h\u00e4ufig ein bestimmtes Feld zur Angabe des Adressierungsmodus beiseite gelegt. Der DEC VAX erlaubte mehrere Speicheroperanden f\u00fcr fast alle Befehle und reservierte daher die ersten paar Bits jedes Operandenspezifizierers, um den Adressierungsmodus f\u00fcr diesen bestimmten Operanden anzugeben. Wenn die Adressierungsmodus-Spezifiziererbits von den Opcode-Operationsbits getrennt gehalten werden, wird ein orthogonaler Befehlssatz erzeugt.Selbst auf einem Computer mit vielen Adressierungsmodi k\u00f6nnen Messungen von tats\u00e4chlichen Programmen durchgef\u00fchrt werden[6] Geben Sie an, dass die unten aufgef\u00fchrten einfachen Adressierungsmodi mindestens 90% aller verwendeten Adressierungsmodi ausmachen. Da die meisten dieser Messungen auf Code basieren, der von Compilern aus Hochsprachen generiert wurde, spiegelt dies in gewissem Ma\u00dfe die Einschr\u00e4nkungen der verwendeten Compiler wider.[7][6][8]N\u00fctzliche Nebenwirkung[edit]Einige Befehlssatzarchitekturen wie Intel x86 und IBM \/ 360 und seine Nachfolger haben eine effektive Adresse laden Anweisung.[9][10] Dies f\u00fchrt eine Berechnung der effektiven Operandenadresse durch, aber anstatt auf diesen Speicherort einzuwirken, l\u00e4dt es die Adresse, auf die zugegriffen worden w\u00e4re, in ein Register. Dies kann n\u00fctzlich sein, wenn die Adresse eines Array-Elements an eine Unterroutine \u00fcbergeben wird. Es kann auch eine etwas hinterh\u00e4ltige Methode sein, mehr Berechnungen als normal in einer Anweisung durchzuf\u00fchren. Wenn Sie beispielsweise einen solchen Befehl mit dem Adressierungsmodus “Basis + Index + Offset” (siehe unten) verwenden, k\u00f6nnen Sie zwei Register und eine Konstante in einem Befehl addieren.Einfache Adressierungsmodi f\u00fcr Code[edit]Absolut oder direkt[edit] +----+------------------------------+ |jump| address | +----+------------------------------+ (Effective PC address = address)Die effektive Adresse f\u00fcr eine absolute Befehlsadresse ist der Adressparameter selbst ohne \u00c4nderungen.PC-relativ[edit] +----+------------------------------+ |jump| offset | jump relative +----+------------------------------+ (Effective PC address = next instruction address + offset, offset may be negative)Die effektive Adresse f\u00fcr eine PC-relative Befehlsadresse ist der Versatzparameter, der zur Adresse des n\u00e4chsten Befehls hinzugef\u00fcgt wird. Dieser Offset wird normalerweise signiert, um sowohl vor als auch nach der Anweisung auf Code verweisen zu k\u00f6nnen.Dies ist besonders n\u00fctzlich in Verbindung mit Spr\u00fcngen, da typische Spr\u00fcnge zu Anweisungen in der N\u00e4he f\u00fchren (meistens in einer Hochsprache) wenn oder w\u00e4hrend Aussagen sind ziemlich kurz). Messungen tats\u00e4chlicher Programme legen nahe, dass ein 8- oder 10-Bit-Offset gro\u00df genug f\u00fcr etwa 90% der bedingten Spr\u00fcnge ist (ungef\u00e4hr \u00b1 128 oder \u00b1 512 Bytes).[11]Ein weiterer Vorteil der PC-relativen Adressierung besteht darin, dass der Code positionsunabh\u00e4ngig sein kann, dh er kann \u00fcberall im Speicher geladen werden, ohne dass Adressen angepasst werden m\u00fcssen.Einige Versionen dieses Adressierungsmodus k\u00f6nnen bedingt sein und sich auf zwei Register (“Sprung, wenn reg1 = reg2”), ein Register (“Sprung, wenn nicht reg1 = 0”) oder keine Register beziehen, implizit auf ein zuvor gesetztes Bit im Statusregister . Siehe auch bedingte Ausf\u00fchrung unten.Indirekt registrieren[edit] +-------+-----+ |jumpVia| reg | +-------+-----+ (Effective PC address = contents of register 'reg')Die effektive Adresse f\u00fcr einen indirekten Registerbefehl ist die Adresse im angegebenen Register. Zum Beispiel (A7), um auf den Inhalt des Adressregisters A7 zuzugreifen.Der Effekt besteht darin, die Kontrolle an den Befehl zu \u00fcbertragen, dessen Adresse sich im angegebenen Register befindet.Viele RISC-Maschinen sowie das CISC IBM System \/ 360 und seine Nachfolger verf\u00fcgen \u00fcber Anweisungen zum Aufrufen von Unterprogrammen, mit denen die R\u00fccksprungadresse in ein Adressregister gestellt wird. Der Register-indirekte Adressierungsmodus wird verwendet, um von diesem Unterprogrammaufruf zur\u00fcckzukehren.Sequentielle Adressierungsmodi[edit]Sequentielle Ausf\u00fchrung[edit] +------+ | nop | execute the following instruction +------+ (Effective PC address = next instruction address)Die CPU f\u00fchrt nach Ausf\u00fchrung eines sequentiellen Befehls sofort den folgenden Befehl aus.Die sequentielle Ausf\u00fchrung wird auf einigen Computern nicht als Adressierungsmodus angesehen.Die meisten Anweisungen auf den meisten CPU-Architekturen sind sequentielle Anweisungen. Da es sich bei den meisten Anweisungen um sequentielle Anweisungen handelt, f\u00fcgen CPU-Entwickler h\u00e4ufig Funktionen hinzu, die die Leistung der anderen Anweisungen – Verzweigungsanweisungen – absichtlich beeintr\u00e4chtigen, damit diese sequenziellen Anweisungen schneller ausgef\u00fchrt werden.Bedingte Verzweigungen laden den PC je nach Bedingung mit einem von zwei m\u00f6glichen Ergebnissen. Die meisten CPU-Architekturen verwenden einen anderen Adressierungsmodus f\u00fcr den Zweig “genommen” und eine sequentielle Ausf\u00fchrung f\u00fcr den Zweig “nicht genommen”.Viele Funktionen in modernen CPUs – Befehlsvorabruf und komplexeres Pipelineing, Ausf\u00fchrung au\u00dferhalb der Reihenfolge usw. – halten die Illusion aufrecht, dass jeder Befehl beendet wird, bevor der n\u00e4chste beginnt, und liefern dieselben Endergebnisse, auch wenn dies nicht genau das ist passiert intern.Jeder “Grundblock” solcher sequentiellen Anweisungen weist sowohl eine zeitliche als auch eine r\u00e4umliche Referenzlokalit\u00e4t auf.CPUs, die keine sequentielle Ausf\u00fchrung verwenden[edit]CPUs, die keine sequentielle Ausf\u00fchrung mit einem Programmz\u00e4hler verwenden, sind \u00e4u\u00dferst selten. In einigen CPUs gibt jeder Befehl immer die Adresse des n\u00e4chsten Befehls an. Solche CPUs haben einen Befehlszeiger, der diese angegebene Adresse enth\u00e4lt; Es handelt sich nicht um einen Programmz\u00e4hler, da keine Inkrementierung vorgesehen ist. Zu solchen CPUs geh\u00f6ren einige Drum-Memory-Computer wie der IBM 650, der SECD-Computer und der RTX 32P.[12]Andere Computerarchitekturen gehen viel weiter und versuchen, den von Neumann-Engpass mithilfe verschiedener Alternativen zum Programmz\u00e4hler zu umgehen.Bedingte Ausf\u00fchrung[edit]Einige Computerarchitekturen verf\u00fcgen \u00fcber bedingte Anweisungen (z. B. ARM, jedoch nicht mehr f\u00fcr alle Anweisungen im 64-Bit-Modus) oder Anweisungen zum bedingten Laden (z. B. x86), die in einigen F\u00e4llen bedingte Verzweigungen unn\u00f6tig machen und ein Leeren der Anweisungspipeline vermeiden k\u00f6nnen. Eine Anweisung wie “Vergleichen” wird verwendet, um einen Bedingungscode festzulegen, und nachfolgende Anweisungen enthalten einen Test f\u00fcr diesen Bedingungscode, um festzustellen, ob sie befolgt oder ignoriert werden.\u00dcberspringen[edit] +------+-----+-----+ |skipEQ| reg1| reg2| skip the next instruction if reg1=reg2 +------+-----+-----+ (Effective PC address = next instruction address + 1)Das \u00dcberspringen der Adressierung kann als eine spezielle Art des PC-relativen Adressierungsmodus mit einem festen Versatz von “+1” angesehen werden. Wie bei der PC-relativen Adressierung verf\u00fcgen einige CPUs \u00fcber Versionen dieses Adressierungsmodus, die sich nur auf ein Register (“\u00dcberspringen, wenn reg1 = 0”) oder auf keine Register beziehen und implizit auf ein zuvor gesetztes Bit im Statusregister verweisen. Andere CPUs haben eine Version, die ein bestimmtes Bit in einem bestimmten zu testenden Byte ausw\u00e4hlt (“\u00dcberspringen, wenn Bit 7 von reg12 0 ist”).Im Gegensatz zu allen anderen bedingten Verzweigungen muss ein Befehl “\u00dcberspringen” niemals die Befehlspipeline leeren, obwohl m\u00f6glicherweise der n\u00e4chste Befehl ignoriert werden muss.Einfache Adressierungsmodi f\u00fcr Daten[edit]Registrieren (oder direkt registrieren)[edit] +------+-----+-----+-----+ | mul | reg1| reg2| reg3| reg1\u00a0:= reg2 * reg3; +------+-----+-----+-----+Dieser “Adressierungsmodus” hat keine effektive Adresse und wird auf einigen Computern nicht als Adressierungsmodus angesehen.In diesem Beispiel befinden sich alle Operanden in Registern, und das Ergebnis wird in ein Register gestellt.Basis plus Offset und Variationen[edit]Dies wird manchmal als “Basis plus Verschiebung” bezeichnet. +------+-----+-----+----------------+ | load | reg | base| offset | reg\u00a0:= RAM[base + offset] +------+-----+-----+----------------+ (Effective address = offset + contents of specified base register)Der Offset ist normalerweise ein vorzeichenbehafteter 16-Bit-Wert (obwohl der 80386 ihn auf 32 Bit erweitert hat).Wenn der Versatz Null ist, wird dies ein Beispiel f\u00fcr indirekt registrieren Adressierung; Die effektive Adresse ist nur der Wert im Basisregister.Bei vielen RISC-Maschinen ist das Register 0 auf den Wert Null festgelegt. Wenn Register 0 als Basisregister verwendet wird, wird dies ein Beispiel f\u00fcr absolute Adressierung. Es kann jedoch nur auf einen kleinen Teil des Speichers zugegriffen werden (64 Kilobyte, wenn der Offset 16 Bit betr\u00e4gt).Der 16-Bit-Offset scheint im Verh\u00e4ltnis zur Gr\u00f6\u00dfe der aktuellen Computerspeicher sehr klein zu sein (weshalb der 80386 ihn auf 32-Bit erweitert hat). Es k\u00f6nnte schlimmer sein: IBM System \/ 360-Mainframes haben nur einen vorzeichenlosen 12-Bit-Offset. Es gilt jedoch das Prinzip der Referenzlokalit\u00e4t: Innerhalb kurzer Zeit sind die meisten Datenelemente, auf die ein Programm zugreifen m\u00f6chte, ziemlich nahe beieinander.Dieser Adressierungsmodus ist eng mit dem indizierten absoluten Adressierungsmodus verbunden.Beispiel 1: Innerhalb eines Unterprogramms interessiert sich ein Programmierer haupts\u00e4chlich f\u00fcr die Parameter und die lokalen Variablen, die selten 64 KB \u00fcberschreiten und f\u00fcr die ein Basisregister (der Rahmenzeiger) ausreicht. Wenn diese Routine eine Klassenmethode in einer objektorientierten Sprache ist, wird ein zweites Basisregister ben\u00f6tigt, das auf die Attribute f\u00fcr das aktuelle Objekt zeigt (diese oder selbst in einigen Hochsprachen).Beispiel 2: Wenn das Basisregister die Adresse eines zusammengesetzten Typs (eines Datensatzes oder einer Struktur) enth\u00e4lt, kann der Versatz verwendet werden, um ein Feld aus diesem Datensatz auszuw\u00e4hlen (die meisten Datens\u00e4tze \/ Strukturen sind kleiner als 32 kB).Sofort \/ w\u00f6rtlich[edit] +------+-----+-----+----------------+ | add | reg1| reg2| constant | reg1\u00a0:= reg2 + constant; +------+-----+-----+----------------+Dieser “Adressierungsmodus” hat keine effektive Adresse und wird auf einigen Computern nicht als Adressierungsmodus angesehen.Die Konstante kann signiert oder nicht signiert sein. Zum Beispiel, move.l #$FEEDABBA, D0 um den unmittelbaren Hex-Wert von “FEEDABBA” in das Register D0 zu verschieben.Anstatt einen Operanden aus dem Speicher zu verwenden, wird der Wert des Operanden im Befehl selbst gespeichert. Auf der DEC VAX-Maschine k\u00f6nnen die Literalenoperandengr\u00f6\u00dfen 6, 8, 16 oder 32 Bit lang sein.Andrew Tanenbaum zeigte, dass 98% aller Konstanten in einem Programm in 13 Bit passen w\u00fcrden (siehe RISC-Designphilosophie).Implizit[edit] +-----------------+ | clear carry bit | +-----------------+ +-------------------+ | clear Accumulator | +-------------------+Der implizite Adressierungsmodus, auch impliziter Adressierungsmodus (X86-Assemblersprache) genannt, gibt weder f\u00fcr die Quelle noch f\u00fcr das Ziel (oder manchmal f\u00fcr beide) explizit eine effektive Adresse an.Entweder die effektive Quelladresse (falls vorhanden) oder die effektive Zieladresse (oder manchmal beides) wird durch den Opcode impliziert.Die implizite Adressierung war auf \u00e4lteren Computern (bis Mitte der 1970er Jahre) weit verbreitet. Solche Computer hatten typischerweise nur ein einziges Register, in dem Arithmetik ausgef\u00fchrt werden konnte – den Akkumulator. Solche Akkumulatormaschinen verweisen implizit in fast jedem Befehl auf diesen Akkumulator. Zum Beispiel die Operation < a\u00a0:= b + c; > kann mit der Sequenz durchgef\u00fchrt werden < load b; add c; store a; > – Das Ziel (der Akkumulator) ist in jeder Anweisung “Laden” und “Hinzuf\u00fcgen” enthalten. Die Quelle (der Akkumulator) ist in jeder “Speicher” -Anweisung enthalten.Sp\u00e4tere Computer hatten im Allgemeinen mehr als ein Universalregister oder einen RAM-Speicherort, der die Quelle oder das Ziel oder beides f\u00fcr die Arithmetik sein kann. Daher ben\u00f6tigen sp\u00e4tere Computer einen anderen Adressierungsmodus, um die Quelle und das Ziel der Arithmetik anzugeben.Unter den x86-Befehlen verwenden einige implizite Register f\u00fcr einen der Operanden oder Ergebnisse (Multiplikation, Division, Z\u00e4hlen des bedingten Sprungs).Viele Computer (wie x86 und AVR) haben ein spezielles Register, das als Stapelzeiger bezeichnet wird und implizit inkrementiert oder dekrementiert wird, wenn Daten vom Stapel gepusht oder gepoppt werden, und die effektive Quell- oder Zieladresse ist (implizit) die darin gespeicherte Adresse Stapelzeiger.Viele 32-Bit-Computer (wie 68000, ARM oder PowerPC) verf\u00fcgen \u00fcber mehr als ein Register, das als Stapelzeiger verwendet werden kann. Verwenden Sie daher den Adressierungsmodus “Register Autoincrement Indirect”, um anzugeben, welches dieser Register wann verwendet werden soll Daten von einem Stapel verschieben oder abrufen.Einige aktuelle Computerarchitekturen (z. B. IBM \/ 390 und Intel Pentium) enthalten einige Anweisungen mit impliziten Operanden, um die Abw\u00e4rtskompatibilit\u00e4t mit fr\u00fcheren Designs zu gew\u00e4hrleisten.Auf vielen Computern geben Anweisungen, die das Benutzer- \/ Systemmodusbit, das Interrupt-Aktivierungsbit usw. umdrehen, implizit das spezielle Register an, das diese Bits enth\u00e4lt. Dies vereinfacht die Hardware, die zum Abfangen dieser Anweisungen erforderlich ist, um die Virtualisierungsanforderungen von Popek und Goldberg zu erf\u00fcllen. Auf einem solchen System muss die Trap-Logik keinen Operanden (oder die endg\u00fcltige effektive Adresse), sondern nur den Opcode anzeigen .Es wurden einige CPUs entwickelt, bei denen jeder Operand in jedem Befehl implizit angegeben wird – CPUs mit Nulloperanden.Andere Adressierungsmodi f\u00fcr Code oder Daten[edit]Absolut \/ direkt[edit] +------+-----+--------------------------------------+ | load | reg | address | +------+-----+--------------------------------------+ (Effective address = address as given in instruction)Dies erfordert Platz in einer Anweisung f\u00fcr eine ziemlich gro\u00dfe Adresse. Es ist h\u00e4ufig auf CISC-Computern mit Anweisungen variabler L\u00e4nge verf\u00fcgbar, z. B. x86.Einige RISC-Maschinen haben eine spezielle Oberes Literal laden Befehl, der eine 16- oder 20-Bit-Konstante in die obere H\u00e4lfte eines Registers setzt. Dies kann dann als Basisregister in einem Adressierungsmodus mit Basis-Plus-Offset verwendet werden, der die niederwertigen 16 oder 12 Bits liefert. Die Kombination erm\u00f6glicht eine vollst\u00e4ndige 32-Bit-Adresse.Indiziert absolut[edit] +------+-----+-----+--------------------------------+ | load | reg |index| address | +------+-----+-----+--------------------------------+ (Effective address = address + contents of specified index register)Dies erfordert auch Platz in einer Anweisung f\u00fcr eine ziemlich gro\u00dfe Adresse. Die Adresse k\u00f6nnte der Anfang eines Arrays oder Vektors sein, und der Index k\u00f6nnte das bestimmte erforderliche Array-Element ausw\u00e4hlen. Der Prozessor kann das Indexregister skalieren, um die Gr\u00f6\u00dfe jedes Array-Elements zu ber\u00fccksichtigen.Beachten Sie, dass dies mehr oder weniger dem Adressierungsmodus mit Basis plus Offset entspricht, mit der Ausnahme, dass der Offset in diesem Fall gro\u00df genug ist, um einen beliebigen Speicherort zu adressieren.Beispiel 1: Innerhalb einer Unterroutine kann ein Programmierer eine Zeichenfolge als lokale Konstante oder statische Variable definieren. Die Adresse der Zeichenfolge wird in der Literaladresse in der Anweisung gespeichert. Der Offset – welches Zeichen der Zeichenfolge f\u00fcr diese Iteration einer Schleife verwendet werden soll – wird im Indexregister gespeichert.Beispiel 2: Ein Programmierer kann mehrere gro\u00dfe Arrays als globale oder als Klassenvariablen definieren. Der Start des Arrays wird in der Literaladresse (m\u00f6glicherweise beim Laden des Programms durch einen verschiebenden Loader ge\u00e4ndert) der Anweisung gespeichert, die darauf verweist. Der Offset – welches Element aus dem Array f\u00fcr diese Iteration einer Schleife verwendet werden soll – wird im Indexregister gespeichert. Oft verwenden die Anweisungen in einer Schleife dasselbe Register f\u00fcr den Schleifenz\u00e4hler und die Offsets mehrerer Arrays erneut.Basis plus Index[edit] +------+-----+-----+-----+ | load | reg | base|index| +------+-----+-----+-----+ (Effective address = contents of specified base register + contents of specified index register)Das Basisregister k\u00f6nnte die Startadresse eines Arrays oder Vektors enthalten, und der Index k\u00f6nnte das bestimmte erforderliche Array-Element ausw\u00e4hlen. Der Prozessor kann das Indexregister skalieren, um die Gr\u00f6\u00dfe jedes Array-Elements zu ber\u00fccksichtigen. Dies kann f\u00fcr den Zugriff auf Elemente eines als Parameter \u00fcbergebenen Arrays verwendet werden.Basis plus Index plus Offset[edit] +------+-----+-----+-----+----------------+ | load | reg | base|index| offset | +------+-----+-----+-----+----------------+ (Effective address = offset + contents of specified base register + contents of specified index register)Das Basisregister k\u00f6nnte die Startadresse eines Arrays oder eines Vektors von Datens\u00e4tzen enthalten, der Index k\u00f6nnte den bestimmten erforderlichen Datensatz ausw\u00e4hlen und der Versatz k\u00f6nnte ein Feld innerhalb dieses Datensatzes ausw\u00e4hlen. Der Prozessor kann das Indexregister skalieren, um die Gr\u00f6\u00dfe jedes Array-Elements zu ber\u00fccksichtigen.Skaliert[edit] +------+-----+-----+-----+ | load | reg | base|index| +------+-----+-----+-----+ (Effective address = contents of specified base register + scaled contents of specified index register)Das Basisregister k\u00f6nnte die Startadresse eines Arrays oder einer Vektordatenstruktur enthalten, und der Index k\u00f6nnte den Versatz des einen bestimmten erforderlichen Array-Elements enthalten.Dieser Adressierungsmodus skaliert den Wert im Indexregister dynamisch, um die Gr\u00f6\u00dfe jedes Array-Elements zu ber\u00fccksichtigen. Wenn es sich bei den Array-Elementen beispielsweise um Gleitkommazahlen mit doppelter Genauigkeit handelt, die jeweils 8 Byte belegen, wird der Wert im Indexregister vor dem Multiplizieren mit 8 multipliziert wird bei der effektiven Adressberechnung verwendet. Der Skalierungsfaktor ist normalerweise auf eine Zweierpotenz beschr\u00e4nkt, so dass eine Verschiebung anstelle einer Multiplikation verwendet werden kann.Indirekt registrieren[edit] +------+------+-----+ | load | reg1 | base| +------+------+-----+ (Effective address = contents of base register)Einige Computer haben dies als eindeutigen Adressierungsmodus. Viele Computer verwenden nur Basis plus Offset mit einem Versatzwert von 0. Zum Beispiel (A7)Registrieren Sie die automatische Inkrementierung indirekt[edit] +------+-----+-------+ | load | reg | base | +------+-----+-------+ (Effective address = contents of base register)Nach dem Bestimmen der effektiven Adresse wird der Wert im Basisregister um die Gr\u00f6\u00dfe des Datenelements erh\u00f6ht, auf das zugegriffen werden soll. Zum Beispiel w\u00fcrde (A7) + auf den Inhalt des Adressregisters A7 zugreifen und dann den Adresszeiger von A7 um 1 erh\u00f6hen (normalerweise 1 Wort). Innerhalb einer Schleife kann dieser Adressierungsmodus verwendet werden, um alle Elemente eines Arrays oder Vektors zu durchlaufen.In Hochsprachen wird oft angenommen, dass Funktionen, die ein Ergebnis zur\u00fcckgeben, keine Nebenwirkungen haben sollten (fehlende Nebenwirkungen erleichtern das Verst\u00e4ndnis und die Validierung des Programms erheblich). Dieser Adressierungsmodus hat den Nebeneffekt, dass das Basisregister ge\u00e4ndert wird. Wenn der nachfolgende Speicherzugriff einen Fehler verursacht (z. B. Seitenfehler, Busfehler, Adressfehler), der zu einem Interrupt f\u00fchrt, wird das Neustarten des Befehls viel problematischer, da ein oder mehrere Register m\u00f6glicherweise auf den Zustand zur\u00fcckgesetzt werden m\u00fcssen, in dem sie sich zuvor befanden Die Anweisung wurde urspr\u00fcnglich gestartet.Es gab mindestens zwei Computerarchitekturen, bei denen Implementierungsprobleme hinsichtlich der Wiederherstellung nach Interrupts aufgetreten sind, wenn dieser Adressierungsmodus verwendet wird:Motorola 68000 (Adresse wird in 24 Bit dargestellt). K\u00f6nnte ein oder zwei Autoincrement-Registeroperanden haben. Der 68010+ l\u00f6ste das Problem, indem er den internen Status des Prozessors bei Bus- oder Adressfehlern speicherte.DEC VAX. Kann bis zu 6 Autoincrement-Registeroperanden haben. Jeder Operandenzugriff kann zwei Seitenfehler verursachen (wenn Operanden zuf\u00e4llig eine Seitengrenze \u00fcberspannen). Nat\u00fcrlich kann der Befehl selbst \u00fcber 50 Byte lang sein und sich auch \u00fcber eine Seitengrenze erstrecken!Registrieren Sie die automatische Dekrementierung indirekt[edit] +------+-----+-----+ | load | reg | base| +------+-----+-----+ (Effective address = new contents of base register)Vor dem Bestimmen der effektiven Adresse wird der Wert im Basisregister um die Gr\u00f6\u00dfe des Datenelements dekrementiert, auf das zugegriffen werden soll.Innerhalb einer Schleife kann dieser Adressierungsmodus verwendet werden, um alle Elemente eines Arrays oder Vektors r\u00fcckw\u00e4rts zu durchlaufen. Ein Stapel kann implementiert werden, indem dieser Modus in Verbindung mit dem vorherigen Adressierungsmodus (automatische Inkrementierung) verwendet wird.Siehe die Diskussion der Nebenwirkungen im Adressierungsmodus f\u00fcr die automatische Inkrementierung.Speicher indirekt[edit]Jeder der in diesem Artikel erw\u00e4hnten Adressierungsmodi kann ein zus\u00e4tzliches Bit enthalten, um die indirekte Adressierung anzuzeigen, dh die unter Verwendung eines bestimmten Modus berechnete Adresse ist tats\u00e4chlich die Adresse eines Ortes (normalerweise ein vollst\u00e4ndiges Wort), der die tats\u00e4chliche effektive Adresse enth\u00e4lt.Die indirekte Adressierung kann f\u00fcr Code oder Daten verwendet werden. Es kann die Umsetzung von machen Zeiger, Verweise, oder Griffe viel einfacher und kann es auch einfacher machen, Unterprogramme aufzurufen, die ansonsten nicht adressierbar sind. Die indirekte Adressierung f\u00fchrt aufgrund des zus\u00e4tzlichen Speicherzugriffs zu Leistungseinbu\u00dfen.Einige fr\u00fche Minicomputer (z. B. DEC PDP-8, Data General Nova) hatten nur wenige Register und nur einen begrenzten Adressierungsbereich (8 Bit). Daher war die Verwendung der indirekten Speicheradressierung fast die einzige M\u00f6glichkeit, sich auf eine signifikante Speichermenge zu beziehen.PC-relativ[edit] +------+------+---------+----------------+ | load | reg1 | base=PC | offset | +------+------+---------+----------------+ reg1\u00a0:= RAM[PC + offset] (Effective address = PC + offset)Der PC-relative Adressierungsmodus kann verwendet werden, um ein Register mit einem Wert zu laden, der im Programmspeicher in kurzer Entfernung vom aktuellen Befehl gespeichert ist. Dies kann als Sonderfall des Adressierungsmodus “Basis plus Offset” angesehen werden, bei dem der Programmz\u00e4hler (PC) als “Basisregister” ausgew\u00e4hlt wird.Es gibt einige CPUs, die PC-bezogene Datenreferenzen unterst\u00fctzen. Solche CPUs umfassen:Der MOS 6502 und seine Ableitungen verwendeten die relative Adressierung f\u00fcr alle Verzweigungsbefehle. Nur diese Anweisungen verwendeten diesen Modus, Spr\u00fcnge verwendeten eine Vielzahl anderer Adressierungsmodi.Die x86-64-Architektur und die 64-Bit-ARMv8-A-Architektur[13] haben PC-relative Adressierungsmodi, die in x86-64 als “RIP-relativ” und in ARMv8-A als “literal” bezeichnet werden. Das Motorola 6809 unterst\u00fctzt auch einen PC-relativen Adressierungsmodus.Die PDP-11-Architektur, die VAX-Architektur und die 32-Bit-ARM-Architektur unterst\u00fctzen die PC-relative Adressierung, indem der PC in der Registerdatei enthalten ist.Wenn dieser Adressierungsmodus verwendet wird, platziert der Compiler die Konstanten normalerweise unmittelbar vor oder unmittelbar nach der Subroutine, die sie verwendet, in einem Literalpool, um zu verhindern, dass diese Konstanten versehentlich als Anweisungen ausgef\u00fchrt werden.Dieser Adressierungsmodus, der immer Daten aus dem Speicher abruft oder Daten im Speicher speichert und dann nacheinander durchf\u00e4llt, um den n\u00e4chsten Befehl auszuf\u00fchren (die effektive Adresse zeigt auf Daten), sollte nicht mit “PC-relativer Zweig” verwechselt werden, der keine Daten abruft von oder speichern Sie Daten im Speicher, sondern verzweigen stattdessen zu einem anderen Befehl mit dem angegebenen Versatz (die effektive Adresse zeigt auf einen ausf\u00fchrbaren Befehl).Veraltete Adressierungsmodi[edit]Die hier aufgef\u00fchrten Adressierungsmodi wurden in der Zeit von 1950 bis 1980 verwendet, sind jedoch auf den meisten aktuellen Computern nicht mehr verf\u00fcgbar. Diese Liste ist keineswegs vollst\u00e4ndig; Von Zeit zu Zeit wurden viele andere interessante und eigenartige Adressierungsmodi verwendet, z. B. das Absolut-Minus-Logische ODER von zwei oder drei Indexregistern.[14][15]Mehrstufiger Speicher indirekt[edit]Wenn die Wortgr\u00f6\u00dfe gr\u00f6\u00dfer als die Adresse ist, kann f\u00fcr das Wort, auf das f\u00fcr die speicherindirekte Adressierung verwiesen wird, selbst ein indirektes Flag gesetzt werden, um einen anderen indirekten Speicherzyklus anzuzeigen. Dieses Flag wird als bezeichnet Indirektionsbitund der resultierende Zeiger ist ein markierter Zeiger, wobei das Indirektionsbit markiert, ob es ein direkter Zeiger oder ein indirekter Zeiger ist. Es ist darauf zu achten, dass sich eine Kette indirekter Adressen nicht auf sich selbst bezieht. Wenn dies der Fall ist, kann beim Versuch, eine Adresse aufzul\u00f6sen, eine Endlosschleife auftreten.Der IBM 1620, der Data General Nova, die HP 2100-Serie und der NAR 2 verf\u00fcgen jeweils \u00fcber einen solchen indirekten mehrstufigen Speicher und k\u00f6nnten in eine solche unendliche Adressberechnungsschleife eintreten. Der Speicher-indirekte Adressierungsmodus auf dem Nova beeinflusste die Erfindung des indirekten Thread-Codes.Der DEC PDP-10-Computer mit 18-Bit-Adressen und 36-Bit-W\u00f6rtern erm\u00f6glichte eine mehrstufige indirekte Adressierung mit der M\u00f6glichkeit, in jeder Stufe auch ein Indexregister zu verwenden.Speicherabgebildete Register[edit]Auf einigen Computern wurde angenommen, dass die Register die ersten 8 oder 16 W\u00f6rter des Speichers belegen (z. B. ICL 1900, DEC PDP-10). Dies bedeutete, dass kein separater Befehl “Register zum Registrieren hinzuf\u00fcgen” erforderlich war – man konnte einfach den Befehl “Speicher zum Registrieren hinzuf\u00fcgen” verwenden.Bei fr\u00fchen Modellen des PDP-10, die keinen Cache-Speicher hatten, lief eine enge innere Schleife, die in die ersten paar W\u00f6rter des Speichers geladen wurde (wo die schnellen Register bei Installation adressierbar waren), viel schneller als in Magnetkernspeicher.Sp\u00e4tere Modelle der DEC PDP-11-Serie haben die Register auf Adressen im Eingabe- \/ Ausgabebereich abgebildet, dies sollte jedoch in erster Linie eine Ferndiagnose erm\u00f6glichen. Verwirrenderweise wurden die 16-Bit-Register auf aufeinanderfolgende 8-Bit-Byteadressen abgebildet.Speicher indirekt und automatisch erh\u00f6ht[edit]Der DEC PDP-8-Minicomputer hatte acht spezielle Standorte (an den Adressen 8 bis 15). Beim Zugriff \u00fcber die indirekte Speicheradressierung werden diese Speicherorte nach der Verwendung automatisch erh\u00f6ht.[16] Dies machte es einfach, den Speicher in einer Schleife zu durchlaufen, ohne dass Register verwendet werden mussten, um die Schritte zu handhaben.Der Data General Nova-Minicomputer hatte 16 spezielle Speicherpl\u00e4tze an den Adressen 16 bis 31.[17] Beim Zugriff \u00fcber die indirekte Speicheradressierung werden 16 bis 23 vor der Verwendung automatisch erh\u00f6ht, und 24 bis 31 werden vor der Verwendung automatisch verringert.Nullseite[edit]Die Prozessoren Data General Nova, Motorola 6800 und MOS Technology 6502 hatten nur sehr wenige interne Register. Arithmetische und logische Anweisungen wurden haupts\u00e4chlich f\u00fcr Werte im Speicher im Gegensatz zu internen Registern ausgef\u00fchrt. Infolgedessen erforderten viele Befehle einen Zwei-Byte-Speicherort (16 Bit) im Speicher. Da Opcodes auf diesen Prozessoren nur ein Byte (8 Bit) lang waren, k\u00f6nnten Speicheradressen einen wesentlichen Teil der Codegr\u00f6\u00dfe ausmachen.Die Entwickler dieser Prozessoren enthielten eine teilweise Abhilfe, die als “Nullseiten” -Adressierung bekannt ist. Auf die anf\u00e4nglichen 256 Bytes Speicher ($ 0000 – $ 00FF; auch bekannt als Seite “0”) kann mit einer absoluten oder indizierten 1-Byte-Speicheradresse zugegriffen werden. Dies reduzierte die Befehlsausf\u00fchrungszeit um einen Taktzyklus und die Befehlsl\u00e4nge um ein Byte. Durch das Speichern h\u00e4ufig verwendeter Daten in dieser Region k\u00f6nnten Programme kleiner und schneller gemacht werden.Infolgedessen wurde die Nullseite \u00e4hnlich wie eine Registerdatei verwendet. Auf vielen Systemen f\u00fchrte dies jedoch zu einer hohen Auslastung des Nullseiten-Speicherbereichs durch das Betriebssystem und Benutzerprogramme, was seine Verwendung einschr\u00e4nkte, da der freie Speicherplatz begrenzt war.Direkte Seite[edit]Der Nullseitenadressmodus wurde in mehreren sp\u00e4ten 8-Bit-Prozessoren des Modells verbessert, darunter der WDC 65816, der CSG 65CE02 und das Motorola 6809. Der neue Modus, der als “direkte Seitenadressierung” bezeichnet wird, bietet die M\u00f6glichkeit, die 256- zu verschieben. Byte-Null-Seiten-Speicherfenster vom Speicheranfang (Offset-Adresse $ 0000) bis zu einem neuen Speicherort innerhalb der ersten 64 KB Speicher.Mit dem CSG 65CE02 konnte die direkte Seite an eine beliebige 256-Byte-Grenze innerhalb der ersten 64 KB Speicher verschoben werden, indem ein 8-Bit-Versatzwert im neuen Basisseitenregister (B) gespeichert wurde. Das Motorola 6809 k\u00f6nnte dasselbe mit seinem DP-Register (Direct Page) tun. Das WDC 65816 ging noch einen Schritt weiter und erm\u00f6glichte das Verschieben der Direktseite an eine beliebige Stelle innerhalb der ersten 64 KB Speicher, indem ein 16-Bit-Offsetwert im neuen Direktregister (D) gespeichert wurde.Infolgedessen konnte eine gr\u00f6\u00dfere Anzahl von Programmen den erweiterten direkten Seitenadressierungsmodus im Vergleich zu \u00e4lteren Prozessoren verwenden, die nur den Nullseitenadressierungsmodus enthielten.Skalierter Index mit \u00dcberpr\u00fcfung der Grenzen[edit]Dies \u00e4hnelt der skalierten Indexadressierung, au\u00dfer dass der Befehl zwei zus\u00e4tzliche Operanden (normalerweise Konstanten) enth\u00e4lt und die Hardware pr\u00fcft, ob der Indexwert zwischen diesen Grenzen liegt.Eine andere Variante verwendet Vektordeskriptoren, um die Grenzen zu halten. Dies macht es einfach, dynamisch zugewiesene Arrays zu implementieren und dennoch die vollst\u00e4ndigen Grenzen zu \u00fcberpr\u00fcfen.Indirekt zum Bitfeld innerhalb des Wortes[edit]Einige Computer hatten spezielle indirekte Adressierungsmodi f\u00fcr Unterfelder innerhalb von W\u00f6rtern.Das Zeichen der GE \/ Honeywell 600-Serie, das ein indirektes Wort adressiert, spezifizierte entweder 6-Bit- oder 9-Bit-Zeichenfelder innerhalb seines 36-Bit-Wortes.Der ebenfalls 36-Bit-DEC-PDP-10 verf\u00fcgte \u00fcber spezielle Anweisungen, mit denen der Speicher als Folge von Bitfeldern fester Gr\u00f6\u00dfe oder Bytes beliebiger Gr\u00f6\u00dfe von 1 Bit bis 36 Bit behandelt werden konnte. Ein Ein-Wort-Sequenzdeskriptor im Speicher, der als “Bytezeiger” bezeichnet wird, enthielt die aktuelle Wortadresse innerhalb der Sequenz, eine Bitposition innerhalb eines Wortes und die Gr\u00f6\u00dfe jedes Bytes.Es gab Anweisungen zum Laden und Speichern von Bytes \u00fcber diesen Deskriptor und zum Inkrementieren des Deskriptors, um auf das n\u00e4chste Byte zu zeigen (Bytes wurden nicht \u00fcber Wortgrenzen hinweg aufgeteilt). Viele DEC-Programme verwendeten f\u00fcnf 7-Bit-Bytes pro Wort (einfache ASCII-Zeichen), wobei ein Bit pro Wort nicht verwendet wurde. Implementierungen von C mussten vier 9-Bit-Bytes pro Wort verwenden, da die ‘malloc’-Funktion in C davon ausgeht, dass die Gr\u00f6\u00dfe von a int ist ein Vielfaches der Gr\u00f6\u00dfe von a verkohlen;;[18] Das tats\u00e4chliche Vielfache wird durch die systemabh\u00e4ngige Operatorgr\u00f6\u00dfe f\u00fcr die Kompilierungszeit bestimmt.Index n\u00e4chste Anweisung[edit]Der Elliott 503,[19] der Elliott 803,[19][20] und der Apollo Guidance Computer verwendete nur die absolute Adressierung und hatte keine Indexregister. Daher wurden indirekte Spr\u00fcnge oder Spr\u00fcnge durch Register im Befehlssatz nicht unterst\u00fctzt. Stattdessen k\u00f6nnte es angewiesen werden F\u00fcgen Sie den Inhalt des aktuellen Speicherworts zur n\u00e4chsten Anweisung hinzu. Das Hinzuf\u00fcgen eines kleinen Werts zur n\u00e4chsten auszuf\u00fchrenden Anweisung kann beispielsweise a \u00e4ndern JUMP 0 in ein JUMP 20Dadurch wird der Effekt eines indizierten Sprungs erzeugt. Beachten Sie, dass die Anweisung im laufenden Betrieb ge\u00e4ndert wird und im Speicher unver\u00e4ndert bleibt, dh es handelt sich nicht um selbstmodifizierenden Code. Wenn der Wert, der zur n\u00e4chsten Anweisung hinzugef\u00fcgt wird, gro\u00df genug ist, kann der Opcode dieser Anweisung sowie oder anstelle der Adresse ge\u00e4ndert werden.Glossar[edit]IndirektDaten, auf die durch einen Zeiger oder eine Adresse verwiesen wird.SofortigDaten, die direkt in eine Anweisungs- oder Befehlsliste eingebettet sind.IndexEin dynamischer Offset, der normalerweise in einem Indexregister gespeichert ist und m\u00f6glicherweise durch eine Objektgr\u00f6\u00dfe skaliert wird.OffsetEin sofortiger Mehrwert f\u00fcr eine Adresse; zB entsprechend dem Strukturfeldzugriff in der Programmiersprache C.RelativEine Adresse, die relativ zu einer anderen Adresse gebildet wird.Post-InkrementDas Schritt einer Adresse nach verwendeten Daten, \u00e4hnlich wie *p++ in der Programmiersprache C, die f\u00fcr Stack-Pop-Operationen verwendet wird.VorabnahmeDas Dekrementieren einer Adresse vor der Verwendung, \u00e4hnlich wie *--p in der Programmiersprache C, die f\u00fcr Stack-Push-Operationen verwendet wird.Siehe auch[edit]Verweise[edit]^ F. Chow; S. Correll; M. Himelstein; E. Killian; L. Weber (1987). “Wie viele Adressierungsmodi sind genug?”.^ John L. Hennessy; Mark A. Horowitz (1986). “Ein \u00dcberblick \u00fcber das MIPS-X-MP-Projekt” (PDF). … MIPS-X verwendet einen einzelnen Adressierungsmodus: Basisregister plus Offset. Dieser einfache Adressierungsmodus erm\u00f6glicht es, die Berechnung der effektiven Adresse sehr fr\u00fch zu beginnen …^ Dr. Jon Squire. “Vorlesung 19, Pipelining-Datenweiterleitung”. CS411 Ausgew\u00e4hlte Vorlesungsunterlagen.^ “High Performance Computing, Notizen der Klasse 11 (15. und 20. September 2000) – Pipelining”. Archiviert von das Original am 27.12.2013. Abgerufen 08.02.2014.^ John Paul Shen, Mikko H. Lipasti (2004). Modernes Prozessordesign. McGraw-Hill Professional. ISBN 9780070570641.^ ein b John L. Hennessy; David A. Patterson (2002-05-29). Computerarchitektur: Ein quantitativer Ansatz. p. 104. ISBN 9780080502526. Der C54x verf\u00fcgt \u00fcber 17 Datenadressierungsmodi, wobei der Registerzugriff nicht ber\u00fccksichtigt wird. Die vier in MIPS gefundenen Modi machen jedoch 70% der Modi aus. Autoincrement und Autodecrement, die in einigen RISC-Architekturen zu finden sind, machen weitere 25% der Nutzung aus. Diese Daten wurden aus einer Messung statischer Anweisungen f\u00fcr die C-aufrufbare Bibliothek von 54 DSP-Routinen gesammelt, die in Assemblersprache codiert sind.^ Dr. Sofi\u00e8ne Tahar. “Befehlssatzprinzipien: Adressierungsmodusverwendung (Zusammenfassung)” (PDF). Archiviert von das Original (PDF) am 30.09.2011. 3 Programme gemessen an der Maschine mit allen Adressmodi (VAX) … 75% Verschiebung und sofort^ Ali-Reza Adl-Tabatabai; Geoff Langdale; Steven Lucco; Robert Wahbe (1995). “Effiziente und sprachunabh\u00e4ngige mobile Programme”. 79% aller ausgef\u00fchrten Befehle k\u00f6nnten durch RISC-Befehle ersetzt oder unter Verwendung nur einer einfachen Blockbefehlskombination zu RISC-Befehlen synthetisiert werden.^ Funktionsprinzipien von IBM System \/ 360 (PDF). IBM. September 1968. p. 135. A22-6821-7. Abgerufen 12. Juli 2019.^ z \/ Funktionsprinzipien der Architektur (PDF). IBM. September 2017. S. 7\u2013266. SA22-7832-11. Abgerufen 12. Juli 2019.^ Kong, Shing; Patterson, David (1995). “Befehlssatzdesign”. Folie 27.^ Koopman, Philip (1989). “Architektur des RTX 32P”. Computer stapeln.^ “Einf\u00fchrung in die 64-Bit-Architektur von ARMv8”. UIC Academy. quequero.org. 9. April 2014.^ 704 Bedienungsanleitung der elektronischen Datenverarbeitungsmaschine (PDF). IBM. 1955. S. 10\u201311.^ Referenzhandbuch IBM 7090 Datenverarbeitungssystem (PDF). IBM. 1962. S. 9\u201310.^ Jones, Douglas, Referenzanweisungen f\u00fcr den PDP-8abgerufen 1. Juli 2013^ Freund, Carl, Daten Allgemeiner NOVA-Befehlssatz – Zusammenfassungabgerufen 1. Juli 2013^ “C Referenz: Funktion malloc ()”^ ein b Dave Brooks. “Einige alte Computer”.^ Bill Purvis. “Einige Details der Elliott 803B-Hardware”Externe Links[edit] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4"},{"@context":"http:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/wiki.edu.vn\/wiki18\/#breadcrumbitem","name":"Enzyklop\u00e4die"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/wiki.edu.vn\/wiki18\/2021\/01\/04\/adressierungsmodus-wikipedia\/#breadcrumbitem","name":"Adressierungsmodus – Wikipedia"}}]}]