====== Ассемблер для микроконтроллера КР1878ВЕ1 "Тесей" ====== [[http://www.angstrem.ru/product/risc.htm | Микроконтроллер КР1878ВЕ1 "Тесей"]] выпускается Зеленоградским заводом [[http://www.angstrem.ru/product/mk-mp.htm | "Ангстрем"]]. Он является аналогом [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010180 | Microchip PIC16C84]] c EEPROM. Хорошее описание есть в статье [[http://www.chipinfo.ru/literature/chipnews/200001/11.html | Шишарина и Малашевича]]. ===== Ассемблер ===== Для Тесея я разработал {{tesei:tesei-0.1.tgz | простой однопроходный ассемблер}}. В дистрибутиве есть также дизассемблер, читающий HEX-файл и выдающий ассемблерный текст. Отличия от фирменного ассемблера (tessa.exe): * В директиве .byte требуется четное количество аргументов. * При ссылке на локальную метку необходимо задавать направление ссылки буквами `f' и `b' (вперед и назад) после номера метки, например "jmp $1f". * Нет встроенного препроцессора. Рекомендуется использовать cpp. * Для неопределенных имен автоматически подключаются файлы из библиотеки. * Производится оптимизация констант (.const) - одинаковые константы используются повторно. Вызов: as-tesei [флаги...] infile.mic... Флаги: -D, --debug Выдача отладочной информации -l, --library=DIR Добавить DIR к пути поиска библиотек -o, --output=FILE Направлять результат в FILE (по умолчанию infile.hex) -?, --help Выдать эту справочную информацию --usage Выдать короткую справочную информацию -V, --version Выдать номер версии программы Мнемоника команд ассемблера приведена [[tesei:opcodes | на отдельной странице]]. ===== Библиотека арифметических функций ===== На основе материалов сайта [[http://www.angstrem.ru/product/risc.htm]] я сделал [[tesei:runtime | библиотеку арифметических функций]]. Не знаю, работают ли эти функции, но по крайней мере ассемблер прекрасно связывает файлы из библиотеки. Имеются функции: * Беззнаковое умножение 8x8 * Знаковое умножение 8x8 * Беззнаковое умножение 16x16 * Знаковое умножение 16x16 * Беззнаковое деление 8x8 * Знаковое деление 8x8 * Беззнаковое деление 16x16