Intel十六進制格式
外觀
副檔名 |
---|
Intel十六進制格式是一種由Intel開發,以ASCII文本形式傳達二進制信息的文件格式。 通常被用於對微控制器、 EPROM和其他類型的可程式邏輯器件和硬件仿真器進行編程。
在典型的應用程式中,編譯器或匯編器將程序的原始碼(例如C語言或匯編語言)轉換為機器代碼並將其輸出到HEX文件中。也可以將它用作保存流數據包的容器格式。 用於生成文件的通用文件擴展名是 .HEX或 . H86。然後程序通過讀取HEX文件將機器代碼寫入PROM或傳輸到目標系統以進行加載和執行。
歷史
[編輯]Intel十六進制格式最初是在1973年為Intel的Intellec 微型計算機開發系統(MDS) 設計的,以便從紙帶加載和執行程序。它還用於向英特爾指定用於 ROM 生產的內存內容從 1975 年開始,MCS 系列 II ISIS-II系統使用該格式,使用文件擴展名 HEX。 許多PROM和EPROM編程設備都接受這種格式。
格式
[編輯]包含由換行符或回車符或兩者分隔的ASCII文本行。每個文本行都包含對多個二進制數進行編碼的十六進制字符。二進制數可以表示數據、內存地址或其他值,具體取決於它們在行中的位置以及行的類型和長度。每個文本行稱為一個記錄。
記錄結構
[編輯]一條記錄(文本行)由六個字段(部分)組成,從左到右依次出現:
- 起始碼,一個字符,一個 ASCII 冒號 ' : '。記錄中該符號前面的所有字符都應被忽略。 事實上,該規範的早期版本甚至要求在第一個記錄之前和最後一個記錄之後至少有 25 個NUL字符。 然而,由於這是規範中鮮為人知的部分,並非所有編寫的軟件都能正確處理這一點。它允許將其他相關信息存儲在同一文件(甚至同一行)中, 各種軟件開發實用程序用來存儲符號表或附加註釋的工具,和第三方擴展使用其他字符作為起始碼,例如Keil的數字「 0 」, Mostek的 ' $ ', 或 ' ! '、' @ '、' # '、' \ '、' & '和' ; ' 而按照慣例,' // ' 通常用於註釋。這些擴展都不能包含任何 ':' 字符。
- 字節數量 ,由兩個十六進制數字(一個十六進制數字對)組成,表示數據字段中的字節數(十六進制數字對)。最大字節數為255(0xFF)。8(0x08), 16(0x10)和32(0x20)是常用的字節數。因為並非所有軟件都能處理大於16的計數。
- 地址,由四個十六進制數字組成,代表數據的 16 位起始內存地址偏移量。數據的物理地址是通過將此偏移量添加到先前建立的基地址來計算的,因此允許內存尋址超出 16 位地址的 64 KB 限制。基地址,默認為零,可以被各種類型的記錄改變。基地址和地址偏移量始終表示為大端值。
- 記錄類型(見下面的記錄類型),由兩個十六進制數字,00至 05 、定義數據字段的含義。
- 數據,一個n字節數據的序列,由2n個十六進制數字表示。一些記錄省略了這個字段( n等於 0)。數據字節的含義和解釋取決於應用程式。 (4 位數據必須存儲在字節的下半部分或上半部分,也就是說,一個字節只包含一個可尋址數據項。 )
- 校驗和,由兩個十六進制數字組成,可用於驗證記錄沒有錯誤的計算值。