Лучшее программное обеспечение для конвертации файлов ASM в HEX для настройки ваших машин
Файлы ASM — это программы, написанные на низкоуровневом языке программирования. Эти типы файлов могут использоваться для создания «строительных лесов», на основе которых будет работать ваша запрограммированная машина. Чтобы иметь возможность программировать свой микроконтроллер, пульты дистанционного управления или офисные машины, вам необходимо преобразовать файлы ASM в HEX.
HEX-файлы — это язык, на котором ваше конкретное устройство (система управления двигателем, офисный сервер и т. Д.) Реагирует на задачу, для которой оно было настроено. HEX-файлы содержат всю информацию, необходимую для настройки, настройки и использования вашего компьютера, и могут храниться на вашем жестком диске как в двоичном, так и в текстовом формате.
Вы хотите преобразовать файлы ASM в файл HEX, чтобы запрограммировать ваше устройство ? Если ответ «Да», то вы пришли в нужное место.
В этой статье мы рассмотрим некоторые из лучших программных опций на рынке, которые помогут вам с легкостью конвертировать файлы ASM в HEX.
1
MPLAB X IDE
MPLAB X IDE — это отличное программное обеспечение для интегрированной среды разработки, которое позволяет создавать различные приложения для микроконтроллеров, а также контроллеров цифровых сигналов.
Это программное обеспечение предлагает вам невероятно широкий спектр инструментов для создания, изменения и представления ваших проектов на профессиональном уровне. Вы также можете использовать это программное обеспечение для преобразования файлов ASM в файлы HEX, а затем применить их на своем компьютере.
Процесс преобразования файлов ASM в HEX не так прост, как следующие программные опции, но это программное обеспечение обладает невероятным набором полезных функций.
Вы должны быть опытным пользователем, чтобы получить полный эффект от этого программного обеспечения. Если вы чувствуете себя немного перегруженными всеми настройками, вы можете попробовать некоторые из следующих опций программного обеспечения, которые мы обсудим в этой статье.
Вот некоторые из лучших возможностей MPLAB X IDE:
- Поддерживает шаблоны Live Code
- Вы можете настроить свой собственный стиль формата кода
- Быстрая навигация
- Полностью настраиваемое рабочее пространство
- Может расширять функциональность с помощью менеджера плагинов MPLAB IDE
Чтобы начать процесс конвертации, откройте файл ASM и запустите опцию быстрой сборки внутри MPLAB. Это скомпилирует весь диапазон данных в один HEX-файл, который вы можете легко экспортировать и использовать для программирования своей машины.
Скачать MPLAB X IDE
2
Конвертер ASM в HEX
Конвертер ASM в HEX — это еще один очень полезный инструмент, который позволяет вам легко преобразовывать файлы .asm в HEX и экспортировать их, чтобы оживить вашу машину.
По сравнению с ранее упомянутым программным обеспечением, Конвертер ASM в HEX не имеет широкого диапазона параметров настройки, но он предлагает быстрый и простой способ выполнить желаемое преобразование. Это программное обеспечение невелико, но хорошо справляется со своей задачей.
Скачать ASM в HEX Converter
3
ARM конвертер
ARM Converter — это еще один легкий конвертер, который поможет вам преобразовать файлы ASM в файлы HEX. Параметры настройки для вашего выходного файла не так сложны, как в случае с нашим лучшим выбором, но делают работу быстро.
Еще одна хорошая вещь в ARM Converter заключается в том, что его влияние на вашу систему незаметно.
Скачать ARM Converter
4
Text Hex Convert
Text Hex Converter — еще один легкий, но полезный инструмент, который может помочь вам выполнить преобразования между текстом ASM и HEX-кодированием.
Поскольку это такое легковесное программное обеспечение, влияние на системные ресурсы минимально, и полученные HEX-файлы имеют хорошее качество.
Скачать Text Hex Convert
Вывод
В этой статье мы рассмотрели некоторые из лучших вариантов программного обеспечения, которые позволяют преобразовывать файлы ASM в файлы HEX.
Если вы опытный программист, вы можете попробовать MPLAB. Это программное обеспечение предлагает широкий спектр настроек.
Если вам нужно всего лишь преобразовать несколько файлов в HEX, вы можете выбрать один из 3 вариантов программного обеспечения, которые мы представили в этом списке.
Пожалуйста, не стесняйтесь сообщить нам, помогла ли вам эта статья, используя раздел комментариев ниже.
ЧИТАЙТЕ ТАКЖЕ:
- 5 лучших игровых программ для создания потрясающих игр
- Microsoft Quantum Network продвигает исследования в области квантовых вычислений
- 5 лучших бесплатных анти-кейлоггер программ, которые защитят данные на вашем компьютере [2019 Список]
Как перевести asm в hex
Скачать бесплатно книгу Ассемблер для начинающих. Как мы увидели выше, с двоичным числом удобно работать при поразрядных операциях, однако запись двоичного числа получается довольно громоздкой. Чтобы немного упростить жизнь программистам, была придумана шестнадцатеричная система счисления, которая использует 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Соответственно, основание шестнадцатеричной системы равно Шестнадцатеричное число является компактным и лёгким для чтения.
Поиск данных по Вашему запросу:
Как перевести asm в hex
Схемы, справочники, даташиты:
Прайс-листы, цены:
Обсуждения, статьи, мануалы:
Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам.
Содержание:
- Конвертировать ASM в C (не обратный инженер)
- Компиляция ASM в HEX (PIC18F4220)
- Перевод из HEX в DEC (из 16 в 10)
- Есть ли конвертер ASM -> C++
- Русский Flowcode
- Please turn JavaScript on and reload the page.
- Цель — как получить *.hex файл, делаем проект в первый раз
- Академия Гитарной Электроники: Asm—>hex — Академия Гитарной Электроники
- Печать шестнадцатеричных цифр со сборкой
- Из hex в asm.(MPLab)
ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: How to produce HEX file by MPLABx
Конвертировать ASM в C (не обратный инженер)
Составить программу по выводу на экран мигающего окна, окрашенного красным цветом. Период и длительность мигания ввести с клавиатуры. Интегрированная среда программирования Tasm 5.
Добавлено в assembler. Дата Январь 25th, Дата Июнь 8th, Дата Март 15th, Дата Май 13th, Дата Апрель 25th, Пытался сделать пузыриком и инверсный вывод строки При инверсном выводе цифры выводит не все, а при сочетании букв и цифр выводит различные символы и знаки.
Дата Апрель 21st, Помогите найти минимальное и максимальное значения. Дата Март 24th, Дата Февраль 27th, Также помимо изложения принципов и механизмов работы процессора в защищенном и битном режимах, речь пойдет о программировании на ассемблере в операционных системах семейства Windows, как в битных, так и битных версиях. Рассматривается не только разработка обычных приложений для операционных систем Windows, но и разработка драйверов на ассемблере. При написании книги уделялось большое внимание именно практической составляющей, то есть изложение материала идет только по делу и только то, что необходимо знать любому системному и низко-уровневому программисту.
Последний раздел книги посвящен принципам работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний APIC. Добавлено в assembler , Заметки , Профлитература. Дата Февраль 19th, С мышью еще не работал. Дата Май 30th, Создание и продвижние сайта — Веб-сателлит. Net с помощью System. Beep — задержка воспроизведения звука. Необходимо в данной программе реализовать возврат значений из процедур через стек, адрес, регистр — совершить три разных возврата из трех разных процедур.
Асм вообще не дается, снизу размещу мои попытки и стартовый код…. Доброго времени суток. Прошу помочь реализовать программу, которая позволяет посчитать размер файла на диске. Как перевести число в строку на Ассемблере? TASM читать всё…. Даны две hex строки c0cdfea1ad0fe5d6dccd35cfe7dc b0ec6c9ffecf3e84f83dec как их проксорить xor и вывести результат в hex на экран? Купить книгу читать всё….
Компиляция ASM в HEX (PIC18F4220)
Файл обычно имеет расширение. Достоинством формата в отличие от простого двоичного является возможность указывать только определенные области адресов с точностью до байта. Многие микроконтроллерные архитектуры имеют несколько областей программирования с обширными пустотами в адресации между ними. Каждая строка представляет собой одну запись.
Можно ли перевести hex — файл в ассемблер и далее в файл СИ, для Прошивку в asm ->анализ кода, в итоге посмотрев на.
Перевод из HEX в DEC (из 16 в 10)
Есть законченный asm файл, надо перевести его в hex формат дабы залить в устройство. Как это делается? С асемблером я вобще ни как. Если ус-во отличается от «Компьютер персональный на базе процессора Intel», то надо использовать родной ассемблер для данного ус-ва, поскольку кто их знает как они какими значениями какие команды они там кодируют. По поводу «залить в устройство» — опять же девайс специфик. Заливается некий hex файл способ заливки — спец утилита. Очень ошибочное предположение и вообще обычно говорят не hex, а бинарник.
Есть ли конвертер ASM -> C++
Чего-то в мыпылабе я такой опции не нашел. Или не там искал? Сообщение от doctorr. Сообщение от Greg. Сообщение от bzx.
Новые книги Шпионские штучки: Новое и лучшее схем для радиолюбителей: Шпионские штучки и не только 2-е издание Arduino для изобретателей. Обучение электронике на 10 занимательных проектах Конструируем роботов.
Русский Flowcode
Специально для любознательного парня, который задал вопрос в комментариях. Запускаем AVR Studio:. Выбираем «New Project»:. Выбираем язык написания программы:. Заполняем поле «Project Name» и жмем «Finish»:.
Please turn JavaScript on and reload the page.
By fazacom , May 10, in AVR. Мы принимаем формат Sprint-Layout 6! Экспорт в Gerber из Sprint-Layout 6. Конденсаторы Panasonic. Часть 4. Полимеры — номенклатура.
Есть код на AVR-ассемблере. Необходимо asm-файл перегнать в hex. Сделал как здесь, но не сработало. Geany подсвечивает.
Цель — как получить *.hex файл, делаем проект в первый раз
Как перевести asm в hex
Форум Новые сообщения. Что нового Новые сообщения Недавняя активность. Вход Регистрация.
Академия Гитарной Электроники: Asm—>hex — Академия Гитарной Электроники
ВИДЕО ПО ТЕМЕ: Как загрузить HEX-файл в arduino
Выберите файл на вашем компьютере:. Или укажите ссылку на файл в Интернете:. Шестнадцатеричная система счисления HEX — это позиционная система счисления по целочисленному основанию В качестве шестнадцатеричных чисел используются цифры от 0 до 9 и латинские буквы от A до F. При кодировании в HEX каждый символ будет преобразован в двухразрядное шестнадцатеричное представление ASC-кода символа. При декодировании, система будет считывать по два символа и преобразовывать их в ASC-код, а затем в соответствующий символ.
Сделал герлянду на светодиодах с этого сайта. Все работает.
Печать шестнадцатеричных цифр со сборкой
Я хочу сделать сам себе mp3 плеер, но у меня возникла проблема: программа написанная для контроллера есть только в формате HEX, а так хочется посмотреть как реализовано взаимодействие программы и железа. Сам я пробовал получить исходники, но у меня мало что получилось максимум чего удалось достичь это получить кривые коды ASM с помощью программы PicDis Думаю, запрашиваемое преобразование невозможно, так как разным процам соответсвуют разные наборы инструкций, а значит, преобразование одного и того же C-кода дает разный HEX для разных процов. Чем могу помогу , был я на том сайте , правда полгода назад, плеер этот не заметил. А жаль В принципе хекс импортируешь в мплаб и уже асм готовый, в иде еще потрудиться надо , хекс она криво грузит. Но вот асм проанализировать Ида самое то.
Из hex в asm.(MPLab)
Я пытаюсь изучить сборку NASM, но, похоже, я стараюсь бороться с тем, что кажется просто на языках высокого уровня. Все учебники, которые я использую, обсуждают с использованием строк — на самом деле это кажется одной из их любимых вещей. Печать привет мир, переход от верхнего регистра к нижнему регистру и т. Однако я пытаюсь понять, как увеличивать и печатать шестнадцатеричные цифры в сборке NASM и не знаю, как действовать.
Assembler. Установка интерпретатора и запуск первой программы через DOSBox / Хабр
В данной статье разбирается способ установки интерпретатора и запуск файла EXE через DOSBox. Планировалось погрузить читателя в особенности программирования на TASM, но я согласился с комментаторами. Есть много учебников по Ассемблер и нет смысла перепечатывать эти знания вновь. Лично мне в изучении очень помог сайт av-assembler.ru. Рекомендую. В комментариях также вы найдёте много другой литературы по Assembler. А теперь перейдём к основной теме статьи.
Для начала давайте установим наш старенький интерпретатор.
Ссылка
Я прекрасно понимаю, что это ещё тот колхоз делиться файлами через обсуждения VK, но кто знает, во что может превратиться эта маленькая группа в будущем.
После распаковки файлов, советую сохранить их в папке Asm на диск C, чтобы иметь меньше расхождений с представленным тут материалом. Если вы разместите директорию в другое место, изменится лишь путь до файлов, когда вы будете использовать команду mount.
Для запуска интерпретатора нам так же потребуется эмулятор DOSBox. Он и оживит все наши компоненты. Скачаем и установим его!
Ссылка
В папке Asm я специально оставил файл code. asm. Именно на нём мы и потренируемся запускать нашу программу. Советую сохранить его копию, ибо там хранится весь код, который в 99% случаев будет присутствовать в каждом вашем проекте.
code.asms_s segment s_s ends d_s segment d_s ends c_s segment assume ss:s_s, ds:d_s, cs:c_s begin: mov ax, d_s mov ds, ax mov ax, 0 ; Your code needs to be here mov ah, 4ch int 21h c_s ends end begin
Итак. Запускаем наш DOSBox и видим следующее:
Для простоты сопоставим имя пути, по которому лежит наша папка Asm. Чтобы это сделать, пропишем следующую команду:
mount d: c:\asm
Здесь вместо d: мы можем использовать любую другую букву. Например назвать i или s. А C это наш реальный диск. Мы прописываем путь до наших файлов ассемблера.
Теперь, откроем смонтированный диск:
d:
Прописав команду dir, мы сможем увидеть все файлы, которые там хранятся. Здесь можно заметить и наш файл CODE с расширением ASM, а также дату его создания.
И только теперь мы начинаем запускать наш файл! Бедные программисты 20 века, как они только терпели всё это? Пропишем следующую команду:
tasm code. asm
После мы увидим следующее сообщение, а наша директория пополнится новым файлом с расширением OBJ.
Теперь пропишем ещё одну команду:
tlink code.obj
В нашей папке появилась ещё пара файлов – CODE.MAP и CODE.EXE. Последний как раз и есть исполняемый файл нашего кода assembler.
Если он появился, значит, мы можем запустить режим отладки нашей программы, введя команду последнюю команду. Обратите внимание, теперь мы не указываем расширение файла, который запускаем.
td code
Этот старинный интерфейс насквозь пропитан духом ушедшей эпохи старых операционных систем. Тем не менее…
Нажав F7 или fn + F7 вы сможете совершить 1 шаг по коду. Синяя строка начнёт движение вниз, изменяя значения регистров и флагов. Пока это всего лишь шаблон, на котором мы потренировались запускать нашу программу в режиме дебага. Реальное “волшебство” мы увидим лишь с полноценным кодом на asm.
Небольшой пример для запускаПрога проверяет, было ли передано верное число открывающих и закрывающих скобок:
s_s segment dw 20 dup('$') s_s ends d_s segment string db '()','$'; result db 0 d_s ends c_s segment assume ss:s_s,ds:d_s,cs:c_s begin: ; начало программы mov ax,d_s mov ds,ax xor ax,ax lea si, string ;Ищем в строке скобку search: lodsb ;Проверка, это конец строки? cmp al, '$' je endString ;Это открывающая или закрывающая скобка? ;Это открывающие скобки? cmp al, '(' je inStack cmp al, '{' je inStack cmp al, '[' je inStack ;Это закрывающие скобки? cmp al, ')' je outStack cmp al, '}' je outStack cmp al, ']' je outStack jmp search ;Помещаем скобку в Stack, увеличиваем счётчик inStack: inc cx push ax jmp search ;Выниманием из Stack скобку, проверяем пару outStack: ;Была передана лишняя закрыв. скобка? cmp cx, 0 je error3 dec cx pop bx ;Вскрытая скобка закрыта верно? cmp bl, '(' jne close1 cmp al, ')' jne error1 jmp search close1: cmp bl, '[' jne close2 cmp al, ']' jne error1 jmp search close2: cmp bl, '{' cmp al, '}' jne error1 jmp search ;Остались ли незакрытые скобки? endString: cmp cx, 0 jne error2 jmp exit ;Скобки остались, это ошибка №2 error2: mov result, 2 jmp exit ;Лишняя скобка передана, ошибка №3 error3: mov result, 3 jmp exit ;Закрывающая скобка несоответствует открывающей, ош №1 error1: mov result, 1 jmp exit ;Пред-завершение. Каков результат программы? exit: cmp result, 1 jne enough ;Ищем нужную скобку для исправления ошибки №1 cmp bl, '(' jne next1 mov bl, ')' jmp enough next1: cmp bl, '{' jne next2 mov bl, '}' jmp enough next2: cmp bl, '[' mov bl, ']' jmp enough enough: mov dl, result xor dx, dx mov dl, bl mov ah,4ch int 21h c_s ends end begin
Давайте ознакомимся с имеющимися разделами.
CS
Code segment – место, где turbo debug отражает все найденные строки кода. Важное замечание – все данные отражаются в TD в виде 16-ричной системы. А значит какая-нибудь ‘12’ это на самом деле 18, а реальное 12 это ‘C’. CS аналогичен разделу “Begin end.” на Pascal или функции main.
DS
Data segment, отражает данные, которые TD обнаружил в d_s. Справа мы видим их символьную (char) интерпретацию. В будущем мы сможем увидеть здесь наш “Hello, world”, интерпретируемый компилятором в числа, по таблице ASCII. Хорошей аналогией DS является раздел VAR, как в Pascal. Для простоты можно сказать, что это одно и тоже.
SS
Stack segment – место хранения данных нашего стека.
Регистры
Все эти ax, bx, cx, si, di, ss, cs и т. д. – это наши регистры, которые используются как переменные для хранения данных. Да, это очень грубое упрощение. Переменные из Pascal и регистры Assembler это не одно и тоже, но надеюсь, такая аналогия даёт более чёткую картину. Здесь мы сможем хранить данные о циклах, арифметических операциях, системных прерываниях и т. д.
Флаги
Все эти c, z, s, o, p и т.д. это и есть наши флаги. В них хранится промежуточная информация о том, например, было ли полученное число чётным, произошло ранее переполнение или нет. Они могут хранить результат побитого сдвига. По опыту, могу сказать, на них обращаешь внимание лишь при отладке программы, а не во время штатного исполнения.
Ещё одно замечание. Если вы измените данные исходного файла с расширением .ASM, то вам придётся совершить все ранее описанные операции вновь, ибо обновив например code.asm вы не меняете code.obj или code.exe.
Маленькая шпаргалка для заметок:
mount d: c:\asm – создаём виртуальный диск, где корень –папка asm
d: — открываем созданный диск
tasm code.asm – компилируем исходный код
tlink code.obj – создаём исполняемый файл
td code – запускаем debug
F7 – делаем шаг в программе
Буду ждать комментарии от всех, кому интересен Assembler. Чувствую, я где-то мог накосячить в терминологии или обозначении того или иного элемента. Но статья на Habr отличный повод всё повторить.
Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008)
Щелкаем по OK.
Файл проекта с расширением .PJT cоздан и «ушел» в папку Multi.
Одновременно открывается окно Edit Project, в котором предлагается создать «пустышку»
HEX-файла.
Но перед этим, на всякий случай, нужно убедиться, что в окошке Divelopment Mode установлено: MPLAB SIM PIC16F84A (то, чем мы занимались в настройках), а в окошке
Language Tool Suite установлено: Microchip.
Создаем «пустышку».
В списке Project Files щелкаем по строке multi(.hex).
После этого, строка выделяется и кнопка Node Properties… активизируется.
Щелкаем по ней.
Открывается окно Node Properties.
51
Менять здесь ничего не нужно (настройки по умолчанию).
Единственное, что нужно сделать – убедиться в том, что в окошке Node установлено: MULTI. HEX, а в окошке Language Tool установлено: MPASM.
Щелкаем по OK. «Пустышка» HEX — файла создана и «ушла» в папку Multi. Опять появится окно Edit Project. Теперь создаем «пустышку» ASM-файла.
Щелкаем по кнопке Add Node… Раскрывается окно Add Node.
Это то же самое , что и окно New Project, только предназначенное для создания ASM-файла, поэтому нужно сделать в точности то же самое, что и в окне New Project.
Единственное различие может быть в том, что, если Вы указываете название файла с расширением, то естественно, что оно должно быть не .PJT, а .ASM
Чтобы не ошибиться, настучите Multi.asm и дело с концом.
Щелкаем по OK. «Пустышка» ASM-файла создана. Опять появится окно Edit Project.
52
В списке этого окна Вы увидите, что к HEX-файлу добавился ASM-файл. Щелкните по OK.
Окно Edit Project закроется, и Вы останетесь «один на один» с пустым файлом Untitled… .
Необходимо сделать его пригодным для работы по составлению текста программы (следовательно, речь идет о файле с расширением . ASM).
Для этого необходимо назвать его Multi.asm и «вписать» его в ранее созданную «пустышку» ASM-файла (см. выше).
Делается это так: щелкаем по слову File в главном меню, а затем — по строке выпадающего списка Save As.. .
Открывается уже знакомое нам окно, только с названием Save File As. Выбираем папку Multi и определяем название файла (Multi.asm).
Здесь Вы еще увидите нечто, перед которым можно поставить или не поставить галочку. Ничего менять не нужно.
Щелкаем по OK и опять остаемся наедине с пустым файлом, только теперь он «прописан» в папке Multi под названием multi.asm (см. адресную строку окна файла).
Обратите внимание: и в списке окна Edit Project, и в адресной строке созданного нами ASM — файла, большая буква M, в названии файла Multi.asm, «превратилась» в маленькую m. Пусть Вас это не смущает, так как «что в лоб, что по лбу — все едино».
Особо дотошные могут работать только в нижнем регистре, а я, в этом смысле, привык работать по старинке. Каюсь, грешен, но ничего с собой поделать не могу.
Итак, проект Multi создан, и перед Вашими глазами сейчас находится «поле предстоящих сражений» (файл Multi.asm).
Именно на этом, пока пустом, «белом листе» мы и будем заниматься тем, что называется
53
программированием.
«Для полного счастья», нужно потренироваться в закрытии и открытии проекта. Сейчас проект открыт.
Для того чтобы закрыть проект, в главном меню, щелкните по слову Project, и в выпадающем списке, щелкните по строке Close Project (закрыть проект).
При первом закрытии, программа может ничего не спросить, но при последующих закрытиях проекта, она может спросить: сохранить или нет внесенные изменения?
Тут, как говорится, дело хозяйское.
В этом случае нужно щелкнуть или по Yes или по No и проект закроется.
Для того чтобы открыть проект, в главном меню, щелкните по слову Project, и в выпадающем списке щелкните по строке Open Project (открыть проект).
Откроется знакомое Вам окно, только с названием Open Project, в котором нужно указать папку, в которой находится искомый проект (в нашем случае — папка Multi).
После открытия этой папки, в списке (под окошком File Name) появится название файла проекта.
Если это то, что нужно, то необходимо щелкнуть по строке с названием файла проекта, а затем — по OK.
Окно Open Project закроется, и в нашем случае, появится предупреждение, что HEX-файл «пустой», то есть, текст программы не ассемблировался, что и соответствует действительности.
Говорим спасибо программе за «бдительность» и щелкаем по OK.
После этого, проект откроется, и Вы увидите, в нашем случае, пустой файл Multi.asm во всей своей «боевой готовности».
Потренируйтесь. Создайте несколько своих пустых проектов в папке Pic.
Примечание: если производилось ассемблирование (HEX-файл не пустой), то указанное выше предупреждение, не выдается, и ASM-файл открывается сразу.
Если после работы с текстом программы, производилось ассемблирование, и сразу же после этого проект закрывается, то он закроется сразу после ответа на вопрос программы: «Сохранить изменения или нет»?
Если после последнего, перед закрытием проекта, ассемблирования, в текст программы были внесены изменения, то MPLAB напомнит Вам о необходимости ассемблирования перед закрытием проекта, проведет его (щелкнуть по Yes), опять задаст вопрос: «Сохранить изменения или нет»?, и после ответа на него, закроет проект.
Прочитал написанное и сам удивился: не думал, что объяснение такой относительно несложной процедуры потребует столько много слов.
Но проще как-то не получается.
Надеюсь, что не смотря на это, объяснение, все-таки, получилось доходчивым и понятным. После того, как Вы «набьете руку», открытие нового проекта будет занимать у Вас не более 1 — 1,5 минут, и Вы сами убедитесь, как это относительно просто.
«Загрузка» текстов программ в текстовый редактор. Речь пойдет о «загрузке» файлов с расширением .ASM (тексты программ).
Если необходимо просто просмотреть текст той или иной программы (например, Вы скачали в Интернете ASM-файл какой-нибудь программы и хотите с ней разобраться), то проекта создавать не нужно.
Если нужно изменить текст этой программы и/или создать ее HEX-файл, то необходимо «загрузить» (скопировать) текст этой программы в текстовый редактор (в «пустое» окно нового проекта).
Могут быть и другие необходимости.
Давайте разберемся с «технологией этого действа». Для работы, необходим какой-нибудь ASM-файл. Я буду использовать файл программы Multi.asm
Примечание: ранее Вы познакомились с текстом этой программы в формате .DOC (см. выше).
Это сделано для удобства тех читателей, которые не установили на своем компьютере
MPLAB.
Файл программы Multi.asm прилагается (находится в папке «Тексты программ»).
54
С ним и будем работать.
Далее, все файлы текстов программ и подпрограмм, публикуемые в «Самоучителе…», будут иметь расширение .ASM.
Итак, открываем файл Multi.asm вне проекта. Запустите MPLAB.
Если программа предложит Вам открыть какой-то более ранний проект MPLAB, то откажитесь, щелкнув по No.
Перед Вами пустое окно MPLAB.
Вглавном меню программы, щелкните по слову File и далее, по строке Open (в выпадающем списке).
Откроется знакомое Вам окно MPLABовского проводника, только с названием
Open Existing File.
Найдите то место, где у Вас лежит файл Multi.asm
После этого, Вы увидите его название в списке проводника.
Щелкните по строке с этим названием, а затем по OK (или двойной щелчок по строке). После этого, Вы увидите окно с текстом выбранной Вами программы.
Так как предполагается работа, связанная с изменением текста этой программы, и мы ранее (см. выше) создали «пустой» проект, то необходимо загрузить текст программы в проект. Делается это так:
Не закрывая окно с текстом программы, нужно открыть проект Multi.
Вы раньше это уже делали, так что сделайте это сейчас самостоятельно.
Вслучаях появления сообщений об ошибках Project Error и Import Error (ASM-файл проекта пустой и ранее ассемблирования не производилось), необходимо их убрать, щелкнув по OK. После этого, откроется второе окно «заготовки» ASM-файла проекта.
Оно пустое.
Нужно скопировать в него содержимое окна, которое находится за ним (перенести содержимое текста программы Multi.asm в «пустой» проект).
Переключения между окнами и сам процесс копирования ничем не отличается от того же самого, при работе в «Виндах».
Копирование производится через буфер обмена.
А именно: активизируете окно с текстом программы.
Вглавном меню MPLAB, щёлкаете по слову Edit и в выпадающем списке, щёлкаете по Select All (выделить всё).
Далее опять щёлкаете по Edit, а в выпадающем списке, по Copy (текст программы скопировался в буфер обмена).
Затем активизируете «пустое» окно.
Далее, опять щелкаете по Edit, а в выпадающем списке, по Paste (вставить).
Всё. Копирование текста программы Multi.asm в проект произведено, и Вы видите этот текст в бывшей «пустышке» ASM-файла проекта.
Таким образом, «пустышка» ASM-файла «превратилась в полноценный» ASM-файл проекта, с которым можно работать.
После этого, окно с текстом программы, из которого производилось копирование, становится ненужным и его можно убрать обычным для «Виндов» способом, то есть, щёлкнув по кнопке Закрыть в правом верхнем углу этого окна.
Далее, для удобства восприятия, разверните оставшееся окно, щёлкнув по кнопке Развернуть (находится в правом верхнем углу этого окна).
После этого, Вы увидите текст программы Multi.asm в полной «боевой готовности». Так как этот текст в ПИК не зашьёшь, то начинаем разбираться с HEX — файлом («прошивкой»).
Впроекте «лежит пустышка» («заготовка») HEX-файла.
Для того чтобы она «превратилась в полноценный» HEX-файл (то есть, наполнилась содержанием), необходимо проассемблировать текст программы.
Текст программы в наличии, так что никаких преград, для выполнения этого действия, нет.
Создание HEX-файла.
Ассемблирование (компиляция) выполняется очень просто:
В главном меню MPLAB щелкаете по слову Project, а в выпадающем списке, по строке
55
Build Node.
Далее, ни во что не вмешивайтесь, а только ждите окончания процесса. MPLAB «все сделает в наилучшем виде».
В конечном итоге, Вы увидите окно Build Results с текстом, последняя строка которого должна выглядеть так: Build completed successfully.
Это соответствует случаю безошибочного составления текста программы. После этого окно Build Results, со спокойной совестью, можно закрыть.
Если в тексте программы будут ошибки, то в окне Build Results будет выведен их список, а содержание последней строки будет иным.
Разбор этого варианта будет ниже.
Итак, сообщение об отсутствии ошибок получено, что говорит о том, что пустышка HEX-файла проекта «превратилась» в полноценный HEX-файл (Multi.hex), который можно «загружать» в программу, обслуживающую программатор, а значит и «зашить» в ПИК. Желающие (имеющие программатор) могут это сделать.
Получится автоколебательный мультивибратор со стабильной частотой 5кГц. Итак, Вы приобрели для себя новую возможность.
Теперь, имея файл с расширением .ASM (текст программы), Вы можете самостоятельно создать файл «прошивки» (HEX-файл), а это уже не мало.
Даже не имея «штатного» ASM-файла, а имея «нештатный» текст программы (например, опубликованный в какой-нибудь книге), Вы можете его «настучать» в текстовом редакторе MPLAB (с соблюдением синтаксических правил написания текста программы) и после этого, создать HEX-файл этой программы.
Для этого даже не нужно быть программистом в буквальном смысле этого слова. Программист же, должен, описанные Выше операции, производить «в автомате» (на уровне условных рефлексов).
Поэтому, тренируйтесь.
При составлении программ, мозги не должны отвлекаться на такие «технологические вещи». Для них и так, кроме этого, будет достаточно другой, более значимой, работы.
Работа с текстом программы при наличии ошибок.
Посмотрим, что произойдет, если в тексте программы допущена ошибка. Искусственно введу ее.
Например, в «шапке» программы Multi.asm, поставлю точку с запятой перед названием регистра Sec (напоминаю, что MPLAB «ничего не видит» после точки с запятой). Ассемблируем текст программы и получаем сообщение о 4-х ошибках, с нижней строкой в конце, в которой сообщается о «неудачном» ассемблировании (MPLAB «ушел в отказ»).
56
Если Вы сделаете двойной щелчок по строке с ошибкой, то курсор покажет Вам эту строку в тексте программы.
Так как ошибка заключается в том, что после блокировки, регистр Sec перестал быть «прописанным» в «шапке» программы, то ошибочными будут считаться все строки программы, в которых упоминается регистр Sec.
Это и есть объяснение того, что в данном случае, количество ошибок равно четырем. Уберите точку с запятой перед регистром Sec и после этого, еще раз проассемблируйте текст программы.
Вы получите сообщение о безошибочном ассемблировании. Еще один случай.
Предположим, что Вы ошиблись при наборе текста программы и вместо команды decfsz (в подпрограмме Pause_1) «настучали» decfsx (нажали, соседнюю с z, кнопку клавиатуры). Введите эту ошибку и затем проассемблируйте текст программы.
Вы получите сообщение о 2-х ошибках: грамматическая ошибка в слове команды и ошибка в подпрограмме Pause_1 (в которой находится ошибочная команда).
Пощелкайте по сообщениям об ошибках, и Вы увидите, что в первом случае, MPLAB покажет на строку с ошибочной командой, а во втором случае, на строку, в которой находится название подпрограммы.
57
Исправьте эту ошибку и проассемблируйте текст программы. Вы получите сообщение о безошибочном ассемблировании. Третий случай.
Например, Вы забыли указать номер бита, к которому обращается бит-ориентированная команда BCF при формировании нулевого уровня на выводе RB0, и вместо bcf PortB,0 «настучали» bcf PortB.
Введите эту ошибку в текст программы и проассемблируйте его.
Вы получите сообщение об ошибке типа: в функции отсутствует аргумент (то есть, чего-то не хватает).
Устраните ошибку и проассемблируйте текст программы. Вы получите сообщение о безошибочном ассемблировании.
При проведении такого рода «экспериментов», обратите внимание на изменение цвета полосы загрузочного индикатора, в конце процесса ассемблирования, с зеленого (все в норме) на красный (в случаях наличия хотя бы одной ошибки).
В случаях отсутствия ошибок, цвет полосы не меняется и после завершения процесса ассемблирования, остается зеленым.
Можно привести еще множество подобного рода примеров.
Если есть желание, то самостоятельно введите другие ошибки и посмотрите, какие сообщения Вам выдаст MPLAB.
Не забывайте только потом исправлять их.
Смысл сказанного выше: если в тексте программы допущена ошибка, то после завершения процесса ассемблирования, MPLAB укажет на нее и подскажет тип ошибки. Устранением ошибок MPLAB не занимается, это личное дело программиста
Обращаю Ваше внимание на следующее: MPLAB не всесилен.
Он не может обнаружить ошибки, связанные с неправильным замыслом программы и стратегией ее построения (функциональные ошибки). Это дело программиста. MPLAB контролирует только «технологию» текста программы: наличие или отсутствие
грамматических ошибок, соблюдение или нет синтаксических правил написания программы, правил переходов, указания аргументов и т. д.
Сообщение об отсутствии ошибок означает только соблюдение этих «технологических» правил и не является гарантией реализации замыслов программиста.
По той простой причине, что «технология» может быть соблюдена, но при этом, замысел программы может быть «кривым» (наличие функциональных ошибок).
Пример функциональной ошибки: «несанкционированный уход» рабочей точки программы в «вечное кольцо», без возможности из него выйти («зависание»/»глюк»).
Таким образом, для того чтобы создать «полноценную», рабочую программу, программист должен реализовать «жизнеспособный», стратегическо-тактический замысел программы, при условии соблюдения всех «технологических» правил ее составления.
Пока мы занимаемся только «технологией», так как без нее невозможна реализация любого
58
замысла.
Если кто-то из Вас «рвется в бой» (в смысле желания побыстрее перейти к творчеству), то советую «обуздать свои порывы» и заняться, пусть и не самой интересной, но абсолютно необходимой, рутинной работой, а иначе Вам гарантирован повышенный процент неудач.
Разбираемся с симулятором
Прежде всего, симулятор позволяет заглянуть в «начинку» ПИКа и увидеть, что там происходит при выполнении команд программы.
При этом следует четко осознавать, что программист будет видеть «начинку» не реального ПИКа, а того «виртуального» (как бы, «идеального») ПИКа, который создается в MPLAB (в ее симуляторе).
Если выбран PIC16F84A, то Вашему вниманию и будет предоставлена «начинка» «виртуального» PIC16F84A, работающая по всем законам реального PIC16F84A.
Если реальный ПИК нужно «прошить» в программаторе, то «виртуальный» ПИК «прошивается» автоматически. При ассемблировании.
И какого-то внешнего устройства, типа программатора, для этого не нужно.
Всимуляторе, имитируется вся «начинка» ПИКа, с наглядным показом того, что в ней происходит по ходу отработки программы.
Внем можно сымитировать и внешнее воздействие.
Это позволяет обнаруживать и устранять ошибки (в том числе и функциональные), а также производить отладку как составных частей программы, так и всей программы.
Короче, «палочка — выручалочка».
Таким образом, сначала решаются «технологические» задачи, а когда они решены (сообщение о безошибочном ассемблировании), программист, с помощью симулятора, может проверить соответствие замысла программы тому, что желаемо.
Если с этим все в порядке, то можно произвести отладку ее характеристик (например, временных. Если это необходимо).
В подавляющем большинстве случаев, программа, прошедшая через «горнило» симулятора («прогнанная» через него во всех возможных режимах), будет нормально работать и в реальном ПИКе.
Давайте заглянем в «начинку» «виртуального» PIC16F84A.
Программа Multi.asm проассемблирована. Это означает то, что в «виртуальный» ПИК уже «зашита» программа Multi и с ней можно работать в симуляторе.
Обратите внимание на группу из 4-х кнопок в правой части строки с пиктограммами.
Это кнопки с надписями ROM, RAM, SFR и кнопка с нарисованными на ней очками.
Если проект Multi у Вас не открыт, то откройте его.
Ассемблирования производить не нужно (если последнее ассемблирование было безошибочным и после него в текст программы не вносились изменения. Если это не так, то проассемблируйте текст программы, можно даже по принципу: «на всякий случай»). Щелкните по кнопке ROM. Откроется окно Program Memory Window (содержимое памяти программ).
59
В нем:
1-й столбец: номера ячеек памяти программ, в 10-чной системе исчисления. 2-й столбец: адреса ячеек памяти программ, в 16-ричной системе исчисления.
3-й столбец: пока (да и потом тоже) нам не нужен. Не обращайте на него внимания. 4-й, 5-й и 6-й столбцы: собственно говоря, сама программа в «чистом» виде (полное
разложение на команды), то есть, без всего того, что расположено правее точек с запятой. То, что Вы видите, есть содержимое памяти программ, с указанием адресов и порядковых номеров команд рабочей части программы.
Напоминаю, что в части касающейся директив, исполняемых в рабочей части программы, в память программ «закладываются» не они, а их разложения на команды.
Хотя, в рабочей части программы Multi.asm, директивы и не используются, но напомнить об этом не лишне.
Пояснение: в память программ ПИКов «закладываются» не команды на языке ассемблер, а машинные коды этих команд. И слава Богу, что MPLAB «ограждает нас от этой напасти»…
После «прошивки» реального PIC16F84A, в его памяти программ, именно по этим адресам, и в такой же последовательности (по направлению сверху вниз), будут располагаться машинные коды команд программы Multi.asm.
В окне ROM, можно определить, какое именно количество ячеек памяти программ занимает программа (в данном случае, 20) и каков объем памяти программ используемого ПИКа (в данном случае, 1024 ячейки).
Закройте окно Program Memory Window.
Щелкните по кнопке RAM.
Откроется окно File Register Window.
Внем Вы видите область оперативной памяти. По образу и подобию, имеющейся у Вас, распечатки области оперативной памяти.
Сравните эту распечатку (с учетом того, что в распечатке указаны не все регистры общего назначения) с содержимым окна File Register Window.
В»глобальном смысле», Вы увидите примерно одинаковую картину, только с различными, взаимно дополняющими друг друга, «формами наполнения».
Используя окно File Register Window и распечатку области оперативной памяти (в комплексе), Вы можете свободно ориентироваться в области оперативной памяти. Например, сверяясь с распечаткой области оперативной памяти, в окне File Register Window, Вы сможете увидеть «числовую начинку» любого из регистров области оперативной
60
Первая программа для AVR микроконтроллера на Ассемблере
Приведен и подробно разобран пример простой программы для AVR микроконтроллера на языке Ассемблер (Assembler). Собираем простую схему на микроконтроллере для мигания светодиодами, компилируем программу и прошиваем ее в микроконтроллер под ОС GNU Linux.
Содержание:
- Подготовка
- Принципиальная схема и макет
- Исходный код программы на Ассемблере
- Документация по Ассемблеру
- Работа с числами в Hex, Bin и Dec
- Компиляция и прошивка программы в МК
- Заключение
Подготовка
Итак, у нас уже есть настроенный и подключенный к микроконтроллеру программатор, также мы разобрались с программой avrdude, изучили ее настройки и примеры использования. Пришло время разработать свою первую программу, которая будет выполнять какие-то реальные действия с AVR микроконтроллером (МК).
Писать программу мы будем на языке программирования Ассемблер (Assembler, Asm). Основной ее задачей будет заставить поочередно и с установленной задержкой мигать два разноцветных светодиода (красный и синий), имитируя таким образом полицейскую мигалку.
В результате у вас получится простая электронная схема, которую можно вмонтировать в какой-то пластмассовый макет полицейского автомобиля и подарить ребенку для забавы.
Понятное дело что подобную мигалку можно реализовать на основе простого мультивибратора на двух транзисторах с конденсаторами. Микроконтроллер же вам предоставляет намного больше возможностей.
Используя один чип можно оживить полицейскую мигалку + заставить раз в несколько секунд мигать модель авто фарами, добавить различные звуковые эффекты, научить модельку ездить реагируя на препятствия и многое другое.
Первый инструмент, который нам понадобится — редактор исходного кода, здесь можно использовать любой текстовый редактор. В одной из прошлых статей мы рассматривали настройку среды разработки программ Geany для программирования AVR микроконтроллеров с использованием языков Ассемблера и Си.
В принципе там уже все готово, останется написать код программы и поочередным нажатием двух кнопок (Compile-Flash) скомпилировать и прошить программу в микроконтроллер.
Несмотря на то что у вас уже может быть настроена среда Geany, я приведу все консольные команды которые необходимы для компиляции и прошивки нашей программы в МК.
Принципиальная схема и макет
Для понимания того что из себя представляет наша конструкция, для которой мы будем писать программу, приведу ниже принципиальную схему устройства.
Рис. 1. Принципиальная схема мигалки на светодиодах и микроконтроллере ATmega8.
Примечание: принципиальная схема нарисована за несколько минут в программе Eeschema, которая входит в комплекс программ EDA(Electronic Design Automation) KiCAD (для Linux, FreeBSD, Solaris, Windows). Очень мощный профессиональный инструмент, и что не мало важно — свободный!
Схема устройства состоит из микроконтроллера ATmega8 и двух светодиодов, которые подключены через гасящие резисторы. К микроконтроллеру подключен ISP-коннектор для осуществления программирования через программатор. Также предусмотрены клеммы для подключения внешнего источника питания напряжением 5В.
То как выглядит данная схема в сборе на макетной баспаечной панели (BreadBoard) можно посмотреть на рисунке ниже:
Рис. 2. Конструкция светодиодной мигалки на микроконтроллере ATmega8.
К микроконтроллеру подключен программатор USBAsp, используя ISP интерфейс, от него же и будет питаться наша экспериментальная конструкция. Если нужно запитать конструкцию от внешнего источника питания напряжением 5В то достаточно его подключить к + и — линиям питания панели.
Исходный код программы на Ассемблере
Разработанная нами программа будет попеременно зажигать и гасить два светодиода. Светодиоды подключены к двум пинам PD0 и PD1 микроконтроллера.
Ниже приведен исходный код программы на Ассебмлере(Assembler, Asm) для микроконтроллера ATmega8. Сохраните этот код в файл под названием leds_blinking.asm для последующей работы.
; Светодиодная мигалка на микроконтроллере ATmega8 ; https://ph0en1x.net .INCLUDEPATH "/usr/share/avra/" ; путь для подгрузки INC файлов . INCLUDE "m8def.inc" ; загрузка предопределений для ATmega8 .LIST ; включить генерацию листинга .CSEG ; начало сегмента кода .ORG 0x0000 ; начальное значение для адресации ; -- инициализация стека -- LDI R16, Low(RAMEND) ; младший байт конечного адреса ОЗУ в R16 OUT SPL, R16 ; установка младшего байта указателя стека LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16 OUT SPH, R16 ; установка старшего байта указателя стека .equ Delay = 5 ; установка константы времени задержки ; -- устанавливаем пины PD0 и PD1 порта PORTD (PD) на вывод -- LDI R16, 0b00000011 ; поместим в регистр R16 число 3 (0x3) OUT DDRD, R16 ; загрузим значение из регистра R16 в порт DDRD ; -- основной цикл программы -- Start: SBI PORTD, PORTD0 ; подача на пин PD0 высокого уровня CBI PORTD, PORTD1 ; подача на пин PD1 низкого уровня RCALL Wait ; вызываем подпрограмму задержки по времени SBI PORTD, PORTD1 ; подача на пин PD1 высокого уровня CBI PORTD, PORTD0 RCALL Wait RJMP Start ; возврат к метке Start, повторяем все в цикле ; -- подпрограмма задержки по времени -- Wait: LDI R17, Delay ; загрузка константы для задержки в регистр R17 WLoop0: LDI R18, 50 ; загружаем число 50 (0x32) в регистр R18 WLoop1: LDI R19, 0xC8 ; загружаем число 200 (0xC8, $C8) в регистр R19 WLoop2: DEC R19 ; уменьшаем значение в регистре R19 на 1 BRNE WLoop2 ; возврат к WLoop2 если значение в R19 не равно 0 DEC R18 ; уменьшаем значение в регистре R18 на 1 BRNE WLoop1 ; возврат к WLoop1 если значение в R18 не равно 0 DEC R17 ; уменьшаем значение в регистре R17 на 1 BRNE WLoop0 ; возврат к WLoop0 если значение в R17 не равно 0 RET ; возврат из подпрограммы Wait Program_name: . DB "Simple LEDs blinking program"
Кратко рассмотрим приведенный выше код и построчно разберем его структуру. Выполнение программы происходит по порядку — с верху кода и к низу, учитывая при этом метки, переходы с возвратами и условия.
Все строки и части строк, которые начинаются с символа «;» — это комментарии. При компиляции и выполнении программы такие строчки игнорируются, они служат для документирования и примечаний.
При помощи директивы «.INCLUDEPATH» мы указываем путь «/usr/share/avra/», по которому компилятору нужно искать файлы для включения их в текущий файл с использованием директив «.INCLUDE«. В нашем примере подключается файл, полный путь к которому будет выглядеть вот так: «/usr/share/avra/m8def.inc».
Директива «.LIST» указывает компилятору о необходимости генерирования листинга с текущего места в коде, отключить генерирование можно директивой «.NOLIST». Листинг представляет собой файл в котором содержится комбинация ассемблерного кода, адресов и кодов операций. Используется для отладки и других полезных нужд.
Директива «.CSEG» (CodeSEGment) определяет начало программного сегмента (код программы что записан во флешь-память) — сегмента кода. Соответственно все что размещено ниже этой директивы относится к программному коду.
Для определения сегмента данных (RAM, оперативная память) или памяти EEPROM используются директивы «.DSEG» и «.ESEG» соответственно. Таким образом выполняется распределение памяти по сегментам.
Каждый из сегментов может использоваться в программном коде только раз, по умолчанию если не указана ни одна из директив используется сегмент кода (CSEG).
При помощи директивы «.ORG» компилятору указывается начальный адрес «0x0000» сегмента, в данном случае мы указали начальный адрес сегмента кода. В данной программе эту директиву можно было бы и не использовать, поскольку по умолчанию адрес программного кода всегда 0x0000.
Дальше в коде происходит инициализация стека. Стек (Stack) — это область памяти (как правило у всех AVR чипов размещается в SRAM), которая используется микропроцессором для хранения и последующего считывания адресов возврата из подпрограмм, а также для других пользовательских нужд.
При вызове подпрограммы flhtc nt записывается в стек и начинается выполнение кода подпрограммы. По завершению подпрограммы (директива RET)
Стек работает по принципу LIFO (Last In — First Out, последним пришёл — первым вышел). Для адресации вершины стека используется указатель стека — SP (Stack Pointer), это может быть однобайтовое или двухбайтовое значение в зависимости от доступного количества SRAM памяти в МК.
При помощи инструкции «LDI» мы загружаем в регистр R16 значение младшего байта конечного адреса ОЗУ «Low(RAMEND)» (предопределенная константа в файле m8def.inc что содержит адрес последней ячейки SRAM), а потом при помощи инструкции OUT выполняем загрузку данного значения из регистра R16 в порт SPL (Stack Pointer Low). Таким же образом производится инициализация старшего байта адреса в указателе стека SPH.
Инструкция LDI используется для загрузки старшего и младшего значений из константы в регистр общего назначения. А инструкция OUT позволяет выполнить операцию загрузки с немного иной спецификой — из регистра общего назначения в регистр периферийного устройства МК, порт ввода-вывода и т.п.
Если не произвести инициализацию стека то возврат из подпрограмм станет невозможным, к примеру в приведенном коде после выполнения инструкции перехода к подпрограмме «RCALL Wait» возврат не будет выполнен и программа не будет работать как нужно.
Директива «.equ» выполняет присвоение указанному символьному имени «Delay» числового значения «5», по сути мы объявили константу. Имя константы должно быть уникальным, а присвоенное значение не может быть изменено в процессе работы программы.
Дальше мы устанавливает два канала (пины PD0, PD1) порта DDRD (PortD) на вывод, делается это загрузкой двоичного значения 0b00000011 (0x3, число 3) в регистр R16 с последующим выводом этого значения из него в порт DDRD при помощи команды OUT.
По умолчанию все каналы (пины) порта настроены на ввод. При помощи двоичного числа 0b00000011, где последние биты установлены в 1, мы переводим каналы PD0 и PD1 в режим вывода.
Начиная с метки «Start:» начинается основной рабочий цикл нашей программы, эта метка послужит нам для обозначения начального адреса основного цикла и позже будет использована для возврата.
При помощи инструкции «SBI» выполняем установку бита PORTD0 (предопределен в файле m8def.inc) в порте PORTD чем установим на пине PD0 высокий уровень. Используя инструкцию «CBI» выполняется очистка указанного (PORTD1) бита в порте PORTD и тем самым устанавливается низкий уровень на пине PD1.
Дальше с помощью инструкции RCALL выполняем относительный вызов подпрограммы которая начинается с метки «Wait:«. Здесь для запоминания адреса возврата уже используется стек, который мы инициализировали в начале программы.
После завершения подпрограммы (в нашем случае ее функция — задержка по времени) программа вернется к позиции где был выполнен вызов подпрограммы (адрес возврата будет получен из стека) и с этого места продолжится выполнение последующих операторов.
После вызова подпрограммы задержки «Wait» следуют вызовы инструкций SBI и CBI в которых выполняется установка битов порта PORTD таким образом, что теперь на пине PD0 у нас будет низкий уровень, а на пине PD1 — высокий.
По завершению этих инструкций следует еще один вызов подпрограммы задержки «Wait», а дальше следует инструкция «RJMP» которая выполнит относительный переход к указанной метке — «Start», после чего программа снова начнет установку битов в порте с задержками по времени.
Таким образом выполняется реализация бесконечного цикла в котором будут «дергаться» пины порта PORTD микроконтроллера и поочередно зажигаться/гаснуть светодиоды которые подключены к каналам данного порта (пины PD0, PD1).
После основного цикла программы следует наша подпрограмма задержки по времени. Принцип ее работы заключается в выполнении трех вложенных циклов, в каждом из которых происходит вычитание (DEC) единички из числа которое хранится в отдельном регистре, и так до тех пор пока значение не достигнет нуля. Инструкция «DEC» декрементирует значение указанного регистра и требует для этого 1 рабочий такт процессора.
При помощи инструкций «BRNE» (условный переход) выполняется анализ нулевого бита статусных флагов процессора (Zero Flag, ZF). Переход на указанную в инструкции метку будет выполнен если после выполнения предыдущей команды нулевой флаг был установлен. В данном случае проверяется значение нулевого флага после выполнения команд «DEC» над значениями которые хранится в регистрах общего назначения (R17, R18, R19). Инструкция «BRNE» требует 1/2 такта процессора.
Таким образом, использовав несколько вложенных циклов, ми заберем у ЦПУ некоторое количество тактов и реализуем нужную задержку по времени, которая будет зависеть от количества итераций в каждом цикле и от установленной частоты микропроцессора.
По умолчанию, без установки фьюзов что задают источник и частоту тактового генератора, в микроконтроллере ATmega8 используется откалиброванный внутренний RC-генератор с частотой 1МГц. Если же мы изменим частоту МК на 4Мгц то наши светодиоды начнут мигать в 4 раза быстрее, поскольку на каждую операцию вычитания и сравнения будет тратиться в 4 раза меньше времени.
Завершается подпрограмма инструкцией «RET«, которая выполняет возврат из подпрограммы и продолжение выполнения инструкций с того места, с которого эта подпрограмма была вызвана (на основе сохраненного адреса возвращения, который сохранился в стеке при вызове инструкции «RCALL»).
При помощи директивы «.DB» в памяти программ (флешь) резервируется цепочка из байтов под строчку данных «Simple LEDs blinking program», эти данные являются статичными и их нельзя изменять в ходе работы программы. Для резервирования слов (Double Word) нужно использовать директиву «.DW».
В данном случае, у нас во FLASH-память вместе с программным кодом будет записана строка «Simple LEDs blinking program«, которая содержит название программы. Данные из этой строчки нигде в программе не используются и приведены в качестве примера.
При каждом резервировании данных с использованием директивы «.DB» или «.DW» должна предшествовать уникальная метка, которая пригодится нам когда нужно будет получить адрес размещаемых данных в памяти для дальнейшего их использования, в нашем случае это «Program_name:«.
При построении программы важно чтобы счетчик выполняемых команд не добрался до адреса с зарезервированными данными, иначе процессор начнет выполнять эти строчки как программный код (поскольку они размещены в сегменте кода). В примере моей программы байты под название программы зарезервированы в конце сегмента кода и за пределами рабочих циклов программы, так что все ОК.
Эти данные можно разместить и в начале кода, использовав операторы перехода для изоляции этих байтов от выполнения:
RJMP DataEnd Program_name: .DB "Simple LEDs blinking program" DataEnd:
Документация по Ассемблеру
Разобраться с основами языка программирования Ассемблер в пределах одной статьи достаточно сложно, без практики здесь никак, но тем не менее на начальном этапе и для нашего эксперимента приведенных знаний вполне достаточно. У вас уже будет базовое представление что такое программа на Ассемблере и как используются директивы и инструкции.
Процесс дальнейшего изучения Ассемблера для AVR микроконтроллеров полностью в ваших руках. Есть достаточно много полезных ресурсов в интернете, книг и материалов с примерами и пояснениями.
Приведу несколько полезных документов, которые вы можете скачать и использовать для справки при разработке программ на AVR ASM.
Справка по Ассемблеру для Atmel AVR (перевод Руслана Шимкевича): atmel-avr-assembler-quick-doc-ru.zip (16Кб, HTML, RU).
Справка по инструкциям Atmel Assembler: atmel-avr-instruction-set-manual-en.pdf.zip (700Кб, PDF, EN, 2015).
Работа с числами в Hex, Bin и Dec
В коде программы для загрузки значений в регистры используются числа и в скобках приведены их значения в шестнадцатеричной системе счисления, например: «50 (0x32, )». В двоичной системе счисления числа указываются в формате «0b00000011». Для удобной переконвертации чисел из шестнадцатеричной системы счисления в десятичную, двоичную и наоборот отлично подходит программный калькулятор из среды рабочего окружения KDE — KCalc.
Рис. 3. KCalc — простое и эффективное решение для пересчета между разными системами счисления.
В настройках (Settings) нужно выбрать режим (Numeral System Mode), после чего программа приобретет вид что на рисунке выше. Переключаться между системами счисления можно устанавливая флажки в полях «Dec», «Hex», «Bin». Для примера: переключаемся в Hex и набираем «FF», потом переключаемся в Dec и видим число в десятичной системе счисления — 255, просто и удобно.
В операционной системе GNU Linux с рабочей средой GNOME (например Ubuntu) также есть подобный калькулятор, это программа — galculator.
Компиляция и прошивка программы в МК
Итак, у нас уже есть полный код программы, который мы сохранили в файл с именем «leds_blinking.asm». Теперь самое время скомпилировать его, делается это нажатием кнопки «Compile» в предварительно настроенной среде Geany или же отдельной командой в консоли:
avra --includepath /usr/share/avra/ leds_blinking.asm
Если результат выполнения будет без ошибок то мы получим файл прошивки в формате Intel HEX — «leds_blinking. hex», который уже можно прошивать во флешь-память микроконтроллера.
Примечание: опцию «—includepath /usr/share/avra/» можно и не указывать, поскольку в файле с исходным кодом уже была указана директива «.INCLUDEPATH» для поиска файлов с предопределениями для разных моделей МК.
Осталось прошить микроконтроллер используя полученный файл «leds_blinking.hex». В примере я использую программатор USBAsp и микроконтроллер ATmega8, вот так выглядит команда для записи получившегося файла во флешь-память МК:
avrdude -p m8 -c usbasp -P usb -U flash:w:leds_blinking.hex
Примечание: в команде используется относительный путь к файлу leds_blinking.hex, поэтому для успешного выполнения команды нужно перейти в терминале(консоли) в директорию где находится данный файл.
Сразу же после прошивки флешь-памяти на микроконтроллер поступит команда сброса (RESET) и программа начнет выполняться, об єтом будут свидетельствовать два попеременно мелькающих светодиода.
Если же светодиоды не подают признаков жизни, значит что-то пошло не так. Посмотрите внимательно вывод команды для компиляции и прошивки МК, возможно что там увидите сообщения об ошибках которые нужно исправить.
Заключение
Увеличив значение константы «Delay» можно уменьшить частоту мерцания светодиодов, а уменьшив — увеличить частоту. Также можете попробовать добавить несколько светодиодов к свободным каналам порта (PD2-PD7) и модифицировать программу таким образом чтобы получить бегущий огонь из светодиодов.
В заключение приведу краткое видео работы рассмотренной схемы на двух светодиодах:
В следующей статье мы разберем программу с похожим функционалом, используя тот-же макет, только выполним ее на языке программирования Си.
Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.
Лекция 7. Арифметические команды языка Ассемблер: аддитивные и мультипликативные команды целочисленных операций.
7.1. Сложение и вычитание.
7.1.1. ADD – команда для сложения двух чисел. Она работает как с числами со знаком, так и без знака.
ADD Приемник, Источник
Логика работы команды:
<Приемник> = <Приемник> + <Источник>
Возможные сочетания операндов для этой команды аналогичны команде MOV.
По сути дела, это – команда сложения с присвоением, аналогичная принятой в языке C/C++:
Приемник += Источник;
Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда.
После выполнения команды изменяются флаги, по которым можно определить характеристики результата:
- Флаг CF устанавливается, если при сложении произошёл перенос из старшего разряда. Для беззнаковых чисел это будет означать, что произошло переполнение и результат получился некорректным.
- Флаг OF обозначает переполнение для чисел со знаком.
- Флаг SF равен знаковому биту результата (естественно, для чисел со знаком, а для беззнаковых он равен старшему биту и особо смысла не имеет).
- Флаг ZF устанавливается, если результат равен 0.
- Флаг PF — признак чётности, равен 1, если результат содержит нечётное число единиц.
Примеры:
add ax,5 ;AX = AX + 5
add dx,cx ;DX = DX + CX
add dx,cl ;Ошибка: разный размер операндов.
7.1.2. SUB — команда для вычитания одного числа из другого. Она работает как с числами со знаком, так и без знака.
SUB Приемник, Источник
Логика работы команды:
<Приемник> = <Приемник> — <Источник>
Возможные сочетания операндов для этой команды аналогичны команде MOV.
По сути дела, это – команда вычитания с присвоением, аналогичная принятой в языке C/C++:
Приемник -= Источник;
Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда.
На самом деле вычитание в процессоре реализовано с помощью сложения. Процессор меняет знак второго операнда на противоположный, а затем складывает два числа.
Примеры:
sub ax,13 ;AX = AX — 13
sub ax,bx ;AX = AX + BX
sub bx,cl ;Ошибка: разный размер операндов.
7.1.3. Инкремент и декремент. Очень часто в программах используется операция прибавления или вычитания единицы. Прибавление единицы называется инкрементом, а вычитание — декрементом. Для этих операций существуют специальные команды процессора: INC и DEC. Эти команды не изменяют значение флага CF.
Эти команды содержит один операнд и имеет следующий синтаксис:
INC Операнд
DEC Операнд
Логика работы команд:
INC: <Операнд> = < Операнд > + 1
DEC: <Операнд> = < Операнд > — 1
В качестве инкремента допустимы регистры и память: reg, mem.
Примеры:
inc ax ;AX = AX + 1
dec ax ;AX = AX — 1
7.1.4. NEG – команда для изменения знака операнда.
Синтаксис:
NEG Операнд
Логика работы команды:
<Операнд> = – < Операнд >
В качестве декремента допустимы регистры и память: reg, mem.
Примеры:
neg ax ;AX = -AX
7.2. Сложение и вычитание с переносом.
В системе команд процессоров x86 имеются специальные команды сложения и вычитания с учётом флага переноса (CF). Для сложения с учётом переноса предназначена команда ADC, а для вычитания — SBB. В общем, эти команды работают почти так же, как ADD и SUB, единственное отличие в том, что к младшему разряду первого операнда прибавляется или вычитается дополнительно значение флага CF.
Они позволяют выполнять сложение и вычитание многобайтных целых чисел, длина которых больше, чем разрядность регистров процессора (в нашем случае 16 бит). Принцип программирования таких операций очень прост — длинные числа складываются (вычитаются) по частям. Младшие разряды складываются(вычитаются) с помощью обычных команд ADD и SUB, а затем последовательно складываются(вычитаются) более старшие части с помощью команд ADC и SBB. Так как эти команды учитывают перенос из старшего разряда, то мы можем быть уверены, что ни один бит не потеряется. Этот способ похож на сложение(вычитание) десятичных чисел в столбик.
На следующем рисунке показано сложение двух двоичных чисел командой ADD:
При сложении происходит перенос из 7-го разряда в 8-й, как раз на границе между байтами. Если мы будем складывать эти числа по частям командой ADD, то перенесённый бит потеряется и в результате мы получим ошибку. К счастью, перенос из старшего разряда всегда сохраняется в флаге CF. Чтобы прибавить этот перенесённый бит, достаточно применить команду ADC:
Пример:
#include <iostream.h>
#include <iomanip.h>
void main()
{
//Сложение двух чисел с учетом переноса: FFFFFFAA + FFFF
int a, b;
asm {
mov eax, 0FFFFFFAAh
mov ebx, 0FFFFh
mov edx, 0
mov ecx, 0
add eax, ebx
adc edx, ecx
mov a, edx
mov b, eax
}
cout << hex << a << setw(8) << setfill(‘0’) << b; //10000ffa9
}
7. 3. Умножение и деление.
7.3.1. MUL – команда умножения чисел без знака. У этой команды только один операнд — второй множитель, который должен находиться в регистре или в памяти. Местоположение первого множителя и результата задаётся неявно и зависит от размера операнда:
Размер операнда | Множитель | Результат |
1 байт | AL | AX |
2 байта | AX | DX:AX |
4 байта | EAX | EDX:EAX |
Отличие умножения от сложения и вычитания в том, что разрядность результата получается в 2 раза больше, чем разрядность сомножителей.
Примеры:
mul bl ;AX = AL * BL
mul ax ;DX:AX = AX * AX
Если старшая часть результата равна нулю, то флаги CF и ОF будут иметь нулевое значение. В этом случае старшую часть результата можно отбросить.
7.3.2. IMUL – команда умножения чисел со знаком. Эта команда имеет три формы, различающиеся количеством операндов:
1. С одним операндом — форма, аналогичная команде MUL. В качестве операнда указывается множитель. Местоположение другого множителя и результата определяется по таблице.
2. С двумя операндами — указываются два множителя. Результат записывается на место первого множителя. Старшая часть результата в этом случае игнорируется. Кстати, эта форма команды не работает с операндами размером 1 байт.
3. С тремя операндами — указывается положение результата, первого и второго множителя. Второй множитель должен быть непосредственным значением. Результат имеет такой же размер, как первый множитель, старшая часть результата игнорируется. Это форма тоже не работает с однобайтными множителями.
Примеры:
imul cl ;AX = AL * CL
imul bx,ax ;BX = BX * AX
imul cx,-5 ;CX = CX * (-5)
imul dx,bx,134h ;DX = BX * 134h
CF = OF = 0, если произведение помещается в младшей половине результата, иначе CF = OF = 1. Для второй и третьей формы команды CF = OF = 1 означает, что произошло переполнение.
7.3.3. DIV – команда деления чисел без знака. У этой команды один операнд — делитель, который должен находиться в регистре или в памяти. Местоположение делимого, частного и остатка задаётся неявно и зависит от размера операнда:
Размер
операнда | Делимое | Частное | Остаток |
1 байт | AX | AL | AH |
2 байта | DX:AX | AX | DX |
4 байта | EDX:EAX | EAX | EDX |
При выполнении команды DIV может возникнуть прерывание (в данном курсе прерывания мы рассматривать не будем поэтому старайтесь избегать таких случаев):
- если делитель равен нулю;
- если частное не помещается в отведённую под него разрядную сетку (например, если при делении слова на байт частное больше 255).
Примеры:
div cl ;AL = AX / CL, остаток в AH
div di ;AX = DX:AX / DI, остаток в DX
7.3.4. IDIV – команда деления чисел со знаком. Единственным операндом является делитель. Местоположение делимого и частного определяется также, как для команды DIV. Эта команда тоже генерирует прерывание при делении на ноль или слишком большом частном.
7.3.5. NOP – ничего не делающая команда.
Синтаксис:
NOP
Примеры:
nop
Пример. (5 + 8) / (2 * 3)
#include <iostream.h>
void main()
{
asm {
mov bx, 5 //BL = 5
add bx, 8 //BL = BL + 8 | 13
sub bx, 1 //BL = BL — 1 | 12
mov al, 2 //AL = 2
mov cl, 3 //CL = 3
mul cl //AX = AL * CL | 6
//AX = 6, BL = 12
xchg bx, ax //AX = 12, BX = 6
mov dx, 0
div bx
}
}
Лучшее программное обеспечение для преобразования файлов ASM в HEX для настройки ваших машин
by Милан Станоевич
Милан Станоевич
Эксперт по Windows и программному обеспечению
Милан с детства увлекался ПК, и это привело его к интересу ко всем технологиям, связанным с ПК. До прихода в WindowsReport он работал… читать дальше
Опубликовано
Партнерская информация
XУСТАНОВИТЕ, щелкнув файл для загрузки.
Для устранения различных проблем с ПК мы рекомендуем Restoro PC Repair Tool:Это программное обеспечение устраняет распространенные компьютерные ошибки, защищает вас от потери файлов, вредоносного ПО, аппаратных сбоев и оптимизирует работу вашего ПК для достижения максимальной производительности. Исправьте проблемы с ПК и удалите вирусы прямо сейчас, выполнив 3 простых шага:
- Загрузите Restoro PC Repair Tool , который поставляется с запатентованными технологиями (патент доступен здесь).
- Нажмите Начать сканирование , чтобы найти проблемы Windows, которые могут вызывать проблемы с ПК.
- Нажмите Восстановить все , чтобы устранить проблемы, влияющие на безопасность и производительность вашего компьютера.
- Restoro был загружен 0 читателями в этом месяце.
ASM представляют собой программы, написанные на языке программирования низкого уровня. Эти типы файлов можно использовать для создания «лесов», на основе которых будет работать ваша запрограммированная машина. Чтобы иметь возможность программировать микроконтроллер, пульты дистанционного управления или офисные машины, вам необходимо преобразовать файлы ASM в HEX.
Файлы HEX — это язык, на котором ваше конкретное устройство (система управления двигателем, офисный сервер и т. д.) реагирует на задачу, для выполнения которой оно было настроено. Файлы HEX содержат всю информацию, необходимую для настройки, настройки и использования вашей машины, и могут храниться на вашем жестком диске как в двоичном, так и в текстовом формате.
Вы хотите преобразовать файлы ASM в файл HEX, чтобы запрограммировать свое устройство? Если ответ «Да», то вы обратились по адресу.
В этой статье мы рассмотрим некоторые из лучших вариантов программного обеспечения на рынке, которые помогут вам легко преобразовать файлы ASM в HEX. Читай дальше, чтобы узнать больше.
Преобразование файлов ASM в HEX с помощью этих 4 инструментов.
Это программное обеспечение предлагает невероятно широкий набор инструментов для создания, изменения и представления ваших проектов на профессиональном уровне. Вы также можете использовать это программное обеспечение для преобразования файлов ASM в файлы HEX, а затем применить их к своей машине.
Процесс преобразования файлов ASM в HEX не так прост, как следующие варианты программного обеспечения, но это программное обеспечение обладает невероятным набором полезных функций.
Вы должны быть опытным пользователем, чтобы получить полный эффект от этого программного обеспечения. Если вы чувствуете себя немного перегруженным всеми вариантами настройки, вы можете попробовать некоторые из следующих вариантов программного обеспечения, которые мы обсудим в этой статье.
Вот некоторые из лучших функций MPLAB X IDE:
- Поддерживает шаблоны Live Code
- Вы можете настроить собственный стиль формата кода
- Быстрая навигация
- Полностью настраиваемое рабочее пространство
- Можно расширить функциональность с помощью диспетчера подключаемых модулей MPLAB IDE
Чтобы начать процесс преобразования, откройте файл ASM и запустите опцию быстрой сборки в MPLAB. Это скомпилирует весь диапазон данных в один файл HEX, который вы можете легко экспортировать и использовать для программирования своей машины.
Скачать MPLAB X IDE
Преобразователь ASM в HEX
Преобразователь ASM в HEX — еще один очень полезный инструмент, который позволяет легко преобразовывать файлы .asm в HEX и экспортировать их, чтобы дать жизнь вашей машине.
По сравнению с ранее упомянутым программным обеспечением, ASM to HEX Converter не имеет широкого набора параметров настройки, но предлагает быстрый и простой способ выполнить желаемое преобразование. Это программное обеспечение небольшое, но хорошо выполняет свою работу.
Скачать конвертер ASM в HEX
Конвертер ARM
Совет эксперта: Некоторые проблемы с ПК трудно решить, особенно когда речь идет о поврежденных репозиториях или отсутствующих файлах Windows. Если у вас возникли проблемы с исправлением ошибки, возможно, ваша система частично сломана. Мы рекомендуем установить Restoro, инструмент, который просканирует вашу машину и определит, в чем проблема.
Щелкните здесь, чтобы загрузить и начать восстановление.
ARM Converter — еще один легкий инструмент для преобразования, который может помочь вам преобразовать файлы ASM в файлы HEX. Параметры настройки для вашего выходного файла не так сложны, как в случае с нашим лучшим выбором, но делают свою работу быстро.
Еще одна хорошая особенность ARM Converter заключается в том, что его влияние на вашу систему незаметно.
Скачать ARM Converter
Text Hex Convert
Text Hex Converter — еще один легкий, но полезный инструмент, который может помочь вам выполнять преобразования между текстом ASM и кодировкой HEX.
Поскольку это такое легкое программное обеспечение, воздействие на системные ресурсы минимально, а полученные HEX-файлы имеют хорошее качество.
Download Text Hex Convert
Заключение
В этой статье мы рассмотрели некоторые из лучших вариантов программного обеспечения, которые позволяют вам преобразовывать файлы ASM в файлы HEX. Использование этого типа программного обеспечения позволяет создавать очень подробные инструкции для вашей машины.
Если вы опытный программист, вы можете попробовать MPLAB. Это программное обеспечение предлагает широкий спектр возможностей настройки.
Если вам нужно только преобразовать несколько файлов в HEX, вы можете выбрать один из 3 вариантов облегченного программного обеспечения, которые мы представили в этом списке.
Пожалуйста, не стесняйтесь сообщить нам, если эта статья помогла вам каким-либо образом, используя раздел комментариев ниже.
ЧИТАЙТЕ ТАКЖЕ:
- 5 лучших игровых программ для создания потрясающих игр
- Microsoft Quantum Network продвигает исследования в области квантовых вычислений
- 5 лучших бесплатных программ-анти-кейлоггеров, которые защитят данные на вашем компьютере [Список 2019]
Эта статья охватывает:Темы:
- 9Программное обеспечение 0026
Была ли эта страница полезной?
Начать разговор
Делиться
Копировать ссылку
Информационный бюллетень
Программное обеспечение сделок Пятничный обзор
Я согласен с Политикой конфиденциальности в отношении моих персональных данных
Шестнадцатеричные коды сборки — разработчик TI-Basic
Пример ввода шестнадцатеричного кода
Существуют всевозможные небольшие ассемблерные программы, которые можно создавать, просто используя встроенные в калькулятор команды ассемблера (в частности, AsmPrgm) вместе с соответствующим шестнадцатеричным кодом. Чтобы запустить программу, вам нужно использовать команду Asm(, где Asm(prgmPROGNAME — это программа, содержащая шестнадцатеричный код.
В качестве предостережения: при вводе шестнадцатеричного числа нужно быть очень осторожным и вводить его именно так, как вы его видите. Если есть хотя бы один неправильный символ, калькулятор может выйти из строя и перезагрузить оперативную память при повторном включении. Мы проверили шестнадцатеричные коды, чтобы убедиться, что они работают, но вам решать, правильно ли их вводить.
Также обратите внимание, что эти программы могут не работать на оригинальном TI-83, только на 83+ и выше. Большинство из них безвредны, но последний конкретно выйдет из строя.
Многие коды больше не работают на TI-84+CSE или TI-84+CE. Новые коды для этих калькуляторов можно найти здесь.
FOLT СОДЕРЖАНИЕ СОДЕРЖАНИЕ Режим программы Toggle Экран на график Quick Key Текст. Белый Черный Invert Граница Белая граница Черная граница, прозрачная внутри Уровень контрастности Установите контраст GET CONTRAST CRONTAST CONTRAST RUN INDICATOR RUN INDINGATO Индикатор включен Переключение индикатора работы Имитация нажатия клавиш Блокировка альфа-канала Блокировка альфа-канала (без отключения) Нажатие нижнего регистра Lower Crases Lock Lower Crases Lock (No Disable) Alpha OFF [2nd] Отключение «Dode» Сообщение Unrirty Graph Ecrem Переключение питания ЖК-дисплея Калькулятор выключен Автовычисление Авто DMS Авто дроби Сдвиг экрана Сдвиг экрана вправо 1 Сдвиг экрана вверх влево 1 5 Экран сдвига вниз 1 Экран переключения Право 4 Экран переключения слева 4 Экран сдвига вверх 4 Экран сдвига 4 Функции памяти Бесплатная оперативная память Архивирование Неокрашивание Togglaurch Reset Togglearch . По умолчанию Сброс ОЗУ DelVar Разное Удалить курсор Редактировать программу блокировки/разблокировки Проверка батареи ASCII Error Token generator Advanced CharLength String Pixel Width ListToVars 1 ListToVars 2 ExecAns RepeatKeys FastKeys MultiKeys 2 Sprite References |
: AsmPrgm21F8893E02AE77C9
При использовании в программе позволяет использовать архивацию и расархивацию в других программах. Не забудьте вернуться в «программный режим», когда закончите, снова запустив программу.
При использовании на главном экране он позволяет вам использовать команды программирования, такие как If и For(; это имеет ограниченную полезность, но может быть полезно проверить короткий фрагмент кода, не создавая для него новую программу.
:AsmPrgm214093EF7B4CC9
Это поместит текущее изображение экрана на экран графика.
:AsmPrgm3A3F84EF8C47EFBF4AC9
Это подпрограмма getKey, которая заставляет повторяться все клавиши, а не только стрелки, и нет задержки между повторами. Коды клавиш разные, поэтому вам, возможно, придется поэкспериментировать.
:AsmPrgm21F5893E08AE77C9
Это переключит обычный текстовый режим на инверсный (белый текст на черном фоне) и наоборот.
Нижний регистр Вкл.
AsmPrgmFDCB24DEC9
Нижний регистр Выкл.
AsmPrgmFDCB249EC9
Переключение нижнего регистра
AsmPrgm21148A3E08AE77C9
Это включит или выключит строчные буквы.
Прозрачный, черный и инвертированный экран
Прозрачный ЖК-дисплей
AsmPrgmEF4045C9
Это только очищает ЖК-дисплей, но фактически не очищает экран графика или домашний экран.
Белый
AsmPrgm210000115F3FEF5C4DC9
Это заполняет экран графика белыми пикселями. Это не похоже на ClrDraw, так как он не будет обновлять графики или графики.
Черный
AsmPrgm210000115F3FEF624DC9
Это заполняет экран графика черными пикселями.
Инвертировать
AsmPrgm210000115F3FEF5F4DC9
Это инвертирует содержимое экрана, рисуя его на экране графика.
Граница
AsmPrgm210000115F3FEF7D4DC9
Это рисует границу вокруг экрана графика.
Белая рамка
AsmPrgm210000115F3FEF864DC9
Это рисует границу белых пикселей вокруг экрана графика.
Черная рамка, прозрачная внутри
AsmPrgm210000115F3FEF8C4DC9
Это нарисует черную рамку вокруг экрана графика, очистив содержимое внутри.
Set Contrast
Ввод представляет собой значение от 0 до 39 в Ans (если вы используете что-то другое, программа проигнорирует его), где 0 соответствует наименьшему значению контрастности, а 39до самого высокого. Число, отображаемое ОС в верхнем правом углу экрана при изменении контрастности с помощью 2nd+UP и 2nd+DOWN, составляет 1/4 от этого значения, округленного (поэтому отображаемое 6 соответствует значению между 24 и 27, когда с помощью этой программы).
АсмПрогмEFD74AEFEF4AC6D8D8D3107B324784C9
Получить контрастность
Получает уровень контрастности ОС и сохраняет его в ответе:
AsmPrgm3A4784EF8C47EFBF4AC9
Уменьшить контрастность
AsmPrgm2147847ED601D835C6D8D310C9
Уменьшите контрастность на одну единицу (это будет проигнорировано, если контрастность уже минимальна).
Увеличение контрастности
AsmPrgm2147847EC6D9D834D310C9
Увеличьте контрастность на одну единицу (это будет проигнорировано, если контрастность уже максимальна).
Индикатор работы выключен
AsmPrgmEF7045C9
Индикатор работы включен
AsmPrgmEF6D45C9
Переключить индикатор работы
AsmPrgm21028A3E01AE77C9
Обратите внимание, что когда эта процедура выключает индикатор работы, она не стирает индикатор работы, а просто останавливает его. Вы можете сделать это самостоятельно — либо выведя что-то в правый верхний угол, либо очистив экран (ClrDraw или ClrHome, не важно).
Альфа-блокировка
AsmPrgmFD361251C9
Это имитирует [2nd][Alpha]
Альфа-блокировка (без отключения)
AsmPrgmFD3612D1C9
Это то же самое, что и первое, но вы должны нажать [2nd][mode], чтобы отключить его.
Строчные буквы
AsmPrgmFD361231C9
Это работает, даже если нижний регистр не включен.
Блокировка нижнего регистра
AsmPrgmFD361271C9
Это имитирует [2nd][Alpha][Alpha].
Блокировка нижнего регистра (без отключения)
AsmPrgmFD3612B1C9
Это можно отключить, только нажав [2nd][mode]
Альфа Выкл.
AsmPrgm21028A3E0FA677C9
В качестве альтернативы:
АсмПрогм3E01FD7712C9
[2]
AsmPrgmFDCB12DEC9
Интересное использование этих кодов может быть для запроса пользовательского ввода (например, если вы запустите Alpha Lock, ввод начнется с нажатия Alpha.
Если вы запустите Alpha Lock, который не может быть отключен в начале ваша программа и пользователь нажимает ON (или возникает ошибка), вы не сможете выбрать опции, поэтому вам придется нажать [2nd][mode].0005
Чтобы отключить сообщение «Готово» в конце программы Basic:
AsmPrgmFDCB00AEC9
:АсмпргмФДКБ0386C9
Это пометит экран графика как не загрязненный. Использование ClrDraw пометит экран графика как грязный, поэтому при следующем его отображении экран будет очищен. Многие библиотеки ASM (например, xLIB) изменяют буфер графа, не отображая экран, который может быть непреднамеренно очищен.
При выключении калькулятора у вас есть варианты. Вы можете либо выключить экран (ваша программа продолжит работу, но калькулятор будет выглядеть так, как будто он выключен), либо выключить калькулятор и подождать, пока не будет нажата кнопка [вкл].
ЖК-дисплей выключен
AsmPrgm3E02D310C9
ЖК-дисплей включен
AsmPrgm3E03D310C9
Переключение питания ЖК-дисплея
AsmPrgmDB108787879FC603D310C9
Калькулятор выключен
AsmPrgm3E01D303FB76FDCB09A6C9
Выключите калькулятор; дождитесь клавиши [on], прежде чем продолжить:
Наконец, выйдите из программы и выключите калькулятор (т. е., как только вы снова включите калькулятор, он будет на главном экране):
Обратите внимание, что это потребляет свободную оперативную память, поэтому не используйте это!
:AsmPrgmEF0850
Авто DMS
AsmPrgmFD360A06C9
Auto DMS автоматически отображает все десятичные знаки в градусах, минутах и секундах на главном экране.
Автоматические дроби
AsmPrgmFD360A0CC9
Auto Fractions автоматически отображает десятичные дроби в виде дробей (если это возможно) на главном экране.
Примечание: Эти процедуры не обновляют ЖК-дисплей автоматически. Это можно сделать, заменив окончание C9с EF6A48C9.
Сдвиг экрана вправо 1
:AsmPrgm2140930E40060CB7CB1E2310FB0D20F5C9
Это сдвигает экран графика вправо на один пиксель. См. примечание здесь для обновления экрана.
Сдвиг экрана влево 1
:AsmPrgm213F960E40060CB7CB162B10FB0D20F5C9
Это сдвигает экран графика влево на один пиксель. См. примечание здесь для обновления экрана.
Сдвиг экрана вверх 1
:AsmPrgm214C9311409301F402EDB0EB010C00EF304CC9
Это сдвигает экран графика вверх на один пиксель. См. примечание здесь для обновления экрана.
Сдвиг экрана вниз 1
:AsmPrgm213396113F9601F402EDB823010C00EF304CC9
Это сдвигает экран графика вниз на один пиксель. См. примечание здесь для обновления экрана.
Сдвиг экрана вправо 4
:AsmPrgm2140930E40AF060CED672310FB0D20F5C9
Это сдвигает экран графика вправо на четыре пикселя. См. примечание здесь для обновления экрана.
Сдвиг экрана влево 4
:AsmPrgm213F960E40AF060CED6F2B10FB0D20F5C9
Это сдвигает экран графика влево на четыре пикселя. См. примечание здесь для обновления экрана.
Сдвиг экрана вверх 4
:AsmPrgm21709311409301D002EDB0EB013000EF304CC9
Это сдвигает экран графика вверх на четыре пикселя. См. примечание здесь для обновления экрана.
Сдвиг экрана вниз 4
:AsmPrgm210F96113F9601D002EDB823013000EF304CC9
Это сдвигает экран графика вниз на четыре пикселя. См. примечание здесь для обновления экрана.
Свободная оперативная память
Получить объем свободной оперативной памяти, оставшейся в ответе
AsmPrgmEFE542EF9247EF5641EFBF4AC9
Архивирование
AsmPrgm EFD74AD604C0 ;Получить указатели на ответ EB4E234623 ;Получить размер и расположение строки 117884EDB012 ;Скопировать в OP1 EFF142D8 ;Найдите переменную, выйдите, если она не существует 78B7C0 ;Выход, если он уже заархивирован EFD84FC9 ;Архивировать и выйти
Ввод: Ans — строка с именем архивируемой переменной. Имя нуждается в байте префикса, чтобы определить, к какому типу относится переменная. Некоторые из них:
и действительное/сложное Список Матрица Б С Уравнение струна ре [ Программа/Защищенная программа E Программа/Защищенная программа F Программа/Защищенная программа G Изображение Н ГДБ U Appvar
Например, для архивирования prgmTEST подойдет любой из этих входов:
"[ТЕСТ "ЭТЕСТ "ФТЕСТ
Разархивирование
AsmPrgm ЭФД74АД604К0 EB4E234623 117884EDB0 12EFF142D8 78B7C8 ;Единственное отличие EFD84FC9
Ввод: см. Архивирование.
ToggleArch
AsmPrgm ЭФД74АД604К0 EB4E234623 117884EDB0 12EFF142D8 EFD84FC9
Ввод: см. Архивирование.
Сброс значений по умолчанию
AsmPrgmEF2851C9
Сброс ОЗУ
AsmPrgmEF4E40C9 AsmPrgmC7
ДельВар
АсмПрогм ЭФД74АД604К0 EB4E234623 117884EDB0 12EFF142D8 EFC64FC9
Ввод: см. Архивирование.
Удалить курсор
AsmPrgmFDCB0CE6C9
Это безвредно, но он перестает отображать этот мигающий курсор 😀 Просто нажмите [2nd][MODE], чтобы вернуть его в нормальное состояние. Что, шутки разрешены, да?
Редактировать программу блокировки/разблокировки
Как правило, мы являемся сообществом с открытым исходным кодом, так что это должно быть весело. Чтобы переключить статус блокировки программы:
:AsmPrgmEFD74AFE04C03CEB4E234623117884121CEDB0AF12EFF142D8EE0377C9
Обратите внимание, что вам следует избегать редактирования ассемблерной программы с использованием этого кода. Скорее всего, он испортится, и это может привести к нестабильности. Имя программы будет в формате Ans в виде строки. Например, «ПРИВЕТ»:Asm(prgmLOCK
Проверка батареи
Это «умная» проверка батареи, которая определяет, является ли вычисление 84+ или 83+. Если это TI-83+, в Ans сохраняется либо 0, либо 4. Если это TI-84+, значение от 0 до 4 сохраняется в Ans. 0 означает низкий заряд батареи, 4 означает хорошую батарею, а все, что между ними, — это именно то, что нужно.
АсмПрогм ЭФ6Ф4К3Д280А78ФЭ1Э 3805 ЭФ21521808 EFB3503E042001AF EF8C47EFBF4AC9
ASCII
Отобразить символ ASCII в последней позиции курсора, используя Ans (от 0 до 255)
AsmPrgmEFD74AEFEF4AEF0445C9
Отобразите строку символов ASCII, используя список в Ans (используйте значения от 0 до 255):
AsmPrgmEFD74A3DC0EB462323C5EF7A41E5EFEF4AEF0445E1C110F1C9
Примером использования этого может быть:
:65+{7,4,11,11,14 :Asm(prgmASCII
Это отобразит «HELLO», и если вы измените 65 на 97, он отобразит «hello».
Ошибка
Этот код приведет к возникновению ошибки на основе значения в Ans. Значения соответствуют найденным здесь. Используйте инструмент поиска вашего браузера, чтобы найти «E_Overflow», что является ошибкой 1. По умолчанию нет опции «Перейти», если вы не добавите 128 к значениям. Так, например, для ошибки деления на ноль с опцией goto используйте 130 в качестве кода ошибки.
AsmPrgmEFD74AEFEF4AEFD744C9
Генератор токенов
Этот код полезен, если вы хотите получить доступ к произвольному токену по его шестнадцатеричному коду. Например, предположим, что вы хотите получить токен PrintScreen с шестнадцатеричным кодом 91. Напишите
:AsmPrgmEFF1423605C9. :91
где последняя строка содержит шестнадцатеричный код нужного токена или токенов.
Чтобы использовать это, сначала скомпилируйте программу с помощью команды AsmComp(, затем запустите скомпилированную версию с помощью команды Asm(. Это разблокирует скомпилированную программу в редакторе программ. Когда вы отредактируете ее, вы увидите куча мусорных символов, за которыми следует токен, который вы хотели.0005
Эти коды длинные и сложные, поэтому будьте осторожны при их вводе. Тем не менее, они очень полезны.
CharLength
EFD74AD604C0 6Ф67ЭБ 4E234623EB C5D5E51A EFA342F5 EBEF9445 F1E1D109C1 20020B13 0B1378B120E5 EF9247 EF5641 EFBF4A С9
Это вернет количество символов в строке (строка находится в Ans). Например, «sin(ln(2))» вернет 10.
Ширина строки в пикселях
EFD74AD604C0 676ФЕВ 4E234623EB C5D5E51A EFA342F5 EBEF9445 218Д8477ЭФБ44К06004Ф F1E1D109C1 20020B13 0B1378B1 20 дБ EF9247 EF5641 EFBF4A С9
Это возвращает ширину строки в пикселях.
ListToVars 1
EFD74AFE01C0 1AFE1B38023E1B EB232347 3Э41 C5F5E5F5 EFC541F1 327984 D73003EF0F43 E1010900EDB0 F13CC110E4 С9
Если Ans является списком, каждый элемент будет храниться в переменной Real, начиная с A и увеличиваясь по каждой переменной, пока список не будет готов. Например, {0,4,3,12,8,24} будет хранить 0→A, 4→B, 3→C, 12→D, 8→E, 24→F.
ListToVars 2
EFC5413EAA327984 D7300F 3E40061B21EC86 3C772310FB 11EA861313D5 EFD74AFE01C0 1AFE1B38023E1B EB232347 Д11А13Д5 C5E5F5 EFC541F1 327984 D73003EF0F43 E1010900EDB0 C110E3 D1C9
Если Str1 содержит список переменных для записи, а L1 имеет список значений для записи, эта программа запишет значения в переменные. Например:
:"ADCZQGB→Str1 :{0,1,1,2,3,5,8 :Asm(prgmL2V2 Тогда результат будет: :А равно 0 :D это 1 :С равно 1 :Z равно 2 :Q равно 3 :G равно 5 :В равно 8
ExecAns
EFD74A FE04C0 215500 ;55 - это токен для "U" 22EC86227984 21F086 EB4E234623 ЭД43ЕЕ86 ЭДБ0 3E05327884 EFF142 3803EFC64F 3E0521EC86 EF3C4C С9
An — строка в качестве входных данных. Это удалит prgmU, затем скопирует Ans в prgmU и запустит его, будь то ассемблер или код BASIC.
RepeatKeys
180A 83473A4584323F8478C9 2100807EFE83 2006AF77323F84C9 11979DEB018000EDB0 ДБ06210080EF664FC9
Это установит ловушку, которая заставит все ключи регистрироваться очень быстро. Кроме того, все ключи повторяются. Обратите внимание, что это не будет активировано во время выполнения программы. Запустите эту программу еще раз, чтобы деактивировать
Горячие клавиши
1809 83473E0132428478C9 2100807EFE83 2006AF77323F84C9 11979DEB018000EDB0 ДБ06210080EF664FC9
Это приведет к тому, что повторяющиеся клавиши (например, стрелки или [Del]) будут повторяться очень быстро.
Мультиключи 2
017F07210000545C CB0179D301E5E1DB012FB720083E08856F10ED180E C506082C0F30025C6510F8C110DD 7CB720016F 6С62 7BB7280A 444Д20929292919 EF9247 EF5641 EFBF4A С9 Это возвращает уникальный код клавиши для любой комбинации одного или двух нажатий клавиш. Значения от 0 до 3191.
Спрайт
EFDA4AEFEF4A 626Б 1
29E5 EFE04AEFEF4A 1693CBF3E119E5 ЭФД74АЭ1ФЭ04К0 1313 010C08 CDCC9DCDCC9D780600094710F3 EF6A48 С9 1AC6C03002D607ED6F13C9Это отобразит спрайт 8×8 на экране графика, используя Ans в качестве шестнадцатеричной строки данных, X и Y в качестве координат. Y может быть от 0 до 56, X должен быть от 0 до 11 (он рисует каждый восьмой пиксель). Строка должна состоять из 16 символов, каждый символ представляет собой шестнадцатеричное значение, соответствующее включенному/выключенному состоянию 4 пикселей. Итак, строка «3C42A581A599423C» нарисует смайлик.
- Многие из этих кодов (оригинальные) взяты из блога DarkerLine, а последний шестнадцатеричный код, в частности, для отключения калькулятора, взят от чипмастера.
- Дополнительные коды операций см. в обсуждениях ASM Programming или Assembly Hex Codes.
- Многие коды взяты из «Шестнадцатеричных кодов Зеды»
Печать сборки в шестнадцатеричном формате · GitHub
[орг 0x7c00] мов дх, 0x1fb7 ; Установите значение, которое мы хотим напечатать, на dx .вызов print_hex ; Распечатайте шестнадцатеричное значение jmp $ ; Повесьте трубку, как только мы закончим %include «print_string.asm» ; Выводит значение DX в шестнадцатеричном формате. print_hex: пуша ; сохранить значения регистров в стек на потом мов сх,4 ; Запускаем счетчик: хотим напечатать 4 символа ; 4 бита на символ, поэтому мы печатаем всего 16 бит 90 358 char_loop: дес сх ; Уменьшить счетчик мов ах, дх ; скопируйте bx в ax, чтобы мы могли замаскировать его для последних символов шр дх,4 ; сдвиг bx на 4 бита вправо и ax,0xf ; маска ах, чтобы получить последние 4 бита мов бх, HEX_OUT ; установить bx на адрес памяти нашей строки добавить bx, 2 ; пропустить «0x» добавить bx, cx ; добавить текущий счетчик к адресу cmp ax,0xa ; Проверьте, это буква или цифра .jl set_letter ; Если это число, сразу переходите к установке значения .добавить байт [bx],7 ; Если это письмо, добавьте 7 ; Почему это волшебное число? Буквы ASCII начинаются с 17 ; символы после десятичных чисел. Нам нужно покрыть это ; расстояние. Если наше значение — буква, то это уже .; более 10, поэтому нам нужно добавить еще 7. jl set_letter set_letter: добавить байт [bx],al ; Добавьте значение байта в char по адресу bx .cmp сх,0 ; проверить счетчик, сравнить с 0 вот print_hex_done ; если счетчик равен 0, закончить jmp char_loop ; в противном случае повторите цикл print_hex_done: мов бх, HEX_OUT ; напечатать строку, на которую указывает bx вызов print_string папа ; извлечь начальные значения регистров из стека возврат ; вернуть функцию ; глобальные переменные HEX_OUT: дб ‘0x0000’, 0 ; Прокладка и магическое число раз 510-($-$$) дб 0 дв 0xaa55 Преобразование шестнадцатеричного микрокода в язык микроассемблера
Преобразование шестнадцатеричного микрокода в язык микроассемблераНа приведенной выше диаграмме показана схема микрокоманды для Mic-1. Каждый бит представляет собой строку пути к данным.
Такое представление неудобно использовать при обсуждении микрокода, т.к. поэтому в книге используется язык микроассемблера (MAL). Это прямой путь процесс изменения шестнадцатеричного микрокода в MAL.
Обратите внимание, что шестнадцатеричная инструкция имеет 6 областей.
- Следующий адрес
- ВАРЕНЬЕ
- АЛУ и Шифтер
- Регистры шины C
- Память
- B Автобусный регистр
Каждая часть соответствует разделу инструкции MAL.
Регистр шины B
4 бита для регистра шины B отправляются через декодер, так что один из девяти входных регистров подключается к шине B.
АЛУ и Шифтер
Операция ALU устанавливается из приведенной выше таблицы. Шифтер способен: не сдвигайте, сдвигайте вправо арифметическую 1 и сдвигайте влево логическую 8. АЛУ использует шины A и B в качестве входных данных. В пути данных H всегда подключается к A Bus, а регистр для B Bus определяется разделом B шестнадцатеричная микроинструкция. Принимая во внимание, что операция ALU должна быть указана как A + B, мы всегда будем использовать H вместо A и использовать имя регистра, которое отправлено в шину B, например. Н + ОПЦ.
Регистры шины C
Для каждого бита, который установлен в этой секции, записывается соответствующий регистр с результатами работы АЛУ. Например, если биты OPC и PC установлены, то оба получат результат операции.
OPC = PC = операция ALU
Вычисления из ALU и Shifter будут коммутированы в каждый из регистров слева от каждого знака равенства.Следующий адрес и JAM
Эти поля используются для определения следующего адреса.
- JMPC
- Если установлен JMPC, то инструкция MAL будет иметь:
goto(MBR или NEXT_ADDRESS)
. Примеры инструкций с набором JMPC:широкий1
иОсновной1
.- варенье
- Если установлено JAMN, то инструкция MAL будет иметь:
, если (N) перейти true_label else goto false_label
Имейте в виду, что в макете микрокода адрес для true_label на 256 больше, чем адрес для false_label .- ЯМЗ
- Если установлен JAMZ, то инструкция MAL будет иметь:
, если (Z) перейти true_label else goto false_label
Имейте в виду, что в макете микрокода адрес для true_label на 256 больше, чем адрес для false_label .- Никто
- Если ни один из битов JAM не установлен, то инструкция MAL будет иметь:
перейти (NEXT_ADDRESS)
Обратите внимание, что для краткости микрокод в книге опускает этот оператор. из всех операторов MAL. На домашнем задании или на экзамене я буду ждать тебя включить этот оператор в инструкцию MAL.Память
Эти биты указывают, когда начнется соответствующая операция. Это возможно для одновременного выполнения READ и FETCH, а также для выполнения WRITE и FETCH одновременно. Не разрешено выполнять ЧТЕНИЕ и ЗАПИСЬ в то же время. Это сделано для простоты: предполагается, что существует всегда попадание в кэши кода и данных, и что оба кэша могут быть доступ одновременно.
Примеры преобразования MAL в шестнадцатеричный и шестнадцатеричный в MAL
Рассмотрим несколько инструкций из микрокода для Mic-1
- Основной 1: ПК = ПК + 1; принести; перейти (MBR)
- Поля шестнадцатеричной микроинструкции можно заполнить следующим образом
- JMPC установлен, так как MBR указан в goto. Поле JAM: 100
- NEXT_ADDRESS равен 0x000. Так как это JMPC и формат goto (MBR или NEXT_ADDRESS), то поле NEXT_ADDRESS должно быть равно 0.
- Шифтер не используется, поэтому два его бита равны 0.
- АЛУ операция B + 1: 110101
- Пишется только ПК. C Поля: 000000100
- Код загружается. Поле памяти: 001
- ПК подключается к шине B. Поле Б: 0001
Двоичный формат
000000000 100 00110101 000000100 001 0001
Шестнадцатеричный формат
004350211- iflt1: MAR = SP = SP — 1;rd
- Поля шестнадцатеричной микроинструкции можно заполнить следующим образом
- Все биты JAM равны 0.
- NEXT_ADDRESS — 0x023. На самом деле есть
goto(iflt2)
подразумевается. Я предполагаю, что iflt2 имеет адрес 0x023.- Шифтер не используется, поэтому два его бита равны 0.
- Операция АЛУ: B – 1: 110 110
- МАР и СП пишутся. C Поля: 000001001
- Данные считываются. Поле памяти: 010
- SP подключается к шине B. Поле Б: 0100
Двоичный формат
000100011 000 00110110 000001001 010 0100
Шестнадцатеричный формат
1183604A4- 42А140008
- двоичный формат
010000101 010 00010100 000000000 000 1000- NEXT_ADDRESS — 0x085. Обратите внимание, что старший бит поля NEXT_ADDRESS 0. Это необходимо для работы условного перехода. Если ветка есть взято, то адрес будет изменен путем помещения 1 в старший бит NEXT_АДРЕС. Если ветка не занята, то адрес не будет изменен. Если старший бит NEXT_ADDRESS уже равен 1, то пункт назначения обе ветви будут одинаковыми.
- Биты JAM. JAMN установлен, поэтому будет
, если (N) перейти к 0x185, иначе перейти 0x085
. Обратите внимание, что адрес с истинной меткой на 256 больше, чем адрес с ложной меткой- Операция переключения: 00. Нет переключения.
- Операция АЛУ: 010100. B ИЛИ 0.
- C Поля: 00000000. Поскольку все они равны 0 и установлен бит JAMN, будет операцией N = ALU в инструкции MAL.
- Поле памяти: 000. Нет функции памяти.
- Поле B: 1000. OPC отправляется на шину B.
Инструкция MAL
N = OPC;если (N) перейти к 0x185 иначе перейти к 0x085
- 8F8948003
- двоичный формат
100011111 000 10010100 100000000 000 0011- NEXT_ADDRESS — 0x11F.
- Все биты JAM равны 0. Следующим адресом будет адрес в части инструкции NEXT_ADDRESS. Так что есть
перейти (0x11F)
.- Сменная операция: 10. Работа с АЛУ << 8.
- Операция АЛУ: 010100. B ИЛИ 0.
- C Поля: 10000000. H = Операция АЛУ.
- Поле памяти: 000. Нет функции памяти.
- Поле B: 0011. MBRU отправляется на шину B.
Инструкция MAL
H = MBRU << 8; перейти (0x11F)Как преобразовать asm в шестнадцатеричный для AT89c2051
Добро пожаловать на EDAboard.com
Добро пожаловать на наш сайт! EDAboard.com — это международный дискуссионный форум по электронике, посвященный программному обеспечению EDA, схемам, схемам, книгам, теории, документам, asic, pld, 8051, DSP, сети, радиочастотам, аналоговому дизайну, печатным платам, руководствам по обслуживанию… и многому другому. более! Для участия необходимо зарегистрироваться.
Регистрация бесплатна. Нажмите здесь для регистрации.Регистрация Авторизоваться
JavaScript отключен. Для лучшего опыта, пожалуйста, включите JavaScript в вашем браузере, прежде чем продолжить.
- Автор темы Джаямохан
- Дата начала
- Статус
- Закрыто для дальнейших ответов.
джаямохан
Член уровня 1
Привет всем,
У меня есть asm-файл для AT89C2051. как я могу преобразовать то же самое в шестнадцатеричный файл?
Может ли кто-нибудь помочь мне с пошаговыми инструкциями?
Заранее спасибо
джаянтх.
деварайанадургаЗапрещено
Вам нужен ассемблер 8051. Он поставляется с C51 + Keil uVision 4.
джаямохан
Член уровня 1
Есть ли бесплатный инструмент?
Также не могли бы вы рассказать мне в несколько шагов, как использовать keil C51, пожалуйста?
джаянтх.деварайанадурга
Запрещено
Создайте новый проект в keil, добавьте в проект пустой файл и сохраните его с расширением asm. Вставьте свой код в этот файл и сохраните. Во Flash>Configure Flash Tools… На вкладке Target установите Crystal freq. и на вкладке «Вывод» установите флажок «Создать шестнадцатеричный файл». Создайте проект. В менеджере проектов ассемблерный файл должен лежать в папке Source Group 1.
джаямохан
Член уровня 1
Спасибо за ответ.
нужно ли мне также выбирать устройство?
В моем кейле не нашел AT89C2051. В наличии только AT89S2051.Также возможно ли это с помощью встроенного рабочего стола IAR, и процедура для этого такая же?
джаянтх.деварайанадурга
Запрещено
Я не знаю ИАР. Используйте AT89S2051 и посмотрите.
тпетар
Расширенный член уровня 5
Джаямохан сказал:
Привет всем,
У меня есть ассемблерный файл для AT89C2051. как я могу преобразовать то же самое в шестнадцатеричный файл?
Может ли кто-нибудь помочь мне с пошаговой процедурой?
Заранее спасибо
Нажмите, чтобы развернуть…
Все зависит от того, какой у вас код.
Есть много ассемблеров для 8051.
Почтовый индекс.
джаямохан
Член уровня 1
Прикрепленный ассемблерный код для AT89C2051.
Необходимо отредактировать этот ASM и создать шестнадцатеричный файл.
tpetar сказал:
Все зависит от того, какой у вас код.
Существует множество ассемблеров для 8051.
Почтовый индекс.
Нажмите, чтобы развернуть…
прабин20
Младший член уровня 1
@Jayamohan, используйте Keil uVision, вы найдете микроконтроллер AT89C2051 для вашего проекта. Вы можете выполнить ur . asm для создания шестнадцатеричного файла. Сначала сделайте проект, выполните его. Чтобы создать шестнадцатеричный файл из соответствующего файла .asm, просмотрите снимки экрана. надеюсь, это поможет вам. Я прикрепил проект с шестнадцатеричным файлом, проверьте его!!! созданный в keil u Vision.
Файл проекта:-https://www.megafileupload.com/en/file/418656/Solar-ASM-HEX-zip.html
Скриншоты:
тпетар
Расширенный член уровня 5
Используйте этот бесплатный онлайн-ассемблер для создания HEX-файла:
Семейный макроассемблер MCS-51 ASEM-51 V1.4a2
https://www.8051projects.info/onlineasm.aspВ прикрепленном ZIP-архиве у вас есть HEX-файл.
😉
— — — Обновлено — — —
Каким программатором пользуетесь для 89C2051? Некоторым из них нужен файл BIN. Если у вас есть такая ситуация, используйте инструмент HEX2BIN, чтобы преобразовать HEX в BIN.
джаямохан
Член уровня 1
спасибо за отзыв
Не могли бы вы также добавить снимок для «создать проект и выполнить его».
прабин20 сказал:
@Jayamohan, используй Keil uVision, ты найдешь микроконтроллер AT89C2051 для своего проекта. Вы можете выполнить ur .asm для создания шестнадцатеричного файла. Сначала сделайте проект, выполните его. Чтобы создать шестнадцатеричный файл из соответствующего файла .asm, просмотрите снимки экрана. надеюсь, это поможет вам. Я прикрепил проект с шестнадцатеричным файлом, проверьте его!!! созданный в keil u Vision.
Файл проекта: https://www.megafileupload.com/en/file/418656/Solar-ASM-HEX-zip.html
Скриншоты:
Посмотреть вложениеПосмотреть вложение Посмотреть вложениеПосмотреть вложение Нажмите, чтобы развернуть. ..
— — — Обновлено — — —
Спасибо за вашу поддержку…
tpetar сказал:
Используйте этот бесплатный онлайн-ассемблер для создания HEX-файла:
Семейный макросборщик MCS-51 ASEM-51 V1.4a2
https://www.8051projects.info/onlineasm.aspВ прикрепленном ZIP-архиве у вас есть HEX-файл.
😉
— — — Обновлено — — —
Каким программатором пользуетесь для 89C2051? Некоторым из них нужен файл BIN. Если у вас есть такая ситуация, используйте инструмент HEX2BIN, чтобы преобразовать HEX в BIN.
Нажмите, чтобы развернуть…
- Статус
- Закрыто для дальнейших ответов.
U
[РЕШЕНО] asm to hex file Исходный файл не найден: (нет файла)!
- Запущен пользователем3737
- Ответов: 6
Микроконтроллеры
А
Pic 16f877A Шестнадцатеричный файл
- Автор AboudaKing
- Ответов: 9
Микроконтроллеры
Как преобразовать структурную переменную в массив uint8_t в C?
- Автор jack1998
- Ответов: 4
Микроконтроллеры
Дж
Hex в ASCII для UART
- Автор: John99407
- Ответов: 8
Микроконтроллеры
Д
Как получить данные от команд SPCI в C#
- Автор: yefj
- Ответов: 8
Микроконтроллеры
Делиться:
Фейсбук Твиттер Реддит Пинтерест Тамблер WhatsApp Эл. адрес Делиться Ссылка на сайт
Верх
Как создать HEX-файл с помощью MPLAB IDE
Использование MPLAB для создать HEX-файл
Краткое пособие для сборки прошивки с MPLAB
Обзор
Начало работы
Выбор PIC
Сборка с помощью Quickbuild
Распространенные ошибки
Помощь с ошибками
Использование памяти
Это очень краткое руководство, позволяющее вам собрать и сгенерировать HEX-файлы программатора из исходников файлы кода, загруженные с веб-сайта Picprojects. Это не исчерпывающее руководство по использованию MPLAB IDE и не предназначен для…
Обзор
Одна страница Краткий обзор программы «Программирование микрочипа PIC» диаграмма.
И видео
Многие проекты на сайт уже предоставляет необходимый HEX-файл для программирования в ПОС. В этом случае все, что вам нужно сделать, это загрузить HEX файл и запрограммировать его в PIC, вам не нужно делать что-нибудь еще. Другие проекты на сайте позволяют изменить или отредактировать исходный код в соответствии с вашими потребностями. С этими проектами необходимо собирать модифицированные исходный код для создания нового HEX-файла.
Чтобы превратить исходный код в что-то, что можно запрограммировать в реальный PIC микросхема микроконтроллера, необходимая для сборки кода. Этот делается с помощью ассемблера MPASM, который берет исходные файлы и создает HEX-файл, который может записать ваше аппаратное обеспечение программиста в микросхему PIC.
Вы можете сделать это, открыв файлы исходного кода в программе MPLAB IDE и с помощью опции Quickbuild для создания HEX-файла. если ты подключив программатор PICkit2, вы также можете запрограммировать сгенерированный HEX-файл непосредственно в PIC из MPLAB. Для другого оборудования программатора вам нужно будет использовать приложение, прилагаемое к программатору, для записи HEX-файла в ПОС.
Начало работы
Выбор PIC
- В меню Настройка откройте «Выберите устройство»
- Выберите правильный тип PIC из капли вниз список, как показано ниже.
- Проекты на Веб-сайт Picprojects использует несколько различных PIC микроконтроллеры. Ты необходимо выбрать то же устройство, которое используется в проекте для исходный код для правильной сборки.
- Если вам нужно отредактировать и изменить содержимое одного из включаемых файлов перед сборки, открываем файл и вносим изменения. Когда вы сделали, сохраните файл, прежде чем переходить к следующему шагу.
Сборка исходный код с Quickbuild
- Выделите файл с расширением .asm расширение в окно редактирования.
- Далее выберите Quickbuild из меню Проект. Параметр Quickbuild запустит Ассемблер Microchip MPASM, который создает файл .HEX из исходные файлы .asm и .inc.
- Примечание: если Quickbuild пункт меню не показывает имя файла .asm, вы не выбрал окно на последнем шаге.
- После завершения быстрой сборки завершено, проверьте окно вывода, чтобы убедиться, что сборка удалось. Если вы получаете текст «Построение выполнено успешно» на конце вы найдете файл .HEX в рабочем каталоге с то же имя, что и файл .asm. например pwmc_main123.asm сгенерирует файл с именем pwmc_main123.HEX, если сборка успешна.
- Если есть ошибки сообщается здесь, или сборка не удалась, вам необходимо изучить и исправить их перед программированием PIC. Распространенные ошибки
- Имейте в виду, что если Файл .HEX уже существует из предыдущей успешной сборки и впоследствии сборка завершается с ошибкой, файл .HEX в рабочей каталог из последней успешной сборки. (это совет, который стоит запомнить, прежде чем тратить часы на попытки понять, почему внесенные вами изменения не работают 🙂
Некоторые известные ошибки
Ошибка 173
Если вы видите ошибку 173, похожую на это, когда вы запускаете Quickbuild, ваш путь к файлу слишком длинный:
Ошибка [173] E:\МОИ ПРОЕКТЫ\PICPROJECTS\МОЙ ПОСЛЕДНИЙ ПРОЕКТ\ИСХОДНЫЙ КОД\PICPROJECT.ASM 64 : Путь к исходному файлу превышает 62 символа (E:\MY PROJECTS\PICPROJECTS\MY ПОСЛЕДНИЙ ПРОЕКТ\ИСХОДНЫЙ КОД\PICPROJECT.ASM) Прекращение сборки первый сбой по запросу.Исправить
Ассемблер MPASM не принимает путь к каталогу + файл имя должно быть длиннее 62 символов, поэтому не используйте каталог в разделе «Мои документы»; вместо этого создайте один из корень C:, например c:\pic\project1\
Ошибка 301
Если вы видите ошибку 301 аналогично показанному ниже процессору, выбранному в выпадающий список устройств не соответствует указанному в исходный код. Выберите правильный процессор, прежде чем переходить к следующий шаг.
Сообщение [301] C:\PROGRAM FILES\MICROCHIP\MPASM SUITE\P12F675.INC 36 : СООБЩЕНИЕ: (Несоответствие файла заголовка процессора. Проверьте выбранный процессор.)
Исправить
Выберите правильный процессор из меню Настройка. Смотрите здесь
Ошибка 151
Ошибка [151] C:\Picproject\LONGDELAYF4.ASM 279: операнд содержит неразрешимые метки или слишком сложные
Исправление
Код на моем сайте записывается как абсолютный код. Я видел ошибку 151, когда люди пытались построить его как перемещаемый код. если ты следуйте инструкциям на этой странице, используя опцию Quickbuild, чтобы соберите код, ошибка не должна возникать.
Ошибка 220
Предупреждение[220] C:\CODE\RGBSA-INET.ASM 158: адрес превышает максимальный диапазон для этого процессора.
Если вы видите ошибку [220] собранный код больше, чем память на указанном ПОС. Обычно вы видите эту ошибку, если вы добавили данные в один из включенных файлов ( например RGB последовательностей в драйверах RGB светодиодов ) и увлекся 🙂
Помощь с ошибки во время Quickbuild
- Если есть ошибки вы можете открыть файл с расширением .err в каталог исходного кода, чтобы увидеть их в деталях.
- Из меню «Справка» в MPLAB select Topics.. — Ассемблер MPASM. Поиск для ошибок ассемблера, чтобы получить больше информации о конкретный номер ошибки.
Сколько памяти у программа использовала
- Этот шаг необязателен, но вы можете найти информацию полезной для некоторых проектов, которые позволяют добавлять информацию во включаемый файл.
- После успешной сборки, если вы смотрите в рабочем каталоге вы увидите файл с .lst расширение. Если вы откроете этот файл в текстовом редакторе и дойдите до самого конца, вы увидите карту использования памяти.