Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Чемпионы рейтинга экспертов в этой рассылке Номер выпуска: | 1364 | Дата выхода: | 21.06.2010, 05:00 | Администратор рассылки: | Лысков Игорь Витальевич, Старший модератор | Подписчиков / экспертов: | 236 / 63 | Вопросов / ответов: | 1 / 1 | IRC-канал по теме: | #assembler | Вопрос № 179143: Здравствуйте, уважаемые эксперты! Моя третья ассемблерная программа (приложение). Ассемблер: NASM 2.03 ОС: Win32 (программа в приложении), Linux Что ожидалось: что программа выведет сообщение, подождёт, пока пользователь нажмёт какую-либо... Вопрос № 179143: Здравствуйте, уважаемые эксперты! Моя третья ассемблерная программа (приложение). Ассемблер: NASM 2.03 ОС: Win32 (программа в приложении), Linux Что ожидалось: что программа выведет сообщение, подождёт, пока пользователь нажмёт какую-либо клавишу, и лишь потом завершится. Что происходит: программа выводит сообщение и завершается, не ожидая нажатия на клавишу. Вопрос: Что не так и как поправить? Заранее спасибо. Отправлен: 19.06.2010, 09:57 Вопрос задал: Dr_Andrew, Старший модератор Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич, Старший модератор : Здравствуйте, Dr_Andrew. gcc у меня нет, поэтому переделал пример под link из пакета masm32
Код: nasm -f win32 179143.asm \MASM32\BIN\Link.exe /SUBSYSTEM:CONSOLE /libpath:c:\masm32\lib 179143.obj Как правильно указал в мини-форуме Airyashov, совершенно лишний ret, который и приводил к преждевременному выходу Допускаю, что простой ret при сборке при помощи gcc корректно завершает программу, но под Windows, мне кажется, необходимо все таки завершать ExitProcess-ом int 16h - так вообще некорректный (у нас 32-битные системы, а не 16-битный ДОС) Функция в masm-овской библиотеке называется __getch (с двумя подчеркиваниями) Сама пр ограмма: Код: global _mainCRTStartup extern _printf extern __getch extern _ExitProcess@4
section .drectve info db '/defaultlib:user32.lib /defaultlib:msvcrt.lib /defaultlib:kernel32.lib'
section .data message: db 'Нажмите любую клавишу...', 10d, 13d
section .text _mainCRTStartup: push message call _printf add esp, 4 call __getch push 0 call _ExitProcess@4
----- Удачи! Ответ отправил: Лысков Игорь Витальевич, Старший модератор Ответ отправлен: 20.06.2010, 02:29 Номер ответа: 262182 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Оценка ответа: 5 Комментарий к оценке: Большое спасибо! Решение было простым, поиск сложным, но с Вашей помощью всё разрешилось. Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 262182 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий