Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1419 | Дата выхода: | 28.01.2011, 04:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 219 / 67 | Вопросов / ответов: | 1 / 1 | Вопрос № 181963: Здравствуйте! У меня возникли сложности с такими вопросами: в приложении программа, написана для ФАСМа, но при компиляции появляется ошибка Prog.asm (361): je .end. Я знаю, почему она появляется. .end – локальная метка и она должна быть в своём блок... Вопрос № 181963: Здравствуйте! У меня возникли сложности с такими вопросами: в приложении программа, написана для ФАСМа, но при компиляции появляется ошибка Prog.asm (361): je .end. Я знаю, почему она появляется. .end – локальная метка и она должна быть в своём блоке, но .end: popad ret находится совсем в другом блоке. Тогда я скопировал вышеприведённые три строчки в блок, где есть строка je .end. Место и скопированные строки я закомментировал, они находятся в самом конце программы. 1 Правильно ли я сделал, что скопировал и разместил именно в этом месте три строчки или их нужно разместить в другом месте? 2 Вместо ожидаемого формата exe или com у меня получился после компиляции файл bin. Что это за файл и как его запускать? 3 Более года назад, когда я вообще не знал ФАСМ и не умел даже компилировать на нём, попросил хорошего человека, спасибо ему:), перевести эту программу на ТАСМ. Он перевёл, но для формата com, и при запуске программа ничего не д елала, просто выводилась следующая строка: D:\TASM\BIN. И мне непонятно: то ли правильным будет у программы формат bin, то ли com. И вообще работает ли она? Отчего это так ФАСМ делает bin, а ТАСМ com (или при желании exe)? Программа взята с http://ru.osdev.wikia.com/wiki/%D0%98%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4:%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_HDD_%D0%B8_CD
Отправлен: 23.01.2011, 03:25 Вопрос задал: Masada (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Masada! Сначала давайте выясним, для какой ОС данная программа. Обратите внимание, что в тексте программы активно используются команды in/out Данные команды являются привиллегированными и в пользовательском режиме многопользовательской системы Windows приведут к исключению, другими словами, программа будет, попросту говоря, завершена по ошибке. Значит, программа расчитана на работу в ДОС. Это раз. Два. В тексте нет ничего, что говорило бы о взаимодействии с операционной системой, должен быть, хотя бы код для завершении программы. Отсюда вывод: приведен фрагмент, вырванный из какой-то другой программы. Три. Анализ подпрограмм и прогон под отладчиком показал, что данные подпрограммы вообще никак не работают. Результат - ноль. Четыре. В подпрограмме заложена явная ошибка, приводящая к зависанию:
Код: .Label2: add ecx, 256 ; Нужно бы добавить проверку на то, есть функции или нет. cmp ecx, 80FFFF00h ; Максимум 256 шин. jne .Label1 mov ecx, 0FFFFFFFFh ; Не нашли .Label3:
Данный фрагмент никогда не завершится, т.к. всегда cl = 8, а не 0. Поэтому равенства ecx = 80FFFF00h никогда не будет! Т.о., код не работоспособен
Теперь отвечу на заданные вопросы:
>1 Правильно ли я сделал, что скопировал и разместил именно в этом месте три строчки или их нужно разместить в другом месте? Неправильно. Вы скопировали три строки из другой подпрограммы. Та попрограмма начинается с pushad. Поэтому и должна перед выходом восстановить все регистры. Наша же подпрограмма вначале сохраняет только три регистра eax, esi и edi. Вот и надо поставить метку .end перед их восстановлением. Поэтому делаем так:
Код: jne .Next .end: pop edi pop esi pop eax ret
>2 Вместо ожидаемого формата exe или com у меня получился после компиляции файл bin. Что это за файл и как его запускать? Вы его не запустите никак! А получился bin, потому что Вы не сказали, что же Вы хотите получить! Для программы под ДОС необходимо в начало вставить
Вот тогда Вы сможете получить exe под ДОС. Сделайте что-то типа следующего:
Код: format MZ
OS_BASE equ 0 IDEBasesPorts equ OS_BASE+6F00h IDEMaxConroller equ 4 IDEMaxCanals equ 8
IDEBusMaster equ IDEBasesPorts+20h ;Всего 8 каналов 8*2*2=32Байта IDEBusIRQ equ IDEBasesPorts+ 30h ;Всего 4 вхождения по 4 байта IDEHDD_CD equ IDEBasesPorts+34h IDELBA48 equ IDEBasesPorts+38h
call FindHDD
mov ax, 4c00h int 21h
FindHDD:
Еще раз повторяю, программа ничего не делает! Впустую &qu ot;промолачивает" и выходит!
> 3 Более года назад, когда я вообще не знал ФАСМ и не умел даже компилировать на нём, попроси л хорошего человека, спасибо ему:), > перевести эту программу на ТАСМ. Он перевёл, но для формата com, и при запуске программа ничего не делала, > просто выводилась следующая строка: D:\TASM\BIN. И мне непонятно: то ли правильным будет у программы формат bin, то ли com. > И вообще работает ли она? Отчего это так ФАСМ делает bin, а ТАСМ com (или при желании exe)? Я ответил выше
Вполне допускаю, что изначально данные подпрограммы были расчитаны на работу в драйвере Windows. Но это тема отдельного разговора... ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 24.01.2011, 13:50 Номер ответа: 265575 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Комментарий к оценке: Чёткий и ясный ответ! Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 265575 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий