資源描述:
《HEX文件編碼格式解析.doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、標題:HEX文件解析2012-07-1818:17:58HEX文件解析?????????????????????????HEX格式文件以行為單位,每行由“:”(0x3a)開始,以回車鍵結束(0x0d,0x0a)。行內(nèi)的數(shù)據(jù)都是由兩個字符表示一個16進制字節(jié),比如”01”就表示數(shù)0x01;”0a”,就表示0x0a。對于16位的地址,則高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示為字符串”010a”。<0x3a>[數(shù)據(jù)長度1Byte][數(shù)據(jù)地址2Byte][數(shù)據(jù)類型1Byte][數(shù)據(jù)nByte][校驗1Byte]<0x0d><0x0a>?Exa
2、mple.hex行號??原始碼1??:?10?0000?00?020003787FE4F6D8FD75812B02004A02?D62??:10001000008FE493A3F8E493A34003F68001F208713????:10002000DFF48029E493A3F85407240CC8C333C4354??:10003000540F4420C8834004F456800146F6DFE4A05????:10004000800B01020408102040809000C2E47E01716??:100050009360BCA3FF543F30E
3、509541FFEE493A3137??:1000600060010ECF54C025E060A840B8E493A3FAF78??:10007000E493A3F8E493A3C8C582C8CAC583CAF0B19??:10008000A3C8C582C8CAC583CADFE9DEE780BEE43216??:0700F0001F70F31E80F022D717??:00000001FF面對這一大串的十六進制碼,有沒有頭昏眼花的感覺呢?別急別急,經(jīng)過本文的介紹,你一定會愛上這個會讓你頭昏眼花的機器碼的!首先我們先介紹HEX文件的編碼格式,舉范例程序中第
4、一行說明: :?10 0000 00 020003787FE4F6D8FD75812B02004A02 D61 2 3???4????????????????????????????????5 6為了方便解說,筆者將原始碼以空格區(qū)分成六個部分,在實際轉換的原始內(nèi)容應該沒有空格也沒有行號的。第1部分是HEX文件的起始格式,文件一開始應該是一個冒號作為起點;第2部分的兩碼(10H)所代表的是該行總共具備多少個字節(jié)的數(shù)據(jù),以本行為例,應該有16個字節(jié),因為10H換算成十進制應該是16;第3部分的四碼所代表的是放置數(shù)據(jù)的開始位置,換句話說,本行的數(shù)據(jù)應該是放置在00
5、00H~000FH這段地址中;第4部分的兩碼是檢查碼,所代表的是該行數(shù)據(jù)類型。00----數(shù)據(jù)記錄???01----文件結束記錄02----擴展段地址記錄04----擴展線性地址記錄這里就是0x00即為普通數(shù)據(jù)記錄。首先我們只處理數(shù)據(jù)類型為0x00及0x01的情況。0x02表示對應的存儲地址超過了64K,由于我的編程器只針對64K以下的單片機,因此在次不處理,0x04也是如此。'00'DataRecord'01'EndofFileRecord'02'ExtendedSegmentAddressRecord'03'StartSegmentAddressRecor
6、d'04'ExtendedLinearAddressRecord'05'StartLinearAddressRecord第5部分則為數(shù)據(jù)存放區(qū),總共32碼16個字節(jié),有興趣的可以實際算算看,這里的機器碼已經(jīng)是標準的MCS-51指令,如果查表的話可以直接知道其功能,稍后的文章會再提到;第6部分為校驗值。什么叫做校驗值?所謂的校驗值是一種標準的校驗碼,把它加在每一行機器碼的最后,可以使每一行所有的十六進制值(兩個為一組),加總后所得到最后兩位十六進制碼應為00H,如果你不太會十六進制運算的話,沒關系,Windows中有一個很好用的工具叫“計算器”,你可以切換到科學
7、型計算的十六進制模式,將數(shù)值直接輸入,它就會自動幫你算好了。以本例來說,將所有的值相加所得到的值應該是:10H+00H+00H+00H+02H+00H+03H+78H+7FH+E4H+F6H+D8H+FDH+75H+81H+2BH+02H+00H+4AH+02H+D6H=700H最后兩個碼果然為00H,有興趣的人可以把范例中的每一行都算算看,結果一定都是這樣的。每個HEX格式的最后一行都是固定為::00000001FF