Intel Hex

Intel HEXformat pliku zawierający dane binarne, stosowany przy programowaniu mikrokontrolerów - systemów wbudowanych, pamięci EEPROM, FLASH. Jest najstarszym tego typu formatem, stosowanym od lat 70. XX wieku.

Dane w postaci hexadecymalnej zapisane są w liniach w postaci tekstowej.Każda z linii zawiera 6 pól:

  1. Znacznik rozpoczynający, jeden znak ASCII - dwukropek ':',
  2. Liczba bajtów, dwie cyfry hexadecymalne, określające długość rekordu danych,
  3. Adres, cztery cyfry hexadecymalne, 16 bitowy adres, umożliwiający zaadresowanie do 64K pamięci w jednym segmencie (zapisany w formacie Big Endian)
  4. Typ rekordu, dwie cyfry hexadecymalne w przedziale od 00 do 05,
  5. Dane, sekwencja danych, gdzie bajt zapisany jest w hexadecymalnej postaci tekstowej,
  6. Suma kontrolna, dwie cyfry hexadecymalne, suma kontrolna rekordu - cały rekord poza ':'.

Przykład obliczenia sumy kontrolnej dla wartości rekordu: 0300300002337A1E

03 + 00 + 30 + 00 + 02 + 33 + 7A = E2, po uzupełnieniu do dwóch (U2) otrzymujemy - 1E (w systemie szesnastkowym: 100 - E2 = 1E). Innymi słowy najmniej znaczący bajt sumy wszystkich bajtów w jednym rekordzie musi wynosić 0.

03 + 00 + 30 + 00 + 02 + 33 + 7A + 1E = 100, najmniej znaczący bajt jest równy 0.

Typ rekordu

Istnieje sześć różnych typów rekordów:

  • 00, rekord zawierający dane oraz 16 bitowy adres,
  • 01, koniec pliku, ostatni rekord,
  • 02, rekord adresu segmentu rozszerzonego (20 bitów adresu), używany do adresowania do 1MB (pole adresowe jest równe 0000, w danych umieszczony jest 2 bajtowy adres zapisany w kolejności big endian, który pomnożony przez 2^4 dodawany jest do adresów rekordów typu 00 następujących po nim)
  • 03, rekord ustawiający 20 bitowy adres, spod którego rozpocznie się wykonywanie kodu. Zawiera on parę rejestrów CS (pierwsze 2 bajty danych) i IP (2 pozostałe bajty). Może zostać użyty tylko w trybie rzeczywistym. Jeżeli adres nie zostanie podany, wykonanie kodu rozpocznie się od domyślnego adresu.
  • 04, rekord adresu segmentu rozszerzonego (32 bity adresu), używany do adresowania do 4GB (podobnie do 02 lecz 2 bajtowy adres z pola danych mnożony jest przez 2^16)
  • 05, rekord ustawiający 32 bitowy adres liniowy, spod którego rozpocznie się wykonywanie kodu (Rejestr EIP). Może zostać użyty tylko w trybie chronionym. Jeżeli adres nie zostanie podany, wykonanie kodu rozpocznie się od domyślnego adresu.

Przykład

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

     Znacznik rozpoczynający

     Liczba bajtów

     Adres

     Typ rekordu

     Dane

     Suma kontrolna

Bibliografia

  • Hexadecimal Object File Format Specification [PDF], Intel, 1988 [dostęp 2009-05-11] [zarchiwizowane z adresu 2011-07-14].

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.