Flowcode не смог ассемблировать файл asm из за следующих ошибок s

Обновлено: 30.06.2024

2\Flowcode" ­Ґ пў«пҐвбп ў­гв७­Ґ© Ё«Ё ў­Ґи­Ґ©
Є®¬ ­¤®©, ЁбЇ®«­пҐ¬®© Їа®Ја ¬¬®© Ё«Ё Ї ЄҐв­л¬ д ©«®¬.
Return code = 1
Flowcode не смог откомпилировать код C блок-схемы из-за следующих ошибок:

Если Ваша блок-схема содержит код C, пожалуйста проверьте это тщательно. Если Ваша блок-схема не содержит C-кода, или Вы полностью проверили код, войдите в контакт с Технической поддержкой

Закорючки переводятся как;
"C:\PROGRA

2\Flowcode" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

Была такая же проблема. Решил ее так. Скопировал папку Tools из C:\Program Files (x86)\Flowcode(AVR)\v5\Tools в корень диска С . И в опциях компилятора Flowcode Build-Compiler Options соответственно изменил путь для запуска командных файлов . На вкладке Compiler поставил C:\Tools\MX_bats\avra.bat , а на вкладке Linker/Assembler -C:\Tools\MX_bats\avrb.bat . Параметры не менял

Информация Неисправность Прошивки Схемы Справочники Маркировка Корпуса Сокращения и аббревиатуры Частые вопросы Полезные ссылки

Справочная информация

Этот блок для тех, кто впервые попал на страницы нашего сайта. В форуме рассмотрены различные вопросы возникающие при ремонте бытовой и промышленной аппаратуры. Всю предоставленную информацию можно разбить на несколько пунктов:

  • Диагностика
  • Определение неисправности
  • Выбор метода ремонта
  • Поиск запчастей
  • Устранение дефекта
  • Настройка

Неисправности

Все неисправности по их проявлению можно разделить на два вида - стабильные и периодические. Наиболее часто рассматриваются следующие:

  • не включается
  • не корректно работает какой-то узел (блок)
  • периодически (иногда) что-то происходит

О прошивках

Большинство современной аппаратуры представляет из себя подобие программно-аппаратного комплекса. То есть, основной процессор управляет другими устройствами по программе, которая может находиться как в самом чипе процессора, так и в отдельных микросхемах памяти.

На сайте существуют разделы с прошивками (дампами памяти) для микросхем, либо для обновления ПО через интерфейсы типа USB.

Схемы аппаратуры

Начинающие ремонтники часто ищут принципиальные схемы, схемы соединений, пользовательские и сервисные инструкции. Это могут быть как отдельные платы (блоки питания, основные платы, панели), так и полные Service Manual-ы. На сайте они размещены в специально отведенных разделах и доступны к скачиванию гостям, либо после создания аккаунта:

Справочники

На сайте Вы можете скачать справочную литературу по электронным компонентам (справочники, таблицу аналогов, SMD-кодировку элементов, и тд.).

Marking (маркировка) - обозначение на электронных компонентах

Современная элементная база стремится к миниатюрным размерам. Места на корпусе для нанесения маркировки не хватает. Поэтому, производители их маркируют СМД-кодами.

Package (корпус) - вид корпуса электронного компонента

При создании запросов в определении точного названия (партномера) компонента, необходимо указывать не только его маркировку, но и тип корпуса. Наиболее распостранены:

  • DIP (Dual In Package) – корпус с двухрядным расположением контактов для монтажа в отверстия
  • SOT-89 - пластковый корпус для поверхностного монтажа
  • SOT-23 - миниатюрный пластиковый корпус для поверхностного монтажа
  • TO-220 - тип корпуса для монтажа (пайки) в отверстия
  • SOP (SOIC, SO) - миниатюрные корпуса для поверхностного монтажа (SMD)
  • TSOP (Thin Small Outline Package) – тонкий корпус с уменьшенным расстоянием между выводами
  • BGA (Ball Grid Array) - корпус для монтажа выводов на шарики из припоя

Краткие сокращения

При подаче информации, на форуме принято использование сокращений и аббревиатур, например:

Сокращение Краткое описание
LEDLight Emitting Diode - Светодиод (Светоизлучающий диод)
MOSFETMetal Oxide Semiconductor Field Effect Transistor - Полевой транзистор с МОП структурой затвора
EEPROMElectrically Erasable Programmable Read-Only Memory - Электрически стираемая память
eMMCembedded Multimedia Memory Card - Встроенная мультимедийная карта памяти
LCDLiquid Crystal Display - Жидкокристаллический дисплей (экран)
SCLSerial Clock - Шина интерфейса I2C для передачи тактового сигнала
SDASerial Data - Шина интерфейса I2C для обмена данными
ICSPIn-Circuit Serial Programming – Протокол для внутрисхемного последовательного программирования
IIC, I2CInter-Integrated Circuit - Двухпроводный интерфейс обмена данными между микросхемами
PCBPrinted Circuit Board - Печатная плата
PWMPulse Width Modulation - Широтно-импульсная модуляция
SPISerial Peripheral Interface Protocol - Протокол последовательного периферийного интерфейса
USBUniversal Serial Bus - Универсальная последовательная шина
DMADirect Memory Access - Модуль для считывания и записи RAM без задействования процессора
ACAlternating Current - Переменный ток
DCDirect Current - Постоянный ток
FMFrequency Modulation - Частотная модуляция (ЧМ)
AFCAutomatic Frequency Control - Автоматическое управление частотой

Частые вопросы

Как мне дополнить свой вопрос по теме Flowcode не компилирует в НЕХ?

После регистрации аккаунта на сайте Вы сможете опубликовать свой вопрос или отвечать в существующих темах. Участие абсолютно бесплатное.

Кто отвечает в форуме на вопросы ?

Ответ в тему Flowcode не компилирует в НЕХ как и все другие советы публикуются всем сообществом. Большинство участников это профессиональные мастера по ремонту и специалисты в области электроники.

Как найти нужную информацию по форуму ?

Возможность поиска по всему сайту и файловому архиву появится после регистрации. В верхнем правом углу будет отображаться форма поиска по сайту.

По каким еще маркам можно спросить ?

По любым. Наиболее частые ответы по популярным брэндам - LG, Samsung, Philips, Toshiba, Sony, Panasonic, Xiaomi, Sharp, JVC, DEXP, TCL, Hisense, и многие другие в том числе китайские модели.

Какие еще файлы я смогу здесь скачать ?

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

Полезные ссылки

Здесь просто полезные ссылки для мастеров. Ссылки периодически обновляемые, в зависимости от востребованности тем.

Проблемы с компиляцией программ, goto и т.д.

Правила форума
В песочнице можно спрашивать когда незнаешь где спросить.
В песочнице нелзя посылать в гугл
В песочнице можно задавать любой вопрос, но на него могут и неответить.
Песочница для тех, кто начинает свои вопросы с защиты чайников от пинков.
В песочницу будут перетаскиваться вопросы неполучившие ответа.
Песочница - попытка навести порядок.
На песочницу большие надежды.

mim (mim) » 25 дек 2012, 17:52

лерик писал(а): 1. Наконец то убедил.
2. Может тогда расскажешь двоечнику как правильно прикрепить архив Протеуса?
1. Ну это не значит что я буду с тобой церемонится, я не понимаю тех, кто не читает Хелп к программе.
2. Мне опять не понятен вопрос. Нет архива Протеуса. Есть архив в котором можно разместить хоть Протеус, хоть стихи Высоцкого. Что значит правильно. Берешь файл Протеуса, файл Программы, архивируешь все вместе и выкладываешь так как ты уже делал. Этот форум не имеет целью учить работать с компьютером.

Легенда


Ник: mim
Имя: mim
(Из Лесу, вестимо. ) Легенда
Информация о пользователе

лерик (лерик) » 25 дек 2012, 18:43

Что то я совсем запутался. Сделал так, ты сказал не правильно.

Заинтересованный


Ник: лерик
Имя: лерик
Заинтересованный
Информация о пользователе

mim (mim) » 25 дек 2012, 18:54

лерик писал(а): Что то я совсем запутался. Сделал так, ты сказал не правильно.
Ну, а ты посмотрел что ты вложил в Архив? В архив нужно вкладывать Протеус, Исходник программы (FC), можно еще выложить Хекс.
Ну на кой в Архив вкладывать файлы Си. и другую дребедень. Что это даст. Я бы еще понял если бы ты закрыл в Архив всю Директорию (ну лень человеку что-то выделять). А так я вижу что ты совсем не понимаешь что творишь.

Легенда


Ник: mim
Имя: mim
(Из Лесу, вестимо. ) Легенда
Информация о пользователе

лерик (лерик) » 25 дек 2012, 19:26

Заинтересованный


Ник: лерик
Имя: лерик
Заинтересованный
Информация о пользователе

mim (mim) » 25 дек 2012, 19:35


С одной стороны верно, а с другой - нужно указывать что файл исходника тот-же или перезалит там-то. Кто знает что исходник в первом посте, после различных замечаний или исправлений - это тот исходник который нужно смотреть?
И так нафлудили больше чем сделали.

Легенда


Ник: mim
Имя: mim
(Из Лесу, вестимо. ) Легенда
Информация о пользователе

почему не компилируется в нех

ivahco (Иван) » 11 фев 2014, 18:41

Последний раз редактировалось Иван 12 фев 2014, 11:29, всего редактировалось 2 раз(а).

Ученик

Ник: ivahco
Имя: Иван
(Белая Холуница) Ученик
Информация о пользователе

ivahco (Иван) » 12 фев 2014, 11:18

8 раз скачали дайте хоть один комент может у всех все нормально работает?
Извиняюсь вот лог
failure
Return code = -2
Flowcode не смог ассемблировать файл ASM из-за следующих ошибок:
s!
FINISHED

Последний раз редактировалось Иван 12 фев 2014, 11:30, всего редактировалось 1 раз.

Ученик

Ник: ivahco
Имя: Иван
(Белая Холуница) Ученик
Информация о пользователе

mim (mim) » 12 фев 2014, 11:20

Ты тему прочел? У меня компелится? Какие же еще советы? Покажи лог компиляции.

PS Лог - это текстовый файл с трассировкой компиляции. А ты показал уже результат - это галиматья, а не лог.

Легенда


Ник: mim
Имя: mim
(Из Лесу, вестимо. ) Легенда
Информация о пользователе

Taska (Максим) » 12 фев 2014, 11:44

Легенда


Ник: Taska
Имя: Максим
(Кривой Рог) Легенда
Информация о пользователе

ivahco (Иван) » 12 фев 2014, 11:45

Licensed to FlowCode User under Single user Pro License for 1 node(s)
Limitations: PIC12,PIC16 max code size:Unlimited, max RAM banks:Unlimited

Flowcode2_kkol.c
Starting preprocessor: C:\PROGRA

2\Flowcode\v5\Tools\boostc\pp.exe Flowcode2_kkol.c -i C:\PROGRA

2\Flowcode\v5\Tools\boostc\include -d _PIC16F876 -la -c2 -o Flowcode2_kkol.pp -v -d _BOOSTC -d _PIC16 -d _CHAR_INDEX

Error: Failed to open:libc.pic16.lib or C:\Program Files\Matrix Multimedia\Flowcode V5\Tools\BoostC\lib/libc.pic16.lib

failure
Return code = -2
Flowcode не смог ассемблировать файл ASM из-за следующих ошибок:
s!

Ученик

Ник: ivahco
Имя: Иван
(Белая Холуница) Ученик
Информация о пользователе

Файл flowcode.exe из unknown company является частью unknown product. flowcode.exe, расположенный в e:dell dimens2626_rm-291_schema1ticsmatrix multimediaflowcode\ flowcode .exe с размером файла 675840 байт, версия файла Unknown version, подпись 7959ec315933ab2cfd54433f0aaa4903.

  1. Запустите приложение Asmwsoft Pc Optimizer.
  2. Потом из главного окна выберите пункт "Clean Junk Files".
  3. Когда появится новое окно, нажмите на кнопку "start" и дождитесь окончания поиска.
  4. потом нажмите на кнопку "Select All".
  5. нажмите на кнопку "start cleaning".

Clean Registry to fix flowcode.exe has stopped working error

  1. Запустите приложение Asmwsoft Pc Optimizer.
  2. Потом из главного окна выберите пункт "Fix Registry problems".
  3. Нажмите на кнопку "select all" для проверки всех разделов реестра на наличие ошибок.
  4. 4. Нажмите на кнопку "Start" и подождите несколько минут в зависимости от размера файла реестра.
  5. После завершения поиска нажмите на кнопку "select all".
  6. Нажмите на кнопку "Fix selected".
    P.S. Вам может потребоваться повторно выполнить эти шаги.

3- Настройка Windows для исправления критических ошибок flowcode.exe:

Clean Registry to fix flowcode.exe has stopped working error

  1. Нажмите правой кнопкой мыши на «Мой компьютер» на рабочем столе и выберите пункт «Свойства».
  2. В меню слева выберите " Advanced system settings".
  3. В разделе «Быстродействие» нажмите на кнопку «Параметры».
  4. Нажмите на вкладку "data Execution prevention".
  5. Выберите опцию " Turn on DEP for all programs and services . " .
  6. Нажмите на кнопку "add" и выберите файл flowcode.exe, а затем нажмите на кнопку "open".
  7. Нажмите на кнопку "ok" и перезагрузите свой компьютер.
Как другие пользователи поступают с этим файлом?

Всего голосов ( 181 ), 115 говорят, что не будут удалять, а 66 говорят, что удалят его с компьютера.

English version of site here.

SASM (SimpleASM) - простая кроссплатформенная среда разработки для языков ассемблера NASM, MASM, GAS, FASM с подсветкой синтаксиса и отладчиком. В SASM Вы можете легко разрабатывать и выполнять программы, написанные на языке ассемблера. Вводите код в форму и запускайте приложение. Программа работает "из коробки" и хорошо подойдет для начинающих изучать язык ассемблера. Основана на Qt. Распространяется по свободной лицензии GNU GPL v3.0.

SASM

Для загрузки программы на Linux перейдите по соответствующей ссылке и выберите ваш дистрибутив и архитектуру (i386 / amd64).

Вы также можете собрать SASM из исходников, которые можно найти в GitHub репозитории или скачать SASM в zip-архиве для Windows.

Если Вы пользователь Mac, возможно, Вам поможет эта заметка об установке SASM на Mac (спасибо Brian R. Hall), а также это обсуждение в GitHub Issues.

Поддержите проект

WebMoney: Z282016332582 и R331674303467

О программе

Программа поддерживает работу с несколькими проектами – новые файлы открываются и создаются в новых вкладках. При выходе из программы текущий набор открытых файлов сохраняется. При следующем запуске Вы сможете восстановить предыдущую сессию. В параметрах настраивается шрифт, цветовая схема и текст, отображающийся при создании нового файла. Интерфейс программы доступен на восьми языках (русский, английский, турецкий (спасибо Ali Goren), китайский (спасибо Ahmed Zetao Yang), немецкий (спасибо Sebastian Fischer), итальянский (спасибо Carlo Dapor), польский (спасибо Krzysztof Rossa), иврит (спасибо Elian Kamal), испанский (спасибо Mariano Cordoba)). Все окна в программе плавающие, с возможностью закрепления в одной из множества позиций. Имеется возможность переназначения горячих клавиш.

Стандартное меню "Правка" дополнено возможностью комментирования/раскомментирования выделенного куска кода и создания/удаления отступа в 4 пробела (Tab/Shift+Tab).

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

SASM полностью поддерживает работу с четырьмя ассемблерами NASM, MASM, GAS, FASM в двух режимах - x64 и x86, переключаться между которыми можно в настройках на вкладке "Построение". Там же можно изменить опции ассемблера и компоновщика и выбрать, какие программы будут использоваться для ассемблирования и компоновки.

SASM

Устранение неполадок

Если у Вас что-то работает не так (происходят ошибки при компиляции, отладке и др.), пожалуйста, прочитайте главу "Устранение неполадок" в справке в программе (F1) или в Wiki проекта на GitHub. Возможно, там Вы сможете найти полезный совет для решения Вашей проблемы.

Библиотека макросов для NASM "io.inc"

В программу включена библиотека макросов для NASM "io.inc". В ней есть кроссплатформенные команды ввода-вывода и макросы: CMAIN - точка входа и CEXTERN для доступа к внешним функциям на языке C. Подробнее о ее командах Вы можете узнать здесь или ниже.

Реализация

Windows

В качестве ассемблера для NASM используется nasm 2.11.02, в качестве компоновщика - gcc 4.6.2 из MinGW (gcc 4.8.1 из MinGW64 в режиме x64) или ld 2.22 из MinGW (ld 2.23.2 из MinGW64 в режиме x64).

Версии ассемблеров и компоновщиков для NASM подобраны с учетом рекомендуемых программ для курса "Архитектура ЭВМ и язык ассемблера" ВМК МГУ 1-го потока.

Также в программу включен отладчик gdb 7.4 (7.6 для x64) из пакета MinGW и немного измененная для отладки библиотека макросов ввода-вывода.

Начиная с версии 3.0, в SASM включены fasm 1.71.39 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).

Ассемблер MASM невозможно было включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта https://www.masm32.com/ и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".

Под Windows SASM после установки сразу готов к работе.

Linux

Для работы программы на Linux должны быть установлены: nasm или gas (если их планируется использовать, fasm уже включён в сборку), gcc, gdb (для отладки).

Больше информации о программе и её использовании можно получить в Wiki проекта на GitHub.

История изменений:

13.02.2021 - версия 3.12.1 (zip, exe):

  • Исправленa отладка при использовании с новыми версиями NASM.

08.02.2021 - версия 3.12.0 (zip, exe):

  • Запуск и отладка теперь проводятся в директории с текущим исходником (для удобного файлового ввода-вывода).
  • Поддержка UTF-8 по умолчанию.
  • Поддержка Qt 5 для Linux.
  • Португальский язык (спасибо alglus).
  • Исправлен некорректный доступ к памяти в макросе GET_DEC на Windows.

03.02.2020 - версия 3.11.1 (zip, exe):

  • Исправлена ошибка с горячей клавишей для раскомментирования.

31.01.2020 - версия 3.11.0 (zip, exe):

  • Исправлены ошибки при отладке в GDB 8.
  • Исправлен разбор регистров.
  • Исправлена ошибка, приводящая к падению при клике в окне "Память" (спасибо Hofmer13).
  • Исправлена ошибка, при которой пропадала горячая клавиша отладки.
  • Исправлена ошибка с открытием файлов без расширений.
  • Добавлено сохранение файла перед сборкой.
  • Добавлен поиск выделенного текста.
  • Исправлен перевод на итальянский (спасибо Mek101).

08.10.2018 - версия 3.10.1 (zip, exe):

  • Исправлена ошибка, при которой из компоновки исключались файлы, необходимые для работы функций ввода-вывода библиотеки "io.inc".

01.10.2018 - версия 3.10.0 (zip, exe):

  • Поддержка BSD OS (спасибо Martinfx).
  • Исправлена ошибка, приводящая к неработоспособности отладчика при использовании gcc с опцией PIE по умолчанию (спасибо lberserq).
  • Добавлена поддержка испанского языка (спасибо Mariano Cordoba).
  • Небольшие исправление в настройках программы.

12.09.2017 - версия 3.9.0 (zip, exe):

  • Более удобный просмотр значений по адресу.
  • Исправлена ошибка, приводящая к падению отладчика (спасибо lberserq).
  • Добавлена поддержка польского языка (спасибо Krzysztof Rossa).
  • Добавлена поддержка иврита (спасибо Elian Kamal).

19.02.2017 - версия 3.8.0 (zip, exe):

  • Улучшен разбор регистров при отладке.
  • Добавлена опция запуска ассемблера в текущей директории.
  • Добавлена поддержка итальянского языка.

30.10.2016 - версия 3.7.0 (zip, exe):

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

25.09.2016 - версия 3.6.0:

  • Добавлена поддержка турецкого языка.
  • Улучшено добавление отступов при нажатии клавиши Tab.

26.08.2016 - версия 3.5.1:

  • Исправлены ошибки с отладкой, drag & drop и другие мелкие ошибки.

19.03.2016 - версия 3.5.0:

  • Поддержка компоновщика GoLink.
  • Исправлена ошибка с неправильным именем файла при отркытии или сохранении.

11.02.2016 - версия 3.4.0:

  • Изменение цвета номеров строк.
  • Возможность отключения автоматической вставки отладочной строки.

27.01.2016 - версия 3.3.0:

  • Однооконный режим.
  • Функция drag & drop для открытия файлов. Чтобы открыть файл, можно просто перетащить его на окно программы.
  • Улучшенная справка: расширена часть "Устранение неполадок", добавлена часть "Настройка системы сборки".
  • Исправление множества ошибок, включая ошибку с системно-зависимыми путями и ошибку при показе регистров x87 FPU.

14.06.2015 - версия 3.2.0:

  • Добавлена возможность отключения запуска компоновщика.
  • Обновлён FASM: новая версия 1.71.39.
  • Исправлены некоторые ошибки, возникающие при отладке.

27.05.2015 - версия 3.1.4: исправлена ошибка, возникающая при использовании в системе локализованной версии objdump.

30.03.2015 - версия 3.1.3: добавлено отображение информации о полученных программой сигналах (в т. ч. об ошибках, возникающих в ходе её работы) при отладке.

27.03.2015 - версия 3.1.2: улучшена работа при отладке файлов с директивой include.

24.03.2015 - версия 3.1.1: исправлены ошибки с подсветкой синтаксиса.

24.07.2014 - версия 3.0.1: добавлена возможность просмотра дополнительных регистров (xmm, st и других).

13.07.2014 - версия 3.0:

  • Добавлена поддержка новых ассемблеров, кроме NASM - GAS, MASM, FASM, включая подсветку синтаксиса, отладку и поддержку архитектур x86 и x64. Появилась возможность выбрать вручную ассемблер и компоновщик, а также изменить опции сборки программы.
  • Значительно улучшена работа отладчика, стало возможным отлаживать программы даже без отладочной информации для GDB (например, написанные на MASM). В отладчике добавлена возможность приостановить программу, а также установить точку останова во время её выполнения.
  • Добавлена папка для include файлов.
  • Исправлены проблемы с загрузкой процессора текстовым редактором при открытии больших файлов с исходным кодом. Исправлена ошибка с нарушением работы интерфейса после открытия окна настроек. Исправлено множество мелких ошибок и недочетов.

23.04.2014 - версия 2.3.1: исправлена ошибка, возникающая при наличии пробелов в пути до временной директории (в частности восстановлена работа SASM на Windows XP).

03.04.2014 - версия 2.3:

  • Добавлена возможность выбора режимов x64 или x86 и изменения опций ассемблера и компоновщика. Добавлен инструментарий для компиляции и отладки 64-битного кода. Реализована подсветка 64-битных регистров и команд. Библиотека "io.inc" адаптирована для использования в 64-битных приложениях.
  • Добавлена подсветка команд макроассемблера NASM.
  • Исправлено множество мелких ошибок, в том числе улучшено отображение окна переменных при отладке, исправлена ошибка при считывании в стек макросами из "io.inc".

16.02.2014 - версия 2.2:

  • Значительно улучшен интерфейс программы и её юзабилити, исправлено множество ошибок. Добавлены выбор цветов фона и текста, а также полная настройка подсветки синтаксиса. Окна ввода-вывода и отладки стали плавающими (docking) окнами с многочисленными вариантами их расположения. Улучшены виджеты отображения регистров и памяти (добавлены автоподгонка под текст и возможность копирования), сделана возможность запоминания их состояния. Улучшен механизм точек останова - добавлена возможность остановки на метке (на строке с кодом ниже) и возможность её установки по горячей клавише. Улучшена отладка макросов - теперь они неотличимы от обычных инструкций. К действиям добавлены иконки, сделаны тулбары.
  • Комбинации горячих клавиш приведены в соответствие со стандартными, добавлена возможность их переназначения.

13.11.2013 - версия 2.1:

  • Исправлено множество ошибок, исправлены проблемы совместимости - созданы установочные пакеты для многих Linux-систем на OBS, налажена совместимость с Qt 4, а также упрощена сборка из исходников.
  • Сделано много улучшений, расширена функциональность. В частности, в отладчике - добавлены: просмотр регистров, просмотр памяти, точки останова и команда "продолжить"; улучшены: выполнение произвольных команд gdb, подсветка текущей строки, последовательный вывод во время отладки (изменены макросы io.inc).
  • Компиляция теперь выполняется во временных папках - пропала необходимость в специальных правах при запуске программы.
  • Добавлена отметка о несохраненном документе. Добавлен последовательный вывод в программах. Добавлено отображение статуса завершения программы. Добавлен вывод времени работы программы. Добавлен выбор шрифта.
  • Обновлена справка. Сделана новая иконка. Еще множество минорных улучшений и исправлений.

04.06.2013 - версия 2.0: сделаны все запланированные изменения - реализован отладчик, улучшена подсветка, стало возможно работать с несколькими файлами, SASM (новое название) полностью переписан на Qt и теперь с открытым кодом и кроссплатформен. Исходники выложены на GitHub, сюда же переехал и сайт. Если Вам нужны более ранние версии программы, Вы можете их найти на предыдущем сайте.

21.04.2013 - версия 1.0.4 - исправлена ошибка с CEXTERN.

18.03.2013 - версия 1.0.3 - исправлены ошибки подсветки синтаксиса, теперь подсвечиваются все ключевые слова NASM, исправлен запуск программ на MASM.

10.03.2013 - версия 1.0.2 - исправлены ошибки, добавлено автосохранение кода и пути.

От теоретического материала я уже немного устал. Решил попрактиковаться, а заодно и поэкспериментировать с сегментами. Для экспериментов выбрал программку из книги Феногенова, и чуток изменил ее (текст можно взять тут):


Она ассемблируется и TASM и MASM.

Ассемблеры, в процессе трансляции, позволяют создавать, так называемые, файлы листингов. Файл листинга содержит не только исходный текст, но и транслированный машинный код в шестнадцатеричном формате. Файлы листингов TASM и MASM немного различаются. Листинги TASM содержат еще и номера строк в самое левой колонке, после которой уже идут шестнадцатеричные адреса смещения команд и данных (в MASM колонка адресов первая) относительно начала сегмента . Затем показан ассемблированный машинный код в шестнадцатеричном формате и затем соответствующие ему команды ассемблера.
Итак, к практике! Для каждой программы я создаю отдельную папку и в ней две подпапки MASM и TASM. Чтобы ассемблировать программу я захожу в каждую из них FAR-ом и запускаю соответственно m.bat или t.bat (расширение .bat можно не указывать, просто m или t). И из открывшегося окна уже ассемблирую программу. Ассемблируем hello.asm TASM-ом с ключом получения листинга ( /l ). Вводим последовательно команды: tasm /l hello и затем tlink hello . Обратите внимание что для TASM расширение .asm указывать не обязательно. Смотрим скриншот:


В директории, помимо объектного файла и исполняемого, образовался файл листинга - hello.lst, и файл карты данных - hello.map. Смотрим hello.lst.


Команды имеют различную длину и располагаются в памяти вплотную друг к другу. Так, первая команда mov ax,data, начинается со смещения 0000 сегмента кода и занимает 3 байта. Соответственно вторая команда начинается со смещения 0003. Вторая команда имеет длину 2 байта, поэтому третья команда начинается с байта 0005 и т.д.
Предложения программы с директивами segment , assume , end не транслируются в какие-либо машинные коды (как это уже говорилось) и не находят отражения в памяти . Они нужны лишь для передачи транслятору служебной информации, управляющей ходом трансляции.
Транслятор не смог полностью определить код команды mov ax,data . В этой команде в AX засылается адрес сегмента data. Однако этот адрес станет известен лишь в процессе загрузки исполняемого файла программы в память . Поэтому в листинге на месте этого адреса стоят нули. Символ s указывает на то, что в дальнейшем вместо нулей сюда будет подставлен сегментный адрес.
Еще одна помеченная команда с кодом ВА 0000 располагается в строке 6 листинга. В этой команде в регистр DX заносится смещение поля с именем msg, расположенное в сегменте данных (ключевое слово offset, указанное перед именем поля, говорит о том, что речь идет не о содержимом ячейки msg, а об ее смещении). Поле msg расположено в самом начале сегмента данных, и его смещение от начала сегмента равно 0, что и указано в коде команды. Почему же эта команда помечена буквой r , являющейся сокращением слова relocatable - перемещаемый?
Чтобы ответить на этот вопрос, нам придется рассмотреть, как сегменты программы размещаются в памяти. Как уже говорилось, любой сегмент может располагаться в памяти только с адреса, кратного 16, т.е. на границе 16-байтового блока памяти (параграфа). Конкретный адрес программы в памяти зависит от конфигурации компьютера, - какой размер занимает DOS, сколько загружено резидентных программ и драйверов, а также в каком режиме запускается программа - в отладчике или без него. Предположим, что сегментный адрес сегмента команд оказался равным 1306h (а). В нашей программе сегмент команд имеет размер 11h байт (что указано в строке 10 и в разделе Groups & Segments листинга), т.е. занимает целый параграф плюс один байт. Сегмент данных имеет размер 14h байт (строка 15 листинга и раздел Groups & Segments) и тоже требует для своего размещения немного больше одного параграфа. Из-за того, что сегмент данных должен начаться на границе параграфа, ему будет назначен сегментный адрес 1308h и между сегментами образуется пустой промежуток размером 15 байт . По той же причине между сегментом данных и стека образуется пустой промежуток в 12 байт .
Потеря 27 байт из многомегабайтовой памяти, разумеется, не имеет никакого значения. Однако в некоторых случаях, например, при компоновке единой программы из большого количества модулей с небольшими по размеру подпрограммами, суммарная потеря памяти может оказаться значительной.


Для того, чтобы устранить потери памяти, можно сегмент данных объявить с выравниванием на байт:

что и видим в выводе команды DIR:


Образ программы в памяти начинается с сегмента префикса программы (Program Segment Prefics, PSP), образуемого и заполняемого системой . PSP всегда имеет размер 256 байт; он содержит таблицы и поля данных, используемые системой в процессе выполнения программы. Вслед за PSP располагаются сегменты программы в том порядке, как они объявлены в программе . Сегментные регистры автоматически инициализируются следующим образом: ES и DS указывают на начало PSP (что дает возможность, сохранив их содержимое, обращаться затем в программе к PSP), CS - на начало сегмента команд, a SS - на начало сегмента стека. В указатель команд IP загружается относительный адрес точки входа в программу ( из операнда директивы end ), а в указатель стека SP - величина, равная объявленному размеру стека, в результате чего указатель стека указывает на конец стека (точнее, на первое слово за его пределами ).
Таким образом, после загрузки программы в память адресуемыми оказываются все сегменты, кроме сегмента данных. Инициализация регистра DS в первых двух строках программы позволяет сделать адресуемым и этот сегмент.

Итак, первой исполняемой командой по адресу 144B мы видим:

144B:0000 B84D14 MOV AX,144D

Посмотрим внимательней на адресок 144D , который заносится в регистр AX. По идее это должен быть адрес сегмента данных, так как в тексте нашей программы этой строке соответствует команда mov ax,data . Код нашей программы (с учетом выравнивания на границу параграфа, 17 байт кода + 15 пустых байт) занимает 32 байта ( 20h байт), то есть два параграфа. Сегмент данных мы определили в нашей программе сразу за сегментом кода, то есть сегмент данных начинается через 20h байт от начала программы. Адрес в CS у нас равен 144B0 (не забываем про нолик). Прибавим 20h к 144B0h и получаем 144D0h. 144B0h+20h=144D0h . В листинге трансляции эта же команда определена как B8 0000s . Вспоминаем, что говорилось про буковку s . Этот адрес подставляется ОС в процессе загрузки программы в память . Кстати стоит еще заметить как выглядит код этой команды уже в памяти при исполнении - B84D14 . Как видим B8 осталась, а адрес записан сюда ОС с изменением очередности байт . Выполняем эту команду и смотрим состояние регистров. Затем выполняем вторую команду и смотрим состояние регистров и дамп сегмента кодов.


Еще стоит обратить внимание на изменение в регистре AX, после команды mov ah,09 . Изменился только старший байт, который принял занчение 09, а младший байт сохранил свое занчение 4D. А так же на то, что в регистр DX было помещено смещение (0000) от начала сегмента данных (в нашем случае выводимой на экран фразы).
Полный дам выполнения программы приведен ниже:

AX=144D BX=0000 CX=0140 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=143B ES=143B SS=144F CS=144B IP=0003 NV UP EI PL NZ NA PO NC
144B:0003 8ED8 MOV DS,AX
-t

AX=144D BX=0000 CX=0140 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=144D ES=143B SS=144F CS=144B IP=0005 NV UP EI PL NZ NA PO NC
144B:0005 B409 MOV AH,09
-d ds:0
144D:0000 2D 3D 2A 20 48 65 6C 6C-6F 20 57 6F 72 6C 64 20 -=* Hello World
144D:0010 2A 3D 2D 24 00 00 00 00-00 00 00 00 00 00 00 00 *=-$.
144D:0020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A ****************
144D:0030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A ****************
144D:0040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A ****************
144D:0050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A ****************
144D:0060 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A ****************
144D:0070 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A ****************
-t

AX=094D BX=0000 CX=0140 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=144D ES=143B SS=144F CS=144B IP=0007 NV UP EI PL NZ NA PO NC
144B:0007 BA0000 MOV DX,0000
-t

AX=094D BX=0000 CX=0140 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000
DS=144D ES=143B SS=144F CS=144B IP=000A NV UP EI PL NZ NA PO NC
144B:000A CD21 INT 21
-g 10d
-=* Hello World *=-
Программа завершилась нормально
-

Читайте также: