Intel_HEX
[Wikipedia|▼Menu]
5つのレコードを含むIntel HEXファイルの例。各行はそれぞれ1レコードから成る。

Intel HEXはバイナリ情報をASCIIテキスト形式で運ぶためのファイル形式である。マイクロコントローラEPROMなどのプログラム可能なデバイスのプログラム書き込みのために広く用いられている。典型的な利用用途としてはコンパイラアセンブラプログラムC言語アセンブリ言語などのソースコード機械語に変換し、HEXファイルとして出力する。HEXファイルはROMにマシン語のコードを「焼く」ために書き込み機によって読み込まれたり、対象のシステムで読み込んだり実行したりするために転送されたりする[1]
目次

1 形式

1.1 レコード構造

1.1.1 色凡例

1.1.2 チェックサム計算


1.2 行末記号

1.3 レコードタイプ

1.4 名称のあるフォーマット


2 ファイル例

3 関連項目

4 参考文献

5 外部リンク

形式

Intel HEXは改行コードによって区切られた複数行のASCIIテキストからなる。各行は複数の2進数値をエンコードする16進数の文字を含む。2進数の値は行の位置や形式、長さによってデータ、メモリアドレスなどに相当する。各行はレコードと呼ばれる。
レコード構造

レコード(テキストの行)は左から順に並んだ6つのフィールド(部分)を有する:
スタートコード、1文字、ASCIIのコロン':'。

バイトカウント、16進数2桁、データフィールドに含まれるバイト(2桁の16進数)の数を示す。最大値は255(0xFF)。16(0x10)や32(0x20)が広く用いられている。

アドレス、16進数4桁、データの16ビットの開始メモリアドレスオフセットを表す。データの物理アドレスはこのオフセットを前もって決められたベースアドレスに加算することで計算される。これにより、16ビットアドレスの64キロバイト制限を超えてメモリアドレスを指定することができる。ベースアドレスはデフォルトが0であるが、様々なタイプのレコードによって変更することができる。ベースアドレスとアドレスオフセットは常にビッグエンディアンで表記される。

レコードタイプ (以下のレコードタイプを参照)、16進数2桁、00から05でありデータフィールドの意味を表す。.

データ、2n桁の16進数で表記されたnバイトのデータの並び。一部のレコードではこのフィールドは省略される(nは0)。データの意味と表現は用途による。

チェックサム、16進数2桁、レコードにエラーがないことを検証するために計算された値。

色凡例

視覚的な補助として、Intel HEXレコードのフィールドはこの記事において以下のように色分けされる。

  スタートコード  バイトカウント  アドレス  レコードタイプ  データ  チェックサム
チェックサム計算

チェックサムの値はレコード内のチェックサムの前のデコードされたバイト値全ての合計の最下位ビット(LSB)の2の補数である。

例えば、:0300300002337A1Eのようなレコードの場合、デコードされたバイト値の合計は03 + 00 + 30 + 00 + 02 + 33 + 7A = E2である。E2の2の補数は1Eであり、これがレコードの末尾に表れているチェックサムである。

レコードの妥当性はそのレコードのチェックサムを計算し、計算されたチェックサムがレコードに表れているチェックサムと一致するかを確認することで検証される。
行末記号

Intel HEXレコードは1行に1つのレコードが表記されるように1つまたは複数の改行コードによって区切られる。このことはレコードを視覚的に区切ることによって可読性を向上し、レコード間のパディングを提供することで機械による構文解析の効率を高めることを可能にしている。

HEXレコードを作成するプログラムは典型的にはそれらの動作するオペレーティングシステムの慣例に従うような改行コードを用いる。例えばLinux上のプログラムはLF(ラインフィード,16進数で0A)を単独で行末に用い、Windows上のプログラムはCR(キャリッジリターン,16進数で0D)とそれに続くLFを用いる。
レコードタイプ

Intel HEXは以下の6つの標準的なレコードタイプを持つ。

16進コードレコードタイプ解説例
00データデータとその16ビットの開始アドレスを含む。バイトカウントはレコード内のデータのバイト数を示す。右に示す例は0B(10進数で11)バイトのデータ(61,64,64,72,65,73,73,20,67,61,70)が0010で始まる連続したアドレスに置かれる。:0B0010006164647265737320676170A7
01
End Of Fileファイルの最終行に1回必ず表記される。データフィールドは空白(よってバイトカウントは00)であり、 アドレスフィールドは0000が一般的である。:00000001FF
02拡張セグメントアドレスデータフィールドには80x86のリアルモードアドレッシングと互換性のある16ビットのセグメントベースアドレス(よってバイトカウントは02)が格納される。アドレスフィールド(通常0000)は無視される。もっとも最近の02レコードから得られたセグメントアドレスには16が掛けられ、それに続くデータレコードのアドレスと足されることでデータの開始物理アドレスが求められる。これにより、1メガバイトまでのアドレス空間のアドレス指定が可能になる。:020000021200EA
03開始セグメントアドレス80x86プロセッサにおいてはCS:IPレジスタの初期値が示される。アドレスフィールドは0000でバイトカウントは04であり、最初の2バイトはCS(英語版)の値、残りの2バイトはIPの値である。:0400000300003800C1
04拡張リニアアドレス32ビット(4GiBまで)アドレッシングを可能にする。アドレスフィールド(通常0000)は無視され、バイトカウントは常に02である。2つのエンコードされたビッグエンディアンのデータがそれに続く全ての00タイプのレコードの32ビット絶対アドレスの上位16ビットを示す。これらの上位アドレスビットは次の04レコードまで有効である。00レコードの前に04レコードが存在しない場合、アドレスの上位16ビットはデフォルトの0000となる。00レコードの絶対アドレスはもっとも最近の04レコードによる上位16ビットと00レコードの下位16ビットを組み合わせることで求められる。:02000004FFFFFC
05開始リニアアドレスアドレスフィールドは0000(未使用)であり、バイトカウントは04である。4バイトのデータが80386以降のCPUのEIPレジスタにロードされる32ビットの値を示す。:04000005000000CD2A

名称のあるフォーマット

特定のレコードタイプのサブセットを用いるHEXファイルのフォーマットを示すために特別な名称が用いられることがある。以下がその例である。

I8HEXはレコードタイプ00と01のみを用いる。(16ビットアドレッシング)

I16HEXはレコードタイプ00から03のみを用いる。(20ビットアドレッシング)

I32HEXはレコードタイプ00,01,04,05のみを用いる。(32ビットアドレッシング)

ファイル例

以下の例は4つのデータレコードとそれに続くEnd Of Fileレコードを含むファイルを示す。:10010000214601360121470136007EFE09D2190140:100110002146017E17C20001FF5F16002148011928:10012000194E79234623965778239EDA3F01B2CAA7:100130003F0156702B5E712B722B732146013421C7:00000001FF
関連項目
記事


SREC
- モトローラによる16進数ファイルフォーマット

TekHex - テクトロニクスによる16進数ファイルフォーマット

その他


Template:Intel HEX - Intel HEXのレコードをWikipediaの記事上で示す際に有用である

参考文献^ Intel: " ⇒Hexadecimal Object File Format Specification", Revision A, January 6, 1988

外部リンク
ドキュメンテーション


Intel HEXフォーマットの解説

例を含むIntel HEXフォーマットのリファレンス

ソフトウェア


intelhex2bin - C言語のソースコード付きのIntel HEXからバイナリへのコンバータ

binex - Intel HEXとバイナリの相互コンバータ

libgis - Intel HEXなどのフォーマットを変換するオープンソースのライブラリ


更新日時:2019年2月4日(月)04:33
取得日時:2019/09/20 05:30


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:11 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef