Offset (Informatik) - Offset (computer science)

In der Informatik ist ein Versatz innerhalb eines Arrays oder eines anderen Datenstrukturobjekts eine Ganzzahl , die den Abstand (Verschiebung) zwischen dem Anfang des Objekts und einem bestimmten Element oder Punkt angibt, vermutlich innerhalb desselben Objekts. Das Konzept einer Entfernung ist nur gültig, wenn alle Elemente des Objekts dieselbe Größe haben (normalerweise in Bytes oder Wörtern angegeben ).

Beispielsweise hat in A als Array von Zeichen "abcdef" , die enthalten , das vierte Element, das das Zeichen enthält , 'd' vom Anfang an einen Versatz von drei A .

In Assemblersprache

In der Computertechnik und in der Programmierung auf niedriger Ebene (z. B. Assemblersprache ) bezeichnet ein Offset normalerweise die Anzahl der Adresspositionen, die einer Basisadresse hinzugefügt wurden , um zu einer bestimmten absoluten Adresse zu gelangen . In dieser (ursprünglichen) Bedeutung des Versatzes wird nur die Basisadresseinheit, normalerweise das 8-Bit- Byte , verwendet, um die Größe des Versatzes anzugeben. In diesem Zusammenhang wird ein Offset manchmal als relative Adresse bezeichnet .

In IBM System / 360 -Anweisungen lieferte ein in bestimmte Anweisungen eingebetteter 12-Bit-Offset einen Bereich zwischen 0 und 4096 Byte. Beispielsweise lieferte innerhalb eines bedingungslosen Verzweigungsbefehls (X'47F0Fxxx ') der hexadezimale Versatz von xxx 12 Bit den Byte-Versatz vom Basisregister (15) zum Verzweigen. Ein ungerader Offset würde eine Programmprüfung verursachen (es sei denn, das Basisregister selbst enthielt auch eine ungerade Adresse) - da Befehle an Halbwortgrenzen ausgerichtet werden mussten, um ohne Programm- oder Hardware- Interrupt ausgeführt zu werden .

Das vorherige Beispiel beschreibt eine indirekte Methode zum Adressieren an einen Speicherort im Format Segment: Offset. Angenommen, wir möchten uns auf den Speicherort 0xF867 beziehen. Eine Möglichkeit, dies zu erreichen, besteht darin, zuerst ein Segment mit der Anfangsadresse 0xF000 zu definieren und dann einen Offset von 0x0867 zu definieren. Außerdem dürfen wir das hexadezimale Segment verschieben, um die endgültige absolute Speicheradresse zu erreichen. Eine Sache, die hier zu beachten ist, ist, dass wir unsere endgültige absolute Adresse auf viele Arten erreichen können.