Site Loader

Содержание

Лучшее программное обеспечение для конвертации файлов 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.com?

Я прекрасно понимаю, что это ещё тот колхоз делиться файлами через обсуждения VK, но кто знает, во что может превратиться эта маленькая группа в будущем.

После распаковки файлов, советую сохранить их в папке Asm на диск C, чтобы иметь меньше расхождений с представленным тут материалом. Если вы разместите директорию в другое место, изменится лишь путь до файлов, когда вы будете использовать команду mount.

Для запуска интерпретатора нам так же потребуется эмулятор DOSBox. Он и оживит все наши компоненты. Скачаем и установим его!
Ссылка

В папке Asm я специально оставил файл code. asm. Именно на нём мы и потренируемся запускать нашу программу. Советую сохранить его копию, ибо там хранится весь код, который в 99% случаев будет присутствовать в каждом вашем проекте.

code.asm
s_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.

Маленькая шпаргалка для заметок:

  1. mount d: c:\asm – создаём виртуальный диск, где корень –папка asm

  2. d: — открываем созданный диск

  3. tasm code.asm – компилируем исходный код

  4. tlink code.obj – создаём исполняемый файл

  5. td code – запускаем debug

  6. 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.

Содержание:

  1. Подготовка
  2. Принципиальная схема и макет
  3. Исходный код программы на Ассемблере
  4. Документация по Ассемблеру
  5. Работа с числами в Hex, Bin и Dec
  6. Компиляция и прошивка программы в МК
  7. Заключение

Подготовка

Итак, у нас уже есть настроенный и подключенный к микроконтроллеру программатор, также мы разобрались с программой 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. Арифметические команды языка Ассемблер: аддитивные и мультипликативные команды целочисленных операций.

w3.org/1999/xhtml» cellspacing=»0″>

7.1. Сложение и вычитание.

7.1.1. ADD – команда для сложения двух чисел. Она работает как с числами со знаком, так и без знака.

ADD Приемник, Источник

Логика работы команды:

<Приемник> = <Приемник> + <Источник>

Возможные сочетания операндов для этой команды аналогичны команде MOV.

По сути дела, это – команда сложения с присвоением, аналогичная принятой в языке C/C++:

Приемник += Источник;

Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда.

После выполнения команды изменяются флаги, по которым можно определить характеристики результата:

  1. Флаг CF устанавливается, если при сложении произошёл перенос из старшего разряда. Для беззнаковых чисел это будет означать, что произошло переполнение и результат получился некорректным.
  2. Флаг OF обозначает переполнение для чисел со знаком.
  3. Флаг SF равен знаковому биту результата (естественно, для чисел со знаком, а для беззнаковых он равен старшему биту и особо смысла не имеет).
  4. Флаг ZF устанавливается, если результат равен 0.
  5. Флаг 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 простых шага:
  1. Загрузите Restoro PC Repair Tool , который поставляется с запатентованными технологиями (патент доступен здесь).
  2. Нажмите Начать сканирование , чтобы найти проблемы Windows, которые могут вызывать проблемы с ПК.
  3. Нажмите Восстановить все , чтобы устранить проблемы, влияющие на безопасность и производительность вашего компьютера.
  • 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 областей.

  1. Следующий адрес
  2. ВАРЕНЬЕ
  3. АЛУ и Шифтер
  4. Регистры шины C
  5. Память
  6. 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)
Поля шестнадцатеричной микроинструкции можно заполнить следующим образом
  1. JMPC установлен, так как MBR указан в goto. Поле JAM: 100
  2. NEXT_ADDRESS равен 0x000. Так как это JMPC и формат goto (MBR или NEXT_ADDRESS), то поле NEXT_ADDRESS должно быть равно 0.
  3. Шифтер не используется, поэтому два его бита равны 0.
  4. АЛУ операция B + 1: 110101
  5. Пишется только ПК. C Поля: 000000100
  6. Код загружается. Поле памяти: 001
  7. ПК подключается к шине B. Поле Б: 0001

Двоичный формат
000000000 100 00110101 000000100 001 0001
Шестнадцатеричный формат
004350211

iflt1: MAR = SP = SP — 1;rd
Поля шестнадцатеричной микроинструкции можно заполнить следующим образом
  1. Все биты JAM равны 0.
  2. NEXT_ADDRESS — 0x023. На самом деле есть goto(iflt2) подразумевается. Я предполагаю, что iflt2 имеет адрес 0x023.
  3. Шифтер не используется, поэтому два его бита равны 0.
  4. Операция АЛУ: B – 1: 110 110
  5. МАР и СП пишутся. C Поля: 000001001
  6. Данные считываются. Поле памяти: 010
  7. SP подключается к шине B. Поле Б: 0100

Двоичный формат
000100011 000 00110110 000001001 010 0100
Шестнадцатеричный формат
1183604A4

42А140008
  1. двоичный формат
    010000101 010 00010100 000000000 000 1000
  2. NEXT_ADDRESS — 0x085. Обратите внимание, что старший бит поля NEXT_ADDRESS 0. Это необходимо для работы условного перехода. Если ветка есть взято, то адрес будет изменен путем помещения 1 в старший бит NEXT_АДРЕС. Если ветка не занята, то адрес не будет изменен. Если старший бит NEXT_ADDRESS уже равен 1, то пункт назначения обе ветви будут одинаковыми.
  3. Биты JAM. JAMN установлен, поэтому будет , если (N) перейти к 0x185, иначе перейти 0x085 . Обратите внимание, что адрес с истинной меткой на 256 больше, чем адрес с ложной меткой
  4. Операция переключения: 00. Нет переключения.
  5. Операция АЛУ: 010100. B ИЛИ 0.
  6. C Поля: 00000000. Поскольку все они равны 0 и установлен бит JAMN, будет операцией N = ALU в инструкции MAL.
  7. Поле памяти: 000. Нет функции памяти.
  8. Поле B: 1000. OPC отправляется на шину B.

Инструкция MAL
N = OPC; если (N) перейти к 0x185 иначе перейти к 0x085

8F8948003
  1. двоичный формат
    100011111 000 10010100 100000000 000 0011
  2. NEXT_ADDRESS — 0x11F.
  3. Все биты JAM равны 0. Следующим адресом будет адрес в части инструкции NEXT_ADDRESS. Так что есть перейти (0x11F) .
  4. Сменная операция: 10. Работа с АЛУ << 8.
  5. Операция АЛУ: 010100. B ИЛИ 0.
  6. C Поля: 10000000. H = Операция АЛУ.
  7. Поле памяти: 000. Нет функции памяти.
  8. Поле B: 0011. MBRU отправляется на шину B.

Инструкция MAL
H = MBRU << 8; перейти (0x11F)

Как преобразовать asm в шестнадцатеричный для AT89c2051

Добро пожаловать на EDAboard.com

Добро пожаловать на наш сайт! EDAboard.com — это международный дискуссионный форум по электронике, посвященный программному обеспечению EDA, схемам, схемам, книгам, теории, документам, asic, pld, 8051, DSP, сети, радиочастотам, аналоговому дизайну, печатным платам, руководствам по обслуживанию… и многому другому. более! Для участия необходимо зарегистрироваться.
Регистрация бесплатна. Нажмите здесь для регистрации.

Регистрация Авторизоваться

JavaScript отключен. Для лучшего опыта, пожалуйста, включите JavaScript в вашем браузере, прежде чем продолжить.