<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Intel_HEX</id>
	<title>Intel HEX - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Intel_HEX"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Intel_HEX&amp;action=history"/>
	<updated>2026-05-28T20:00:09Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Intel_HEX&amp;diff=1384861&amp;oldid=prev</id>
		<title>77.1.51.1: /* Quellen, Weblinks */ Website has moved from sbprojects.com to sbprojects.net</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Intel_HEX&amp;diff=1384861&amp;oldid=prev"/>
		<updated>2024-07-01T17:09:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Quellen, Weblinks: &lt;/span&gt; Website has moved from sbprojects.com to sbprojects.net&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Das &amp;#039;&amp;#039;&amp;#039;Intel HEX&amp;#039;&amp;#039;&amp;#039;-Format ist ein Datenformat zur Speicherung und Übertragung von [[Binärcode|binären]] Daten. Es wird heute hauptsächlich verwendet, um Programmierdaten für [[Mikrocontroller]] bzw. [[Mikroprozessor]]en, [[Erasable Programmable Read Only Memory|EPROMs]] und ähnliche Bausteine zu speichern. Es kann aber auch zur Speicherung von Lademodulen verwendet werden. Das HEX-Format ist das älteste Datenformat seiner Art und seit den 1970er Jahren in Gebrauch. Spätere Erweiterungen unterstützen speziell die segmentierte Adressierung der Intel-[[X86-Prozessor|80x86-Prozessoren]].&lt;br /&gt;
&lt;br /&gt;
Eine Intel-HEX-Datei liegt im [[ASCII]]-Format vor. Die Bytes der kodierten Binärdaten werden jeweils als [[Hexadezimalsystem|Hexadezimalzahl]] aus zwei ASCII-Zeichen (0…9 und A…F) dargestellt. HEX-Dateien können mit einem Texteditor geöffnet und modifiziert werden. Die HEX-Datei ist in etwa doppelt so groß wie die enthaltenen Binärdaten, da die Darstellung eines Bytes mit zwei Bytes in hexadezimaler Schreibweise erfolgt. Die Datensätze sind mit einer [[Prüfsumme]] versehen, so dass Übertragungsfehler erkannt werden können.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Das Intel-Hex Format (Ursprünglich &amp;#039;&amp;#039;&amp;#039;Intellec-Hex&amp;#039;&amp;#039;&amp;#039;) wurde von Intel 1973 für die Intellec Entwicklungssysteme ([[MDS]]) entworfen um Programme von Lochstreifen zu laden und starten. Außerdem sollte es die Übermittlung der Daten zur ROM-Produktion vereinfachen. Gleichzeitig wurde es zur Programmierung von (E)PROM mittels lochstreifen- oder lochkartengesteuerter EPROM-Programmiergeräte verwendet. Ab der Einführung von Diskettenlaufwerken mit dem MCS Serie II unter ISIS II (1975) wurden auch Dateien in diesem Format erstellt. Als Dateiendung dient seitdem &amp;#039;&amp;#039;&amp;#039;HEX&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
Das hier beschriebene Format entspricht der &amp;#039;&amp;#039;Hexadecimal Object File Format Specification&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;&amp;#039;&amp;#039;Hexadecimal Object File Format Specification&amp;#039;&amp;#039;, Revision A vom 6. Januar 1988&amp;lt;/ref&amp;gt; von Intel.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau eines Datensatzes ===&lt;br /&gt;
Jede Zeile repräsentiert einen Datensatz. Die Zeichen-Codierung ist (7 Bit) ASCII. Jeder Datensatz wird durch einen Doppelpunkt (&amp;quot;:&amp;quot;) eingeleitet, besteht aus einer geraden Anzahl von Zeichen und wird durch ein Zeilenende abgeschlossen. Der Aufbau des Zeilenendes ist nicht definiert und medienabhängig. Intel-Tools für Streaming-Medien erzeugen immer ein CR/LF (0D0A&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Jeweils zwei Zeichen repräsentieren ein Datenbyte. Die Notation erfolgt hexadezimal, [[Byte-Reihenfolge|big-endian]] mit den Zeichen 0..9 und A..F, d.&amp;amp;nbsp;h., dass das höherwertige Halbbyte zuerst steht. Gleichfalls erfolgen alle Angaben in den Adressfeldern big-endian. Kleinbuchstaben (a..f) sind in der Definition nicht erwähnt, werden jedoch von den meisten Implementierungen unterstützt.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Intel-Bezeichnung !! Inhalt !! Verwendung&lt;br /&gt;
|-&lt;br /&gt;
|  RECORD MARK || Satzbeginn || &amp;quot;:&amp;quot; (Doppelpunkt, ASCII-Kodierung 3A&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|  RECLEN || Datenlänge || Länge der Nutzdaten als zwei Hexadezimalziffern&lt;br /&gt;
|-&lt;br /&gt;
|  LOAD OFFSET || Ladeadresse || [[Bit|16-Bit]]-Adresse (Big-Endian)&lt;br /&gt;
|-&lt;br /&gt;
|  RECTYP || Satztyp || Datensatztyp (00..05)&lt;br /&gt;
|-&lt;br /&gt;
|  INFO or DATA || Daten || Nutzdaten (RECLEN x 2 Zeichen)&lt;br /&gt;
|-&lt;br /&gt;
|  CHKSUM || Prüfsumme || [[#Berechnung der Prüfsumme|Prüfsumme]] über den Datensatz (ohne Satzbeginn)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Datensatztypen ===&lt;br /&gt;
==== Übersicht ====&lt;br /&gt;
Es gibt sechs Datensatztypen (&amp;#039;&amp;#039;record types&amp;#039;&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Typ !! Bezeichnung !! Verwendung&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Data Record || Nutzdaten&lt;br /&gt;
|-&lt;br /&gt;
| 01 || End of File Record || Dateiende (sowie Startadresse bei 8-Bit-Daten)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || Extended Segment Address Record || Erweiterte Segmentadresse für nachfolgende Nutzdaten&lt;br /&gt;
|-&lt;br /&gt;
| 03 || Start Segment Address Record || Startsegmentadresse (CS:IP Register)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || Extended Linear Address Record || Erweiterte lineare Adresse, höherwertige 16 Bit der Adresse für nachfolgende Nutzdaten&lt;br /&gt;
|-&lt;br /&gt;
| 05 || Start Linear Address Record || Lineare Startadresse (EIP-Register)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Datensätze können in beliebiger Reihenfolge vorkommen, ein Endesatz (Typ &amp;#039;&amp;#039;01&amp;#039;&amp;#039;) beendet die Verarbeitung.&lt;br /&gt;
&lt;br /&gt;
==== Data Record (Typ &amp;#039;&amp;#039;00&amp;#039;&amp;#039;) ====&lt;br /&gt;
Der Datensatz enthält die 16-Bit-Ladeadresse und die Nutzdaten.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || Startcode || Anzahl der Bytes || align=&amp;quot;center&amp;quot;|Adresse || align=&amp;quot;center&amp;quot;|Typ || align=&amp;quot;center&amp;quot;|Datenfeld || align=&amp;quot;center&amp;quot;|Prüfsumme&lt;br /&gt;
|-&lt;br /&gt;
| Länge || align=&amp;quot;center&amp;quot;|1 Zeichen || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|2&amp;#039;&amp;#039;n&amp;#039;&amp;#039; Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern&lt;br /&gt;
|-&lt;br /&gt;
| Inhalt || align=&amp;quot;center&amp;quot;|: || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;n&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Adresse&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|00 || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Daten&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Prüfsumme&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;n&amp;#039;&amp;#039;: Anzahl der Bytes im Datenfeld&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Adresse&amp;#039;&amp;#039;: 16-Bit-Adresse für die Speicherung des Datensatzes&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Daten&amp;#039;&amp;#039;: Datenfeld, n Bytes&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== End of File Record (Typ &amp;#039;&amp;#039;01&amp;#039;&amp;#039;) ====&lt;br /&gt;
Der Datensatz markiert das Dateiende. In der ursprünglichen (8 Bit) Definition wird, für ladbare Formate, im Adressfeld die Startadresse des Programms (PC) angegeben. In den 16/32-Bit-Formaten muss diese &amp;#039;&amp;#039;0000&amp;#039;&amp;#039; sein.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || Startcode || Anzahl der Bytes || align=&amp;quot;center&amp;quot;|Adresse || align=&amp;quot;center&amp;quot;|Typ || Prüfsumme&lt;br /&gt;
|-&lt;br /&gt;
| Länge || align=&amp;quot;center&amp;quot;|1 Zeichen || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern&lt;br /&gt;
|-&lt;br /&gt;
| Inhalt || align=&amp;quot;center&amp;quot;|: || align=&amp;quot;center&amp;quot;|00 || align=&amp;quot;center&amp;quot;|0000 || align=&amp;quot;center&amp;quot;|01 || align=&amp;quot;center&amp;quot;|FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Extended Segment Address Record (Typ &amp;#039;&amp;#039;02&amp;#039;&amp;#039;) ====&lt;br /&gt;
Das Datenfeld des &amp;#039;&amp;#039;Extended Segment Address Record&amp;#039;&amp;#039; (erweiterte Segmentadresse) enthält Bit 4–19 des Adresssegmentes der nachfolgenden &amp;#039;&amp;#039;Data Records&amp;#039;&amp;#039; (Zählung beginnend mit 0) in Fällen, in denen der Umfang eines 16-Bit-Adressraums (also 64 kByte) nicht ausreicht. Die im Datenfeld enthaltene Adresse wird dabei um 4 Bit nach links verschoben (entsprechend einer Multiplikation mit &amp;lt;Math&amp;gt;2^{4}&amp;lt;/Math&amp;gt; = 16) und bei den folgenden &amp;#039;&amp;#039;Data Records&amp;#039;&amp;#039; (Typ &amp;#039;&amp;#039;00&amp;#039;&amp;#039;) zu den dort enthaltenen 16-Bit-Adressen addiert. Der &amp;#039;&amp;#039;Extended Segment Address Record&amp;#039;&amp;#039; bleibt bis zur Änderung durch einen anderen &amp;#039;&amp;#039;Extended Segment Address Record&amp;#039;&amp;#039; wirksam. Das Adressfeld des Datensatzes vom Typ &amp;#039;&amp;#039;02&amp;#039;&amp;#039; ist immer 0000, die Länge ist &amp;#039;&amp;#039;02&amp;#039;&amp;#039;.&amp;lt;ref name=&amp;quot;data_type&amp;quot;&amp;gt;{{Internetquelle |url=https://developer.arm.com/documentation/ka003292/1-0/?lang=en |titel=GENERAL: Intel HEX File Format |hrsg=ARM Germany GmbH |sprache=Englisch |zugriff=2022-11-25}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || Startcode || Anzahl der Bytes || align=&amp;quot;center&amp;quot;|Adresse || align=&amp;quot;center&amp;quot;|Typ || align=&amp;quot;center&amp;quot;|Datenfeld || align=&amp;quot;center&amp;quot;|Prüfsumme&lt;br /&gt;
|-&lt;br /&gt;
| Länge || align=&amp;quot;center&amp;quot;|1 Zeichen || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern&lt;br /&gt;
|-&lt;br /&gt;
| Inhalt || align=&amp;quot;center&amp;quot;|: || align=&amp;quot;center&amp;quot;|02 || align=&amp;quot;center&amp;quot;|0000 || align=&amp;quot;center&amp;quot;|02 || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Segment&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Prüfsumme&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Start Segment Address Record (Typ &amp;#039;&amp;#039;03&amp;#039;&amp;#039;) ====&lt;br /&gt;
Der Datensatz spezifiziert bei Lademodulen die Startadresse. Für x86-Prozessoren ist dies der CS:IP Inhalt. Der Datensatz kann an beliebiger Position auftauchen. Die Startadresse wird berechnet als &amp;#039;&amp;#039;Segment * 16 + Offset&amp;#039;&amp;#039;. Das Adressfeld ist immer &amp;#039;&amp;#039;0000&amp;#039;&amp;#039;, die Länge ist &amp;#039;&amp;#039;04&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || Startcode || Anzahl der Bytes || align=&amp;quot;center&amp;quot;|Adresse || align=&amp;quot;center&amp;quot;|Typ || colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Datenfeld || align=&amp;quot;center&amp;quot;|Prüfsumme&lt;br /&gt;
|-&lt;br /&gt;
| Länge || align=&amp;quot;center&amp;quot;|1 Zeichen || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern&lt;br /&gt;
|-&lt;br /&gt;
| Inhalt || align=&amp;quot;center&amp;quot;|: || align=&amp;quot;center&amp;quot;|04 || align=&amp;quot;center&amp;quot;|0000 || align=&amp;quot;center&amp;quot;|03 || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Segment&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Offset&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Prüfsumme&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Extended Linear Address Record (Typ &amp;#039;&amp;#039;04&amp;#039;&amp;#039;) ====&lt;br /&gt;
Das Datenfeld des &amp;#039;&amp;#039;Extended Linear Address Record&amp;#039;&amp;#039; (erweiterte lineare Adresse, auch 32-bit Adressdatensatz oder HEX386 Record) dient der Unterstützung eines 32-Bit-Adressraumes mit einer [[4-GB-Grenze]] und enthält mit Bit 16–31 die höherwertigen 16 Bit (ULBA, Upper Linear Base Address, Zählung beginnend mit 0) einer 32-Bit-Adresse (LBA, Linear Base Address). Der Adressdatensatz gilt für alle nachfolgenden Typ-&amp;#039;&amp;#039;00&amp;#039;&amp;#039;-Datensätze, bis er durch einen anderen erweiterten Adressdatensatz ersetzt wird. Die absolute Speicheradresse eines Typ-&amp;#039;&amp;#039;00&amp;#039;&amp;#039;-Datensatzes ergibt sich, indem dem Adressfeld dieses Datensatzes die Adressdaten aus dem erweiterten Adressdatensatz vorangestellt werden. Wenn einem Typ-&amp;#039;&amp;#039;00&amp;#039;&amp;#039;-Datensatz innerhalb eines 32-Bit-Adressraumes kein Typ-&amp;#039;&amp;#039;04&amp;#039;&amp;#039;-Adressdatensatz vorangestellt ist, werden die oberen 16 Adressbits standardmäßig auf &amp;#039;&amp;#039;0000&amp;#039;&amp;#039; gesetzt.&amp;lt;ref name=&amp;quot;data_type&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Adressfeld des erweiterten Adressdatensatzes selber wird (bei einer Länge von &amp;#039;&amp;#039;02&amp;#039;&amp;#039;) stets als &amp;#039;&amp;#039;0000&amp;#039;&amp;#039; gesetzt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || Startcode || Anzahl der Bytes || align=&amp;quot;center&amp;quot;|Adresse || align=&amp;quot;center&amp;quot;|Typ || align=&amp;quot;center&amp;quot;|Datenfeld || align=&amp;quot;center&amp;quot;|Prüfsumme&lt;br /&gt;
|-&lt;br /&gt;
| Länge || align=&amp;quot;center&amp;quot;|1 Zeichen || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern&lt;br /&gt;
|-&lt;br /&gt;
| Inhalt || align=&amp;quot;center&amp;quot;|: || align=&amp;quot;center&amp;quot;|02 || align=&amp;quot;center&amp;quot;|0000 || align=&amp;quot;center&amp;quot;|04 || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;ULBA, Adresse (high word)&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Prüfsumme&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Start Linear Address Record (Typ &amp;#039;&amp;#039;05&amp;#039;&amp;#039;) ====&lt;br /&gt;
Der Datensatz spezifiziert bei Lademodulen die Startadresse. Bei x86-Prozessoren ist dies der Inhalt des EIP-Registers. Das Adressfeld ist immer &amp;#039;&amp;#039;0000&amp;#039;&amp;#039;, die Länge ist &amp;#039;&amp;#039;04&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| || Start code || Anzahl der Bytes || align=&amp;quot;center&amp;quot;|Adresse || align=&amp;quot;center&amp;quot;|Typ || align=&amp;quot;center&amp;quot;|Datenfeld || align=&amp;quot;center&amp;quot;|Prüfsumme&lt;br /&gt;
|-&lt;br /&gt;
| Länge || align=&amp;quot;center&amp;quot;|1 Zeichen || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|4 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern || align=&amp;quot;center&amp;quot;|8 Ziffern || align=&amp;quot;center&amp;quot;|2 Ziffern&lt;br /&gt;
|-&lt;br /&gt;
| Inhalt || align=&amp;quot;center&amp;quot;|: || align=&amp;quot;center&amp;quot;|04 || align=&amp;quot;center&amp;quot;|0000 || align=&amp;quot;center&amp;quot;|05 || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;EIP&amp;#039;&amp;#039; || align=&amp;quot;center&amp;quot;|&amp;#039;&amp;#039;Prüfsumme&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Berechnung der Prüfsumme ===&lt;br /&gt;
Die Prüfsumme wird aus dem gesamten Datensatz ausschließlich des Startcodes und der Prüfsumme selbst berechnet. Der Datensatz wird byteweise summiert, von der Summe wird das niederwertige Byte genommen und davon wiederum das Zweierkomplement gebildet.&lt;br /&gt;
&lt;br /&gt;
Das [[Zweierkomplement]] wird gebildet, indem man die Bits des niederwertigen Bytes invertiert und dann 1 addiert. Dies kann man z. B. durch die [[XOR-Verknüpfung|Exklusiv-Oder-Verknüpfung]] mit FF&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt; und Addition von 01&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt; erreichen. So bleibt 00&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt; unverändert, aus 01&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt; wird FF&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt; usw.&lt;br /&gt;
&lt;br /&gt;
Das Zweierkomplement drückt im Binärsystem eine negative Zahl aus. Da die Prüfsumme damit die negative Summe der restlichen Bytes darstellt, gestaltet sich die Überprüfung eines Datensatzes auf Fehler sehr einfach. Man summiert einfach die einzelnen Bytes eines Datensatzes &amp;#039;&amp;#039;inklusive&amp;#039;&amp;#039; der Prüfsumme und erhält als niederwertiges Byte 00&amp;lt;sub&amp;gt;HEX&amp;lt;/sub&amp;gt;, falls der Datensatz korrekt ist.&lt;br /&gt;
&lt;br /&gt;
=== Varianten ===&lt;br /&gt;
==== Intel ====&lt;br /&gt;
Im Laufe der Prozessorentwicklung von [[Intel 4004]] bis heute wurden verschiedene Varianten definiert:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variante !! Einsatz !! Erlaubte Satztypen&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|I08HEX || valign=&amp;quot;top&amp;quot;|4/8-Bit-CPU (4004..8085) || 00 (Data),&amp;lt;br /&amp;gt;01 (End of File)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|I16HEX || valign=&amp;quot;top&amp;quot;|16-Bit-CPU (8086/186/286) || 00 (Data),&amp;lt;br /&amp;gt;01 (End of File),&amp;lt;br /&amp;gt;02 (Extended Segment Address),&amp;lt;br /&amp;gt;03 (Start Segment Address)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;|I32HEX || valign=&amp;quot;top&amp;quot;|32-Bit-CPU (ab 80386) || 00 (Data),&amp;lt;br /&amp;gt;01 (End of File),&amp;lt;br /&amp;gt;02 (Extended Segment Address),&amp;lt;br /&amp;gt;03 (Start Segment Address),&amp;lt;br /&amp;gt;04 (Extended Linear Address),&amp;lt;br /&amp;gt;05 (Start Linear Address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Andere Hersteller ====&lt;br /&gt;
Das HEX-Format wurde als Quasi-Standard vielfältig verwendet. Dabei wurde die [[Byteorder]] im Datenfeld teilweise geändert, d.&amp;amp;nbsp;h. die Reihenfolge stimmt nicht mit der Adresslage überein.&lt;br /&gt;
Außerdem haben Hersteller (z. B. Texas Instruments) die Adressierung geändert. Dort entspricht die Adresse nicht einem Byte, sondern der Breite eines Registers des Prozessors.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
 &amp;lt;span style=&amp;quot;background-color: #FFFFCC&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #66FFCC&amp;quot;&amp;gt;02&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCCCFF&amp;quot;&amp;gt;0000&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #9999FF&amp;quot;&amp;gt;02&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCFFFF&amp;quot;&amp;gt;1000&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #FF9999&amp;quot;&amp;gt;EC&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;background-color: #FFFFCC&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #66FFCC&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCCCFF&amp;quot;&amp;gt;0100&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #9999FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCFFFF&amp;quot;&amp;gt;214601360121470136007EFE09D21901&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #FF9999&amp;quot;&amp;gt;40&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;background-color: #FFFFCC&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #66FFCC&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCCCFF&amp;quot;&amp;gt;0110&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #9999FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCFFFF&amp;quot;&amp;gt;2146017EB7C20001FF5F160021480119&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #FF9999&amp;quot;&amp;gt;88&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;background-color: #FFFFCC&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #66FFCC&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCCCFF&amp;quot;&amp;gt;0120&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #9999FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCFFFF&amp;quot;&amp;gt;194E79234623965778239EDA3F01B2CA&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #FF9999&amp;quot;&amp;gt;A7&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;background-color: #FFFFCC&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #66FFCC&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCCCFF&amp;quot;&amp;gt;0130&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #9999FF&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCFFFF&amp;quot;&amp;gt;3F0156702B5E712B722B732146013421&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #FF9999&amp;quot;&amp;gt;C7&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;background-color: #FFFFCC&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #66FFCC&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #CCCCFF&amp;quot;&amp;gt;0000&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #9999FF&amp;quot;&amp;gt;01&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #FF9999&amp;quot;&amp;gt;FF&amp;lt;/span&amp;gt;&lt;br /&gt;
{{Farblegende|#FFFFCC|Startcode}}&lt;br /&gt;
{{Farblegende|#66FFCC|Byte count}}&lt;br /&gt;
{{Farblegende|#CCCCFF|Adresse}}&lt;br /&gt;
{{Farblegende|#9999FF|Typ}}&lt;br /&gt;
{{Farblegende|#CCFFFF|Datenfeld}}&lt;br /&gt;
{{Farblegende|#FF9999|Prüfsumme}}&lt;br /&gt;
&lt;br /&gt;
Die Prüfsumme für den zweiten Beispiel-Datensatz berechnet sich wie folgt:&lt;br /&gt;
 &amp;lt;math&amp;gt;{ 10 +}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;{ 01+00+}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;{ 00+}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;{ 21+46+01+36+01+21+47+01+36+00+7E+FE+09+D2+19+01}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\ {{=}}\ 3C0 \rightarrow C0 \rightarrow \neg C0 + 1\ {{=}}\ 40&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Verwandte Dateiformate ==&lt;br /&gt;
Sehr ähnlich ist das [[Motorola]]-S-Format (auch kurz [[S-Record]], SREC oder S19). Außerdem existieren für diesen Anwendungsbereich auch weitere Formate, wie der einfache [[Binärcode]] oder das [[JEDEC Solid State Technology Association|Jedec]]-Format.&lt;br /&gt;
&lt;br /&gt;
== Quellen, Weblinks ==&lt;br /&gt;
* [http://www.piclist.com/techref/fileext/hex/intel.htm Intel HEX Format] (englisch)&lt;br /&gt;
* [http://www.sbprojects.net/knowledge/fileformats/intelhex.php SB-Projects: fileformats: intel hex] - sehr übersichtliche Darstellung (englisch)&lt;br /&gt;
* [https://pypi.python.org/pypi/hexformat hexformat] - Python Bibliothek für HEX-Formate IntelHex und SRecord&lt;br /&gt;
* [http://sourceforge.net/projects/intelhex2bin Intel HEX to bin C programm mit source code]&lt;br /&gt;
* [https://github.com/oliverbrehm/SwiftIntelHex SwiftIntelHex] - Swift package zum Parsen von Intel HEX files für iOS and macOS.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Intel Hex}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenformat]]&lt;/div&gt;</summary>
		<author><name>77.1.51.1</name></author>
	</entry>
</feed>