![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
![]()
У меня есть программа на с++ в досе и мне надо что бы она запускалась, когда придет прерывание на lpt порт, прерывание желательно было аппаратное, но не хватило опыта его настроить, зато получилось настроить программное через INT 17h и есть код на с++, его надо каждый раз запускать на выполнение, как это сделать не подскажете? Может наверно быть и другой вариант, в середину кода на с++ вставить эту ассемблерную вставку, но мне кажется, что правильнее было бы запускать с++ из ассемблера. Вот код на ассемблере
Код:
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Здравствуй, седьмой!
Опять пытаешься создать тяни-толкая из кусков Windows (c++) и фрагмента на ассемблере под DOS. "Тут или крест сними или трусы надень". Остановись на чем-то одном... Когда определишься -- разговор можно продолжить... |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
![]()
Здравствуй Микл, как я рад Вас видеть! Потерял ссылку на сайт где Вы сейчас обитаете. Нет вы ошибаетесь, я доделываю проект, который начал делать еще прошлой осенью, когда вы от нас ушли. Моя часть программы вся под досом. винды нет совсем, конечно проект в целом содержит винду и программирование на высоком уровне тоже есть, но у меня все под досом на с++ борланд 3.0 и ассемблере. На ассемблере 1 программа, это драйвер для Lpt порта ( так случайно оказалось, что в компе на котором я провожу работу, имеется только один сом порт), поэтому пришлось задействовать lpt порт. Еще на этом компе стоит интерфейсная плата для которой поставлялся драйвер на с++ под досом, его я просто обрезал и у меня получилась короткая программка на с++ для передачи данных с моего компа, на внешнее устройство, и получение оттуда ответных данных. Вот и мне теперь нужно настроить аппаратный драйвер по 10й ноге Lpt порта по приему синхроимпульсов с генератора, и по этому сигналу запускать несколько раз программку на с++, проанализировать полученные данные и по сом порту отправить протокол анализа этих данных в другой копм ( эта программка у меня уже написана). Вот и все. Эсли все это изложить кратко, то получается одна программа на ассемблере, которая внимательно следит за синхроимпульсом на входе, затем сперва несколько раз запускает одну программку на с++ под досом, а потом в самом конце посчитает ошибки и выдаст протокол в другую программу тоже на с++ под досом и на этом закончит свою работу.
Последний раз редактировалось седьмой; 01.06.2017 в 14:34. |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
седьмой,
могу посоветовать две книги Р.Джордейн "справочник программиста пересональных компьютеров типа IBM PC, XT и AT" и В.Кулаков "Программирование на аппаратном уровне". В Джордейне глава 7 "Ввод/вывод" рассмотрен доступ к последовательному порту через порты 3F8h-3FEh (2F8h-2FEh). В Кулакове в 7 главе программирование принтера через прерывание 13h и работа с регистрами параллельного порта:
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
![]()
Спасибо, помню где то регистрировался, но вылетело... а по поводу запуска с++ из ассемблера, вот нашел хорошую статью девушка хорошо все изложила с примерами и по порядку, правда для винды, нужно как то заголовочные файлы теперь поменять на досовские и должно наверно пойти. Книги это конечно хорошо, но сколько я не пытался использовать код из книг напрямую, не из одной еще не получилось, или например как братья фроловы используют не стандартные заголовочные файлы, а какие то свои, или в книге не указывается для какого компилятора код и в результате ни один код не идет, а документация идет не всегда последовательно, скачет с пятое на десятое, и найти что то полезное в книге бывает очень долго, поэтому книги использую только сразу все одновременно, делаю по ним расширенный поиск и ищу сразу по всем то что нужно, а листать каждую, что бы найти там для себя какой то частный случай, это мне кажется очень долго и не производительно. Но все равно спасибо, что нашли время ответить.
|
![]() |
![]() |
![]() |
#6 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
седьмой
Возьмите официальный справочник по досу там всё описано http://bitsavers.trailing-edge.com/p...uide_Jan95.pdf А пример вызова есть в книге Питер Абель "Ассемблер и программирование для IBM PC". глава 22 Что касается Фроловых, то у них всё норм. У них указано каким компилятором собирать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 01.06.2017 в 16:18. Причина: Опять рководство по досу переложили. Поправил на новую ссылку. |
![]() |
![]() |
![]() |
#7 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Подпрограмма, это синоним к словам функция и процедура. А не то о чём вы подумали.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#8 | ||
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
![]()
Спасибо большое за ответ.
Цитата:
Цитата:
Вы оказались правы книга Абеля интересная и последовательная, но читатель оказался видимо туповат, не могли бы дать комментарий к этому коду, толку не хватает полностью понять как эта программа работает? Код:
Последний раз редактировалось седьмой; 02.06.2017 в 11:28. |
||
![]() |
![]() |
![]() |
#9 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
седьмой
Есть два пути решения вашей задачи. 1) Первый путь. Тут несколько вариантов. а) Пишем на Си используем встроенный ассемблер Код:
asm __asm __asm__ emit А так же не забываем что у ассемблера бывает 2 синтаксиса Intel и AT&T. б) Компилируем код в объектный файл и подключаем к программе Используем слова extern и import public, export. Всё это зависит от ваших компиляторов. Но тут ещё придётся повозиться с линкером. Так как компиляторы могут выдавать разные по формату *.obj файлы. в) Тоже самое что б) но в обратную сторону. Код:
Код:
Что-бы не изобретать велосипед с квадратными колёсами мы повторно используем готовый код. Фреймворк, библиотека, заголовочные файлы, API OS. Как не парадоксально, но даже вы в первом сообщение вызываете API OS. int 17h - это API BIOS. (Interface) Где BIOS там и DOS они всегда работают в паре. BIOS ничего не знает про программы и то как их вызывать зато это знает DOS. Для запуска EXE у доса нет команды. Но есть для запуска COM. Так как загрузка EXE сложнее чем COM. То Проще всего загрузить COMMAND.COM и передать ему в параметрах имя файла который он запустит. COMMAND.COM уж сам разберётся с EXE файлом. Как запустить COMMAND.COM? Как и любой другой COM файл. Нам нужно выделить 64 кб памяти. Далее вызываем апи доса, и в параметрах передаём что грузим и какой блок данных следует передать COM. Этот блок PARAREA содержит параметры командной строки которую COMMAD.COM получит и интрпертирует для запуска. В примере это DIR но тут вы можете подставить свою программу на СИ. Код:
Далее обработка результата возврата. Любая программа возвращает код возврата обычно 1 успех и 0 неуспех. Но тут так как параметров больше, возвращается всё по другому. 0 успех 1 недостаточно памяти для запуска COM. 2 - ошибка внутри Command.COM или DIR. Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 03.06.2017 в 12:13. |
![]() |
![]() |
![]() |
#10 | |
Пользователь
Регистрация: 28.03.2013
Сообщений: 22
|
![]() Цитата:
Лянчер Код:
Код:
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
может кто может помочь написать программу наC++ | Мираслава | Помощь студентам | 1 | 16.04.2017 16:41 |
Написать программу вычисления в ассемблер | Rageded | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 09.12.2015 18:47 |
Где и как скачать программу Delphi. Может кто нибудь может помочь мне - без скачивания из интернета. | IZOPGRAM | Общие вопросы Delphi | 4 | 16.06.2012 18:12 |
Девушка просит помощи у мудрых программистов (ассемблер).... помогите,кто чем может | Tomogochi | Помощь студентам | 0 | 10.06.2009 20:31 |
разработать ассемблер программу | Diman365 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 07.06.2009 21:20 |