擴展線性地址記錄總是有兩個數據字節,外觀如下:02000004FFFFFC],其中:
a. 02 是這個記錄當中數據字節的數量。
b. 0000 是地址域,對於擴展線性地址記錄,這個域總是0000。
c. 04 是記錄類型 04(擴展線性地址記錄)。
d. FFFF 是地址的高16位。
e. FC 是這個記錄的校驗和的補足碼。
f. 當一個擴展線性地址記錄被讀取,存儲於數據域的擴展線性地址被保存,它被應用於從Intel HEX文件讀取來的隨後的記錄。線性地址保持有效,直到它被另外一個擴展地址(擴展段或者擴展線性地址)記錄所改變。
g. 通過把記錄當中的地址域與被移位(16位)的來自擴展線性地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。以下的例子演示了這個過程:
i. 來自數據記錄地址域的地址 2462
ii. 擴展線性地址記錄的數據域 FFFF0000
iii. 絕對存儲器地址 FFFF2462
5 擴展段地址記錄(HEX86)。擴展段地址記錄也叫HEX86記錄,它包括4-19位數據地址段。擴展段地址記錄總是有兩個數據字節,外觀如下:[: 020000021200EA],其中:
a. 02 是記錄當中數據字節的數量。
b. 0000 是地址域,對於擴展段地址記錄,這個域總是0000。
c. 02 是記錄類型 02(擴展段地址記錄)。
d. 1200 是地址段。
e. FC 是這個記錄的校驗和的補足碼。
f. 當一個擴展線性地址記錄被讀取,存儲於數據域的擴展線性地址被保存,它被應用於從Intel HEX文件讀取來的隨後的記錄。線性地址保持有效,直到它被另外一個擴展地址(擴展段或者擴展線性地址)記錄所改變。
g. 通過把記錄當中的地址域與被移位(16位)的來自擴展線性地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。以下的例子演示了這個過程:
i. 來自數據記錄地址域的地址 2462
ii. 擴展線性地址記錄的數據域 FFFF0
iii. 絕對存儲器地址 102452
6 程序的實現過程,程序的實現過程需要讀取兩次文件,第一次讀取文件主要是讀得文件中的最小地址和最大地址,也即可以知道HEX文件中的數據是從那個(低)地址到那個(高)地址的的數據,在這一次可以順便檢驗文件中字符的合法性和文件的合法性,為下一次讀取文件做好准備。第二次讀取主要是轉換的過程,你可以先定義一個字節數組(數組的大小為最大地址減最小地址)或者創建一個文件(文件的大小為最大地址減最小地址)然後把數組或者文件寫入0xFF(由於0x00在單片機中是有用字節)。然後開始從頭讀文件,讀得一行分析一行並寫入數組或文件。注意讀得的地址減去第一次得到的最小地址即是在文件或者數組的地址。這樣就搞定,下面我會給出一個例子。