scraper
Гость
|
|
« : 30-05-2006 19:52 » |
|
Имею коротенькую программку на Paskal. Пожалуйста, как перевести ее на С++: Uses Crt; Var S, B: Byte Begin WriteLn(‘Чтение данных с порта COM2’); Asm Mov Ah, 0 Mov Dx, 1 Mov Al, 227 INT 14H End; While not KeyPressed do begin Asm Mov Ah, 3 Mov Dx, 1 Mov Al, 227 INT 14H Mov S, AH End; If(S and 1) = 1 then begin Asm Mov Ah, 2 Mov Dx, 1 INT 14H Mov B, Al Mov S, Ah End; If s = 0 then begin WriteLn(B); End; End; End; While KeyPressed do ReadKey; End.
|
|
|
Записан
|
|
|
|
Михалыч
|
|
« Ответ #1 : 31-05-2006 01:14 » |
|
Не люблю отвечать таким образом, но в данном случае отвечу В поиск! Сам года 2 назад столкнулся с подобной проблемой... Без проблем нашел в сети конвертор (и кстати не один) из Паскаля в С. Перевел правильно на 95-100% в зависимости от сложности
|
|
|
Записан
|
Поживем - увидим... Доживем - узнаем... Выживу - учту
|
|
|
nikedeforest
|
|
« Ответ #2 : 31-05-2006 02:42 » |
|
Михалыч, ты где пропадал? Я уж подумал не случилось ли чего.
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #3 : 31-05-2006 07:28 » |
|
как перевести ее на С++ Элементарно, scraper. Есть аналоги всех используемых функций. А ассемблер даже переводить не надо.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Михалыч
|
|
« Ответ #4 : 31-05-2006 16:34 » |
|
Михалыч, ты где пропадал? Я уж подумал не случилось ли чего. Не... спасибо, все нормально. Так, приболел слегка, да работы навалили по самые уши Некогда...
|
|
|
Записан
|
Поживем - увидим... Доживем - узнаем... Выживу - учту
|
|
|
Sla
|
|
« Ответ #5 : 01-06-2006 07:36 » |
|
а я протащился от самого кода, особенно от асемблерных вставок как в паскале так и в с есть функции работы с прерываними Если не изменяет память use dos; или #include dos.h, сори, если где ошибся в написании
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
scraper
Гость
|
|
« Ответ #6 : 05-06-2006 20:08 » |
|
Вы не знаете, случайно, алтернативы функциям на Paskal, написаные на C++? Может подскажите ссылку? Если не знаете, то хотя бы в этой проге, какая альтернатива? И каким образом происходит взаимодействие между Asm-ом в коде, и С++? Наверно, это элементарно, но паскаль я нелюблю, а в С++ сразу бы увидел.
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #7 : 05-06-2006 20:09 » |
|
Конвертор, что это, где взять, как работает, как пользоваться?
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #8 : 05-06-2006 20:43 » |
|
Короче, не буду многословить, кто что знает:
Com-порты->(функции из стандартного С++, из WinApi, Asm) __какие эти функции принимают параметры, что возвращают, что можно сделать с помощью них.
Что в системе отвечает за работу Com-портов? Какие утилиты (Windows XP) маршрутизируют байты из-в Com-порт(а)?
Как система определяет, подключено ли какое-либо устройство через Com-порт?
Албтернатива ответам (нежелательно, но все таки...): Какие-нибудь ссылки по ответам на эти вопросы.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #9 : 05-06-2006 20:53 » |
|
И каким образом происходит взаимодействие между Asm-ом в коде, и С++?
Никак. Компилятор ассемблерный участок напрямую перекидывает в машиныые коды и вставляет в текст программы. В большинстве случаев ассемблерный код не будет влиять на построение компилятором сишных команд. Так как политика компилятора "не хранить временные переменные в регистрах". Если ты знаком с С++. То переделать Паскалевские конструкции под С++ не должно составить труда. Тем более в коде на 20 строк. Я не помню уже (да и не знал) альтернативы команды под ДОС KeyPressed. Паскалевскую библиотеку CRT можно заменить stdio.h. Тип Byte можно замнить на char Команду WriteLn на printf. Конструкции if, while, Asm нужно только переписать с учетом Сишного синтаксиса.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Alf
Гость
|
|
« Ответ #10 : 05-06-2006 20:58 » |
|
А это действительно необходимо - переводить программу, написанную на ассемблере, с Паскаля на С++ при помощи конвертора? Хоть убейте, не пойму, в чем тут смысл.
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #11 : 05-06-2006 21:02 » |
|
Finch, я понял.
В этой проге вся логика написана на Asm-е, значит это Asm-овсая прога. То что оболочка из С++ это ничего не значит. Вывод: к железу можно обратиться только на Asm-е. Так? Но тогда: как связать С++ и Asm, ВОЕДИНО?!! (Хотя бы в собственном мозгу?)
Alf, смысл в том, что я хочу понять Com-порты, а примеры все на Paskale. Приходиться переводить.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #12 : 05-06-2006 21:07 » |
|
Читай MSDN. На форуме несколько раз проскакивали топики по работе с COM портами. В Винде в пользовательском режиме напрямую с оборудованием работь нельзя. Вся работа строится через функции посредники.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
scraper
Гость
|
|
« Ответ #13 : 05-06-2006 21:15 » |
|
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #14 : 05-06-2006 21:17 » |
|
scraper, Ты определись в какой ОС ты хочеш понять логику работы. То что ты привел на Паскале, это ДОС версия работы. И кстати ее можно легко заменить на паскалевкие функции вызовов прерываний. Если все таки решил писать под ДОС. Тогда просто достань любой справочник по прерываниям. И посмотри какие возможности предоставляет 14h прерывание. Если хочеш разбираться под Винду. В другом твоем топике я дал ссылку на MSDN. Именно на тот раздел, который отвечает на твои вопросы.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #15 : 05-06-2006 21:21 » |
|
Прыгни по ссылке. Я сейчас полистал этот раздел. Там есть примеры в Сишном коде. Заодно упоминание всех функций, которые могут тебе понадобится.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
scraper
Гость
|
|
« Ответ #16 : 05-06-2006 21:22 » |
|
Finch, комп. На нем: BIOS, DOS, Windows XP.
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #17 : 05-06-2006 21:25 » |
|
i'll jamp...
|
|
« Последнее редактирование: 19-12-2007 19:59 от Алексей1153++ »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #18 : 05-06-2006 21:25 » |
|
Если у тебя винда ХР то на машине не должно быть ДОСа. Стоит эмулятор ДОС режима.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
scraper
Гость
|
|
« Ответ #19 : 05-06-2006 21:28 » |
|
Можно спросить: например, мне нужно какое-нибудь действие сделать, как узнать, какая функция MSDN, это делает? Другими словами: как пользоваться MSDN?
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #20 : 05-06-2006 21:31 » |
|
Понятно, значит под Windows. Определились. И...
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #21 : 05-06-2006 21:38 » |
|
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #22 : 05-06-2006 21:41 » |
|
И...
Я объединяю две темы. Поэтому могут быть недомолвки.
|
|
« Последнее редактирование: 05-06-2006 21:43 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
scraper
Гость
|
|
« Ответ #23 : 05-06-2006 21:43 » |
|
По MSDN пока понятно. Спасибо. Thank you for you time. Good night.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #24 : 06-06-2006 08:16 » |
|
scraper, Thank you for your wasted time. А то так непонятно было, что написал
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #25 : 06-06-2006 13:09 » |
|
Алексей1153, я извиняюсь, но в современном американском языке, фраза: Thank you for you time, допустима.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #26 : 06-06-2006 17:03 » |
|
scraper, ну, где мне до америки где уж нам уж (с)
|
|
|
Записан
|
|
|
|
scraper
Гость
|
|
« Ответ #27 : 06-06-2006 20:24 » |
|
|
|
|
Записан
|
|
|
|
|