Что такое шестнадцатеричные файлы HEX. Как устроены файлы в формате Intel HEX. Для чего используются HEX-файлы. Как открыть и проанализировать содержимое HEX-файла. Какие программы позволяют работать с HEX-форматом.
Что такое шестнадцатеричный файл HEX
Шестнадцатеричный файл HEX (Hexadecimal File) — это текстовый файл, содержащий данные в шестнадцатеричном формате. Такие файлы обычно используются для хранения двоичных данных в текстовом виде и имеют расширение .hex.
Основные характеристики HEX-файлов:
- Содержат данные в виде последовательности шестнадцатеричных цифр
- Имеют текстовый формат и могут быть открыты в любом текстовом редакторе
- Часто используются для хранения прошивок, машинного кода и других двоичных данных
- Позволяют компактно представить большие объемы двоичной информации
- Имеют специальную структуру для хранения адресов и типов данных
HEX-файлы широко применяются в микроэлектронике, программировании микроконтроллеров и работе с памятью устройств. Они позволяют удобно хранить и передавать двоичный код в текстовом виде.
Структура Intel HEX файла
Наиболее распространенным форматом HEX-файлов является Intel HEX. Он имеет следующую структуру:
Каждая строка файла начинается с двоеточия (:) и содержит несколько полей:
- Количество байт данных в строке (1 байт)
- Адрес, по которому должны быть записаны данные (2 байта)
- Тип записи (1 байт)
- Сами данные (N байт)
- Контрольная сумма (1 байт)
Пример строки Intel HEX файла:
:10010000214601360121470136007EFE09D2190140
Здесь:
- 10 — количество байт данных (16 в десятичной системе)
- 0100 — адрес начала данных
- 00 — тип записи (данные)
- 214601360121470136007EFE09D219 — сами данные
- 40 — контрольная сумма
Такая структура позволяет точно определить место каждого байта в памяти устройства при программировании.
Применение HEX-файлов
Основные области применения шестнадцатеричных HEX-файлов:
Программирование микроконтроллеров
HEX-файлы часто используются для хранения прошивок и загрузки их в память микроконтроллеров. Программаторы работают именно с HEX-форматом при записи кода в чипы.
Анализ содержимого памяти
С помощью HEX-редакторов можно просматривать и редактировать содержимое памяти устройств, анализируя двоичные данные в удобном шестнадцатеричном представлении.
Сохранение дампов памяти
HEX-формат удобен для сохранения дампов оперативной памяти, EEPROM и других типов памяти в виде текстовых файлов для дальнейшего анализа.
Передача двоичных данных
Текстовый формат HEX-файлов позволяет легко передавать двоичные данные по электронной почте и другим каналам связи без искажений.
Как открыть и проанализировать HEX-файл
Для работы с HEX-файлами используются специальные HEX-редакторы. Вот некоторые популярные программы:
HxD Hex Editor
Бесплатный и мощный HEX-редактор для Windows. Позволяет открывать, редактировать и анализировать файлы любого размера. Имеет удобный интерфейс и широкий набор инструментов.
Free Hex Editor Neo
Еще один популярный бесплатный HEX-редактор для Windows. Обладает богатым функционалом для просмотра и редактирования HEX-файлов.
Hex Fiend
Мощный HEX-редактор для macOS с открытым исходным кодом. Позволяет работать с файлами любого размера и имеет удобный интерфейс.
Okteta
HEX-редактор с открытым кодом для Linux. Предоставляет широкие возможности для анализа двоичных данных в шестнадцатеричном виде.
При открытии HEX-файла в редакторе вы увидите содержимое в виде последовательности шестнадцатеричных значений. Большинство редакторов также показывают ASCII-представление данных и позволяют редактировать их.
Создание и редактирование HEX-файлов
Существует несколько способов создания и редактирования HEX-файлов:
Использование компиляторов
Многие компиляторы для микроконтроллеров автоматически генерируют HEX-файлы при компиляции исходного кода. Это самый распространенный способ создания прошивок в формате HEX.
HEX-редакторы
Специализированные HEX-редакторы позволяют создавать новые HEX-файлы с нуля и редактировать существующие. Они предоставляют удобный интерфейс для работы с шестнадцатеричными данными.
Конвертация из других форматов
Многие утилиты позволяют конвертировать двоичные файлы в формат Intel HEX. Это удобно, когда нужно получить HEX-представление произвольных данных.
Программирование
С помощью языков программирования можно создавать скрипты для генерации HEX-файлов с нужной структурой и содержимым.
Анализ содержимого HEX-файлов
Структура записей
Каждая строка HEX-файла должна соответствовать формату Intel HEX. Проверьте корректность полей — количество байт, адрес, тип записи, контрольная сумма.
Типы записей
Различные типы записей (00 — данные, 01 — конец файла, 04 — расширенный адрес и т.д.) указывают на назначение данных в этой строке.
Адресация
Обратите внимание на адреса, по которым размещаются данные. Они должны соответствовать структуре памяти целевого устройства.
Содержимое данных
Анализируйте сами шестнадцатеричные данные и их ASCII-представление. Это может помочь выявить закономерности и структуру кода.
Контрольные суммы
Проверяйте корректность контрольных сумм для каждой строки. Это поможет убедиться в целостности данных.
Особенности работы с HEX-файлами
При работе с HEX-файлами следует учитывать некоторые особенности:
Размер файла
HEX-файлы могут быть очень большими, особенно для сложных прошивок. Убедитесь, что ваш редактор способен обрабатывать файлы такого размера.
Целостность данных
Любое изменение в HEX-файле может привести к некорректной работе прошивки. Будьте осторожны при редактировании и всегда проверяйте контрольные суммы.
Совместимость форматов
Существует несколько вариантов формата Intel HEX (I8HEX, I16HEX, I32HEX). Убедитесь, что вы используете правильный формат для вашего устройства.
Адресация памяти
При анализе HEX-файла учитывайте особенности адресации памяти целевого устройства. Некоторые микроконтроллеры используют адресацию по словам, а не по байтам.
Понимание структуры и особенностей HEX-файлов позволяет эффективно работать с прошивками и двоичными данными в удобном текстовом формате. Это важный навык для разработчиков встраиваемых систем и специалистов по микроэлектронике.
Что такое файлы HEX и как их открыть? (Обновлено 2023 г.)
Расширение файла: | HEX |
Описание типа файла: | Hexadecimal Source File |
Разработчик типа файла: | Intel Corporation |
Основное связанное программное обеспечение: | Heaventools FlexHex |
Разработчик основного программного обеспечения: | Heaventools Software |
Откройте ваши файлы с помощью FileViewPro File Viewer
Скачать File Opener
Установить необязательные продукты — FileViewPro (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление
Выпуск программ для ПО Heaventools FlexHex способствовал разработке Hexadecimal Source File типа файла, автором которого стал Heaventools Software. Наши внутренние данные веб-отслеживания показывают, что файлы Hexadecimal Source File пользуются наибольшей популярностью среди пользователей, использующих операционную систему Windows 10, а также проживающих в Taiwan. Большинство из этих пользователей используют веб-браузер Google Chrome.
Связанные разработчики и программное обеспечение
Cygnus Hex Editor от SoftCircuits | |
Hex Workshop Hex Editor от BreakPoint Software | |
Smith Micro StuffIt Deluxe от Smith Micro Software | |
HHD Hex Editor от HHD Software | |
UUDeview от Open Source |
Показать больше
Топ языков пользователей HEX
Топ файловых браузеров, используемых пользователями HEX
Подходит для установки на ПК?
Подходит для установки на мобильное устройство?
Топ стран, в которых используют файл HEX
Топ операционных систем среди пользователей
Windows 7 | Windows 10 | Windows 8. 1 | Windows XP |
Связанные операционные системы
Windows | |
Mac | |
iOS | |
Android | |
Linux |
Прочие типы файлов, связанные с файлами HEX
расширение | Разработчик типа файла | Категория файла | Описание типа файла |
---|---|---|---|
.MANIFEST | Microsoft Corporation | Системные файлы | Windows Application Manifest File |
.RTS | Heaventools Software | Файлы разработчика | Resource Tuner Console Script |
.TXX | National Library of Medicine | Файлы разработчика | Insight Segmentation And Registration Toolkit Data File |
.PSM1 | Microsoft Corporation | Файлы разработчика | Windows PowerShell Script Module File |
. A8S | Steven Glanville | Файлы разработчика | Anim8or Script |
.DOR | Graphisoft | Файлы разработчика | ArchiCAD Geometric Description Language File |
.LNT | Gimpel Software | Файлы разработчика | PC-lint/FlexeLint Configuration File |
.DSU | Schneider Electric | Файлы разработчика | ProWORX Nxt Data Setup |
.PBX | Sybase, Inc | Файлы разработчика | PowerBuilder Extension File |
.XR | Red Hat | Файлы разработчика | Cygwin Ld-scripts Data |
НАЧАЛО
Совместима с Windows 2000, XP, Vista, 7, 8 и 10
Установить необязательные продукты — FileViewPro (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление
«FileViewPro позволяет открыть любой файл с помощью одной программы, избавляя вас от необходимости поиска по папкам с файлами, разбросанным по всему жёсткому диску. FileViewPro позволяет открыть файл любого типа, будь то документ, электронная таблица, презентация или файл другого типа». — Обзор Softonic
*Файлы, которые не поддерживаются, могут быть открыты в двоичном формате.
Copyright © 2010-2023 FileViewPro
HEX-редакторы и редактирование любых типов файлов
Сейчас будет большой материал на тему того, из чего состоят данные и как их можно редактировать. Многие знают, что любой файл на компьютере (картинка, текстовый или мультимедийный) представляет собой двоичный код – нули и единицы. Для редактирования таких файлов используются HEX-редакторы – приложение, редактирующее данные, состоящие из байтового кода. Байты в редакторе представлены в виде шестнадцатеричной системы.
Расширение файла
Проблема заключается в огромном количестве типов файлов и поначалу не ясно, каким образом операционная система определяет текстовые, мультимедийные или архивные и прочие типы данных. Как известно, определение файла системой осуществляется с помощью расширения, добавляемого после названия, например, «. exe», «.txt» и другие.
Настройки в ОС гибкие, а значит расширение любого файла можно удалить, но тогда операционная система не сможет открыть его, она не поймет, с помощью какой программы его запустить. При этом логическая структура объекта не изменится. На изображении видно текстовый файл, а рядом с ним тот же самое, но без расширения и иконка у него белая.
Если объект без расширения остается тем же самым файлом с логическим набором символом, значит расширение не определяет его тип, но тогда что? Есть такое понятие, как формат – это и определяет тип, также это есть спецификация структуры данных. Расширение же совершенно другой термин. А что делать, если пользователю изначально попался файл без расширения, но его срочно нужно открыть, а чем – неизвестно?
Дескрипторы
Все файлы можно грубо говоря разделить на две составляющие – заголовок, где содержатся данные идентификации объекта, различные метаданные. Вторая составляющая – «тело» объекта, с помощью которого определяется тип объекта и части заголовка, имеющего название дескриптора. Два популярных дескриптора – ASCII и HEX. Второй вариант анализируется при помощи редакторов, о которых было сказано в начале.
Первый метод ASCII определяется с помощью текстового редактора, например, Notepad++, правда, стоит учесть один момент – некоторые наборы байтов не удастся преобразовать в формат ASCII, а значит рекомендуется применять HEX-редакторы. Запустив любой файлик с помощью такой утилиты, в окне отобразится вид матрицы с последовательностью байтов, где один байт содержится в одной из ячеек. Сведения о дескрипторе обычно находятся в первых 3-х ячейках, редко в большем количестве. Ячейки считаются по горизонтали. Данные, отображённые в ячейках представлены в виде шестнадцатеричном коде.
Расшифровка дескриптора
Чтобы понять, что за данные там находятся, нужно код расшифровать. Для этого понадобится специальный сервис, определяющий форматы файлов, например, open-file.ru. Но есть и другие ресурсы, которые легко найти в интернете. После загрузки файла на сайт произойдет анализ данных, а затем вывод результата. Ниже появится таблица с типом, форматом и описанием файла.
То, что мы разобрали выше – использование HEX-редакторов. Теперь разберемся с кодом ASCII. Данный код можно проанализировать при помощи того же open-file.ru. Другими словами, оба кода проверяются на ресурсе и ничего по сути не нужно вводить.
Иногда формат определить не так просто. Это касается ASCII-заголовков. Дело в том, что первые несколько символов могут иметь отношение к расширениям файла, а может и к нескольким форматам.
Конечно, есть вариант определения формата. Для анализа будет использоваться несколько строк, а не одна. Тогда какой-то из элементов, находящийся там, по любому будет указывать на тип объекта.
Что еще можно делать с помощью HEX-редактора
Помимо того, что HEX-редакторы помогают проанализировать любой файл, возможно:
- работать с дисковыми образами;
- редактировать разделы;
- изменять содержимое ОЗУ;
- изменять виртуального адресного пространства процесса и прочее.
К примеру, утилиты подобного типа используют в разработке ПО. Когда необходимо внести данные уже после компиляции программы, но перекомпилировать ее не хочется. Любой код программы можно изменить с помощью HEX-редактора. Конечно, это нужно уметь делать, находить нужные данные. Таким образом, добиваются исправления ошибок в коде, либо используют для взлома и читерства. Это значит, применение HEX-редакторов очень широкое.
Какие HEX-редакторы использовать
Существует очень много программ для редактирования данных, и вот они представлены ниже:
Free Hex Editor Neo
Популярная утилита для Windows. С помощью неё пользователю не составит открыть любой тип файла и изменить его. Если что-то отредактировано не так, в утилите есть история изменений и всегда можно вернутся к изначальному состоянию.
Инструмент работает очень быстро, при этом не много весит, а сама способна работать с файлами большого объема. Интерфейс простой и подходит для новичков, присутствует русский язык.
WinHex
Данный редактор можно использовать в демо-версии некоторое время, а потом необходимо приобрести. Инструмент универсальный, где обнаружено много интересных опций.
Есть возможность работать не только с файлами, но и с жёсткими дисками, флеш-носителями, оптическим дисками и даже дискетами. Поддерживаются все файловые системы Windows. Поддерживает функции клонирования разделов и полного удаления данных без возможности восстановления
Если вы новичок, то этой программы вам хватит, тем более в разделе Help есть опция переключения на русскоязычный интерфейс.
HexCmp
Утилита 2 в 1, так как имеет функцию сравнения файлов и встроенный HEX-редактор. Иногда может понадобится сравнения данных файлов, для определения отличий и сходств, и анализа структуры объектов различных форматов.
При отличии в двух файлов области на матрице будут окрашены в какой-либо цвет, а само сравнение происходит в считанные секунды. Правда, для анализа подойдут файлы не более 4 GB.
Сама утилита имеет возможности изменения интерфейса. Что значит, пользователь может настроить его под себя. Работа будет происходить быстрее.
HxD Hex Editor
Эта штука поставляется бесплатно, но она способна работать с объемными данными любых форматов и кодировок. Есть возможность изменения оперативной памяти и жёсткого диска.
Программа сочетает в себе вывод шестнадцатеричного кода и текстового ASCII. Интерфейс для англоязычного интерфейса вполне прост, поэтому работа с ним не составит труда, особенно, если вы уже работали в подобных редакторах.
Hex Workshop
Если какой-то файл не открылся в одном редакторе, значит откроется в этом. Поэтому я и привел здесь список из нескольких утилит. Указанный инструмент отвечает за открытие бинарных файлов. Настроек много, а системные требования доступны для любого компьютера.
Работа в этом редакторе проста, как при печати в Word. Есть опции сравнения файлов, их контрольных сумм и экспорт анализа в различные форматы, например, html.
Если необходимо перевести один код в другую систему счисления, то в Hex Workshop присутствует конвертер. Программка условно-бесплатная, что можно считать одним из недостатков.
Вот вы узнали, что такое HEX-редакторы и зачем они используются. В будущем постараюсь написать статьи по работе с ними, например, когда необходимо отредактировать какой-то файл.
Шестнадцатеричный файл (формат Intel) (.hex) Определение
Текстовый файл ASCII (с расширением .hex). Вы можете использовать шестнадцатеричный файл (формат Intel) (.hex) в Квартус ® Прайм программное обеспечение для хранения начальных значений памяти для блока памяти, такого как RAM или ROM, то есть реализованный в устройстве FPGA, или для создания исполняемых файлов программного проекта.
Вы можете использовать файлы .hex
как входные файлы в
Квартус
- Редактор памяти может создать файл . hex для инициализации памяти в компиляторе и симуляторе. Вы также можете использовать файл инициализации памяти (.mif) для предоставления данных инициализации памяти.
- Редактор содержимого внутрисистемной памяти может использовать и создавать файл .hex для импорта и экспорта данных.
Формат каждой строки в
.hexfile это
следующим образом: :AABBBBCCDD"¦DDEE | |
---|---|
Код | Определение |
| количество байт в поле данных
( |
| начальный адрес |
| Тип (00 = данные, 01 = конец файла, 02 = смещение адреса) |
| поле данных |
| значение контрольной суммы |
Важно: из-за сложности шестнадцатеричного (Intel-Format) Тип файла, Intel рекомендует использовать Quartus ® Prime Memory Editor для создавать файлы .hex. |
Вы можете хранить данные конфигурации для одного или нескольких устройств Intel. в выходной файл, называемый шестнадцатеричным (Intel-Format) выходным файлом (.шестнадцатеричный). Формат файла .hexout представляет собой текстовый файл ASCII. с расширением .hexout, чтобы избежать перезаписи начального файлы содержимого памяти с расширением .hex.
Ширина данных .hex файл всегда кратен 8 битам. Когда вы инициализируете память блок, ширина которого отличается от ширины файла .hex, Квартус ® Программное обеспечение Prime оборачивает или дополняет файл, как описано в таблице ниже:
Ширина данных файла больше, чем ширина памяти | Ширина данных файла меньше ширины памяти |
---|---|
Размер памяти кратное 8:
Объем памяти не кратно 8: Программное обеспечение Quartus ® Prime упаковывает данные в ширина памяти, кратная 8 и чуть больше фактическая ширина памяти, а затем усекает блок памяти до реальный размер ширины памяти, не кратный 8. |
|
Если размер файла .hex не соответствует размеру память, которую вы инициализируете, Программное обеспечение Quartus ® Prime работает, как описано в таблице ниже:
Глубина данных файла больше, чем глубина памяти | Глубина данных файла меньше глубины памяти |
---|---|
Игнорирует дополнительные данные. |
|
Примечание. Глубина данных файла относится к количеству адресов, которые вы инициализируете. квартус
Программное обеспечение II заполняет адреса, которые вы не инициализируете, нулями или < F…F
>, в зависимости от того, является ли глубина данных файла UFM или
нет.
Примечание:
в Программное обеспечение Quartus ® Prime, у вас есть возможность чтения или запись файлов .hex в режим байтовой адресации (шестнадцатеричный формат Intel) или адресуемый по словам режим. Вы можете выбрать один из двух режимов, изменение Чтение или запись Шестнадцатеричные файлы (.hex) с использованием байтовой адресации (Intel формат) вариант в Квартус ® Программное обеспечение Prime. Установка этого на странице «Редактор памяти» в разделе «Параметры». чат. Включение этой опции для текущего проекта переопределяет глобальную настройку.
Программное обеспечение Quartus ® Prime всегда читает слово адресуемые файлы .hex в адресный режим слова, даже если чтение или запись шестнадцатеричных файлов (.hex) с использованием байтовая адресация (формат Intel) включена.
Понимание шестнадцатеричных файлов — электронные продукты
Когда вы создаете программу для Microchip PIC, компилятор создаст файл сборки, который будет собран в двоичный файл с суффиксом .hex для загрузки в микроконтроллер. Двоичный файл содержит 1 и 0, которые составляют команды машинного языка, которые в конечном итоге управляют внутренней работой микроконтроллера. Бывают случаи, когда вам может понадобиться знать структуру этого двоичного файла, особенно если вы хотите создать собственную программу загрузчика для программирования микроконтроллера. В этой статье я опишу, как понять структуру этого бинарного файла.
Сначала создадим простую программу на Great Cow Basic. Эта программа будет мигать светодиодом, подключенным к цифровому контакту 13 на модуле CHIPINO.
Созданный файл ассемблерного кода доступен и может быть легко просмотрен в окне рядом с файлом Basic. Я буду использовать это для справки в разделах ниже. Но сначала давайте посмотрим на файл .hex, созданный, когда этот файл сборки собирается в двоичный файл .hex.
;Векторы
ORG 0
перейти к BASPROGRAMSTART
ORG 4
retfie
;************************************************ *******
;Начало страницы памяти программ 0
ORG 5
BASPROGRAMSTART
;Вызов процедур инициализации
вызов INITSYS
;Автоматическая установка направления выводов ;Программа для мигания двух светодиодов на PORTB, биты 0 и 1
;Модель микросхемы
;Основная процедура
START
;SET D13 ON
bankel PORTB
bsf PORTB,5
; подождите 1 сек
MOVLW 1
MOVWF SYSWAITTEMPS
CALL DOLY_S
; SET D13 OFF
BCF PORTB, 5
; ожидание 1 SEC
MOVLW 1
MOVWF SYSWAITEMPS
333 333333333333333333 гг. goto BASPROGRAMEND
Программа скомпилирована и собрана и создает двоичный файл .hex, как показано на рисунке 2. Этот файл был открыт в текстовом редакторе блокнота, так что это необработанный файл. Казалось бы, очень сложно понять код из этого странного набора символов, но давайте разберем его, и вы увидите, что он не такой уж и запутанный.
Рисунок 2: Двоичный файл .HEX
Прежде всего, поймите, что этот файл .hex имеет формат Intel Hex32. Это означает, что он может поддерживать 32-битные адресные устройства памяти. Но формат разбит на верхние 16 бит и младшие 16 бит. Старшие 16 бит известны как расширенный адрес.
Каждая новая строка начинается с двоеточия. Затем цифры и буквы, которые следуют, являются шестнадцатеричными кодами, которые являются управляющими символами, адресами или байтами данных. Каждая строка в файле имеет следующий формат:
:BBaaAATTDDCC
BB содержит количество байтов данных в строке.
aaAA — адрес в памяти, где будут храниться байты. Это число на самом деле удвоено, о чем я расскажу чуть позже. Кроме того, младший байт — это первый aa , за которым следует старший байт AA .
TT — это тип данных.
00 — означает данные программы.
01 – означает конец файла (EOF).
04 – означает расширенный адрес. Это указывает на то, что значение данных является старшими 16 битами адреса.
DD — это фактические байты данных, которые содержат машинный код, созданный вашей программой. В одной строке может быть несколько байтов. Значение BB указывает, сколько байтов содержится в строке.
CC вычисляется значение контрольной суммы для контроля ошибок. Это вычисление с дополнением до 2: BB + AAAA + TT + DD.
Итак, давайте посмотрим на первую строку.
:020000040000FA
02 указывает количество байтов в строке. В данном случае это два байта.
0000 — это адрес памяти для размещения байтов, но его значение было умножено на 2. Обычно мы делим адрес на 2, но в данном случае 0000 / 2 = 0000. Таким образом, адрес равен 0000.
04 означает, что это расширенный адрес. Таким образом, данные содержат старшие 16 бит адреса. Любые адреса младших битов, которые следуют за этой строкой, будут использовать эти старшие биты, пока новая строка 04 не изменит старшие биты.
0000 это старшие 16 бит адреса, обозначенного типом данных 04.
FA — это дополнение 2 к сумме байтов: 02 + 00 + 00 + 04 + 00 + 00.
Примечание : дополнение 2 — это просто инвертированное двоичное значение, к которому прибавляется 1. Затем результат конвертируется в формат .hex.
, т.е.
02 + 00+ 00 + 04 + 00 + 00 = 06 = 00000110 двоичный двоичный будет иметь верхний (расширенный) адрес 0000 и начнется с адреса памяти 00000000 в PIC Microchip.
Следующая строка разбивается следующим образом:
:020000000528D1
02 указывает на два байта данных.
0000 снова адрес.
00 — это тип данных, поэтому байты данных — это данные программы.
0528 — это два байта данных. Но они перевернуты, так как младший байт стоит первым, так что это действительно 2805 шестнадцатеричный.
D1 — контрольная сумма дополнения 2.
Таким образом, по адресу 00000000 (расширенное и младшее слово вместе) байт данных программы 2805 сохранен. Но что означает этот байт?
Для этого нам необходимо обратиться к спецификации PIC16F886 (рис. 3). В техпаспорте указан набор инструкций по ассемблерному коду. И для каждой инструкции в таблице 15-2 ниже показан 14-битный код операции. Это двоичный машинный код инструкции.
Таким образом, преобразуя 2805 в двоичный код, мы получаем 0010100000000101. Поскольку PIC16F886 использует 14-битный код операции, мы можем игнорировать первые два бита, которые являются нулями. Это оставляет нас с 10100000000101. Если затем просмотреть список кодов операций, мы обнаружим, что этот код соответствует инструкции GOTO 10 1kkk kkkk kkkk. Часть kkk.. представляет адрес для перехода. В этом случае значение после 101 для goto оставляет значение 00000000101 или шестнадцатеричное значение 05.
Таким образом, это означает, что эта строка в шестнадцатеричном файле представляет собой командную строку GOTO 0x05 .
Рисунок 3: Инструкции PIC16F886 и команда GOTO
Давайте посмотрим, верен ли наш анализ. Я буду использовать Real Pic Simulator для загрузки файла .hex, так как он имеет возможность дизассемблировать файл .hex обратно в команды сборки. На рисунке 4 показаны результаты, и первая строка подтверждает наш анализ.
Рисунок 4: Окно разборки
Но что такое L0005H?
На самом деле это метка, созданная в дизассемблере для обозначения того, куда «идти». Мы должны посмотреть на строку 0005h, чтобы увидеть эту метку.
И это подтверждает правильность нашего анализа. GOTO 0005h привел программу к адресу 0005h.
Мы также можем видеть это в верхней части файла сборки из ранее.
Директива ассемблера ORG 0 указывает, что код под ней следует разместить по адресу памяти 0000h. В этой строке находится командная строка:
ПЕРЕЙТИ К БАСПРОГРАММЕ СТАРТ. Посмотрите немного дальше и мы увидим ORG 5 для адреса 0005h и метку BASPROGRAMSTART.
Таким образом, наш GOTO 0005h также соответствует файлу сборки.
ORG 0
перейти к BASPROGRAMSTART
ORG 4
восстановить
;****************************************** **************
;Начало страницы памяти программ 0
ORG 5
BASPROGRAMSTART
Итак, теперь мы можем перейти к следующей строке.
:1000080009002C2083160313861283120313861605
Похоже, там много чего происходит. Давайте сломаем это.
10 указывает 16 байтов данных. Помните, что это шестнадцатеричное значение, поэтому 10 шестнадцатеричных на самом деле 16 десятичных.
0008 — это адрес, и на этот раз мы должны разделить его на 2. 0008 / 2 = 0004h.
Таким образом, данные будут помещены в ячейку памяти 00000004h.
00 — это тип данных, поэтому байты данных — это данные программы.
0900 — первые два байта данных. Но опять же, они меняются местами, так как младший байт идет первым, так что это действительно 0090 шестн.
This byte is followed by 14 more so I’ll list them in high byte –low byte format:
202C
1683
1303
1286
1283
1303
1686
05 — это контрольная сумма дополнения 2.
Сейчас я не буду перечислять их все, но мы можем посмотреть на первую пару и преобразовать их в 14-битный опкод, удалив первые два нуля.
0009 или 00000000001001 точно соответствует команде RETFIE или RETurn From Interrupt Enable.
RETFIE – 00000000001001
Таким образом, в ячейке памяти 0x0004 находится RETFIE
202C или 10000000101100. Это нужно разбить.
100 – соответствует команде подпрограммы CALL.
CALL – 100kkkkkkkkkkk
Буквы K обозначают ячейку памяти для вызова или перехода.
00000101100 – это ячейка памяти для вызова, которая представляет собой 2C hex или ячейку памяти 0x002C
Таким образом, в ячейке памяти 0x0005 находится CALL 0x002C
1683 или 01011010000011. Это нужно разбить.
0101 – соответствует команде BSF или регистру файла установки битов
BSF — 0101bbbfffffff
BSF состоит из двух частей; bbb и fffff .
bbb — место установки бита.
fffff — адрес регистра, содержащего этот бит.
fffff – это 0000011 или адрес памяти 0x0003h.
Если мы посмотрим на карту памяти PIC16F886 (в Real Pic Simulator), мы увидим, что регистр STATUS находится в ячейке памяти 0x0003h.
bbb – это 101 или номер бита 5.
Таким образом, бит 5 регистра состояния будет установлен в 1 при выполнении этой инструкции. Это бит RP0, если вы посмотрите на этот регистр в таблице данных.
Таким образом, в ячейке памяти 0x0006 находится BSF RP0, СТАТУС
Если мы вернемся назад и снова посмотрим на рисунок 4, мы увидим, что код соответствует нашему анализу.
Я мог бы продолжить оставшуюся часть файла, но, кажется, я показал вам, как все это работает.
Последняя строка в файле .hex:
:00000001FF
Эта строка разбивается следующим образом:
00 указывает на отсутствие байтов данных.
0000 — это снова адрес, но это бессмысленно, поскольку у нас нет байтов данных для хранения.
01 — это тип данных, указывающий, что это конец файла.
FF — контрольная сумма дополнения 2.
Эта строка означает, что вы достигли конца файла.
В качестве последнего шага давайте загрузим файл .hex в окно программатора PICkit 2, чтобы посмотреть, что он покажет. Окно памяти программы показывает адрес в самом левом углу и слова данных в шестнадцатеричном формате по всему экрану.
то есть
0000 2805 3FFF 3FFF 3FFF 0009202C 1683 1303
Рисунок 5: Представление памяти PICkit 2
Вы можете видеть, что шестнадцатеричные значения, которые мы извлекли из файла .