記錄格式
英特爾十六進制由任意數量的十六進制記錄組成。每條記錄包含五個字段,按以下格式排列:
:llaaaatt[dd...]抄送
每組字母對應壹個不同的字段,每個字母對應壹個十六進制編碼的數字。每個字段由至少兩個十六進制編碼的數字組成,構成壹個字節,如下所述:
:每個Intel十六進制記錄都以冒號開頭。
Ll是數據長度字段,表示記錄中的數據字節數(dd)。
Aaaa是壹個地址字段,表示記錄中數據的起始地址。
Tt是表示十六進制記錄類型的字段,可以是以下數據之壹:
00-數據記錄
01–文件記錄結束
02-擴展段地址記錄
04-擴展線性地址記錄
Dd是壹個數據字段,代表壹個字節的數據。壹個記錄可以有許多數據字節。記錄中的數據字節數必須與數據長度字段(ll)中指定的數字相匹配。
Cc是校驗和字段,表示該記錄的校驗和。校驗和的計算方法是,將記錄中所有十六進制編碼的數字對的值相加,然後用模數256進行如下補碼。
數據記錄
英特爾十六進制文件由任意數量的以回車和換行符結尾的數據記錄組成。數據記錄的外觀如下:
:10246200464 c 5549442050524 f 46494 c 4500464 c 33
其中包括:
10是該記錄中的數據字節數。
2462是數據將被下載到存儲器中的地址。
00是記錄類型(數據記錄)
464c...464c是數據。
33是該記錄的校驗和。
擴展線性地址記錄(HEX386)
擴展線性地址記錄也稱為32位地址記錄或HEX386記錄。這些記錄包含數據地址的高16位。擴展線性地址記錄總是有兩個數據字節,如下所示:
:02000004FFFFFC
其中包括:
02是該記錄中的數據字節數。
0000是地址字段。對於擴展線性地址記錄,該字段始終為0000。
04是記錄類型04(擴展線性地址記錄)
FFFF是地址的高16位。
FC是該記錄的校驗和,計算方法如下:
01h+NOT(02h+00h+00h+04h+FFh+FFh)。
讀取擴展線性地址記錄時,保存數據字段中存儲的擴展線性地址,該地址將應用於從Intel HEX文件中讀取的後續記錄。線性地址保持有效,直到它被另壹個擴展地址記錄改變。
通過將記錄中的地址字段與來自擴展線性地址記錄的移位地址數據相加,獲得數據記錄的絕對存儲器地址。
以下示例演示了這壹過程。..
數據記錄地址字段中的地址2462
擴展線性地址記錄+FFFF的數據字段
-
絕對存儲器地址FFFF2462
擴展段地址記錄(HEX86)
擴展段地址記錄也叫HEX86記錄,包括4-19位的數據地址段。擴展段地址記錄總是有兩個數據字節,其外觀如下:
:020000021200EA
其中包括:
02是記錄中的數據字節數。
0000是地址字段。對於擴展段地址記錄,該字段始終為0000。
02是記錄類型02(擴展段地址記錄)
1200是地址字段。
EA是該記錄的校驗和,計算方法如下:
01h+NOT(02h+00h+00h+02h+12h+00h)。
當讀取擴展段地址記錄時,保存數據字段中存儲的擴展段地址,該地址將應用於從Intel HEX文件中讀取的後續記錄。段地址保持有效,直到它被另壹個擴展地址記錄改變。
通過將記錄中的地址字段與來自擴展段地址記錄的移位地址數據相加,獲得數據記錄的絕對存儲器地址。
以下示例演示了這壹過程。..
數據記錄地址字段中的地址2462
擴展段地址記錄數據字段+1200
-
絕對內存地址00014462
文件結束(EOF)記錄
英特爾十六進制文件必須以文件結束(EOF)記錄結尾。該記錄的記錄類型字段的值必須是01。EOF記錄看起來總是這樣:
:00000001FF
其中包括:
00是記錄中的數據字節數。
0000是數據下載到存儲器的地址。該地址沒有意義,在文件的結束記錄中被忽略。0000h是典型的地址。
01是記錄類型01(文件記錄結束)。
FF是該記錄的校驗和,計算公式如下:
01h+NOT(00h+00h+00h+01h)。
英特爾HEX文檔示例:
以下是壹個完整的英特爾十六進制文件示例:
:10001300 AC 12ad 13ae 10af 1112002 f8e 0e 8 f0f 2244
:10000300 e 50 b 250 df 509 e 50 a 350 cf 5081200132259
:03000000020023D8
:0c 002300787 Fe 4 f 6d 8 FD 7581130200031D
:10002 f 00 eff 88 df 0 a 4 ff EDC 5 f 0ce a 42 efeec 88 f 016
:04003F00A42EFE22CB
:00000001FF