Вопрос № 17872: Раньше из программы мы выходили с помощью прерывания 29h. Сейчас в рассылке я увидел, что в DOS выходили с помощью ret. В чем разница, есть ли преимущества....Вопрос № 17880: Существует очень много руководств (в основной массе - советских) по работе с COM (реже с LPT) портами.
А как работать с портами PS/2 и USB (примеры желательно под MS-DOS).
..Вопрос № 17894: Здравствуйте уважаемые эксперты. Помогите разобраться с кодом (код выдран из DeDe):...
Вопрос № 17872
Раньше из программы мы выходили с помощью прерывания 29h. Сейчас в рассылке я увидел, что в DOS выходили с помощью ret. В чем разница, есть ли преимущества.
Отправлен: 05.03.2005, 18:18
Вопрос задал: psevdo (статус: 1-ый класс)
Всего ответов отправлено: 8
Отвечает: John Freeman
Здравствуйте, psevdo!
Вообще то это break , а для многих программ можно оставить и обработать код выхода (AL по-моему в момент выхода) в bat файлах после работы программы, но он сохраняется только после выхода функцией DOS через int21h
Ответ отправил: John Freeman (статус: Специалист)
Отправлен: 05.03.2005, 19:33
Отвечает: AxMAD
Здравствуйте, psevdo!
Выход из программы может быть разным всё зависит от формата файла:
для файла COM ->RET (из-за))
для EXE -> .....
Ответ отправил: AxMAD (статус: Студент)
Отправлен: 05.03.2005, 20:51
Отвечает: Bob Johnson
Здравствуйте, psevdo! Выходить по ret можно только из com файла. если у тебя ехе файл, то выходить надо прерыванием.
* EMan2.0: ---===*** Debug mode ***===---
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 06.03.2005, 01:23
Отвечает: Стас
Здравствуйте, psevdo!
Если ты хочешь выйти из COM программы RETом, нужно привести в порядок стек(ничего там не оставить). Отсюда - единственное преимущество - правильно пишу программу, помну что я положил в стек и что вытащил. :)
Если ah=4ch,Int21h то в al можно передать код завершения "родителю". А о стеке можно не заботится (аж передергивает всего). :)
Кстати, еще есть Int20h.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 06.03.2005, 02:42
Отвечает: _vt
Здравствуйте, psevdo! С помощью 29h можно вывести символ на экран, а выйти из дос-программ можно с помощью int 20h. ;-) В случае инструкции ret подразумевается (а так и есть во всех MS-DOS совместимых осях), что в стеке лежит адрес, по которому прописана инструкция int 20h. Посмотри под отладчиком и увидишь, что именно она вызывается, если стоит ret. Преимущества? Программа короче на один байт! =) Других преимуществ нету. Ну а в случае exe - используется функция 4ch прерывания 21h - помимо всего прочего
выполняются работы по закрытию незакрытых файлов и прочего сбора мусора. --
* In Gates we trust! :)
Ответ отправил: _vt (статус: Академик)
Отправлен: 07.03.2005, 03:51
Отвечает: Boriss
Здравствуйте, psevdo!
Одно отмечу, что все заметили, но никто не отметил ;)) - int 29h - это не выход ( правильно int 20h) - а вывод символа в AL на текстовый экран в позицию курсора
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 07.03.2005, 09:33
Отвечает: Shizuku Tsukishima
Здравствуйте, psevdo!
Программа, использующая ret будет короче на один байт. Но истинное преназначение ret - возвращение управления в точку вызова при выходе из процедур. Также будет весьма проблематично применить эту команду для выхода в программах, использующих больше одного сегмента. Вообщем, мр. Калашников показывает нам при помощи ret образец оптимизации кода, про такое говорят "использовать как есть, в случае чего - пенять на себя".
Ответ отправила: Shizuku Tsukishima (статус: 3-ий класс)
Отправлен: 07.03.2005, 14:31
Отвечает: Voituk Alexander
Здравствуйте, psevdo!
Вообще-то выход из программы другой. (Имеется ввиду ДОС конечно).
Самый корректный - mov ax,4C00h
int 21h
и в регистре Al ты возвращаешь код возврата, который извне можно проанализировать.
Это штука работает и для ехе и для сом файлов. А ret-ом ты выходишь только из сом программ.
Можно еще из сом программ выходить int 20h. собственно это то же, что и ret.
Ответ отправил: Voituk Alexander (статус: 3-ий класс)
Отправлен: 09.03.2005, 15:39
Вопрос № 17880
Существует очень много руководств (в основной массе - советских) по работе с COM (реже с LPT) портами.
А как работать с портами PS/2 и USB (примеры желательно под MS-DOS).
Отправлен: 05.03.2005, 20:47
Вопрос задал: __grey__ (статус: 2-ой класс)
Всего ответов отправлено: 2
Отвечает: John Freeman
Здравствуйте, __grey__!
ГДЕ???
В WindowsNT/2k/xp НИЧЕГО кроме драйверов и CreateFile не катит,
в 9x/DOS одинаково - in/out + IRQ handler , но можно и без него
Всё это есть в любом учебнике про asm, мало того в примерах почти ко всем ассемблерам!!!
WASM : wasmlibserial*.asm
TASM : не замечено
MASM : в examples, в аддоне
Вот примеры из WASM:
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.
Ответ отправил: John Freeman (статус: Специалист)
Отправлен: 05.03.2005, 21:39 Оценка за ответ: 4 Комментарий оценки: За исходники конечно спасибо. Но я умею работать с COM портом. И команды in/out мне знакомы. И что такое IRQ, я тоже знаю. Меня интересует, как работать с устройствами, подключаемыми к PS/2 и USB. В чём-то тут моя вина. Не уточнил, что хотел. Хотя я бы такой вопрос понял.
Ответ отправил: _vt (статус: Академик)
Отправлен: 07.03.2005, 03:51 Оценка за ответ: 5
Вопрос № 17894
Здравствуйте уважаемые эксперты. Помогите разобраться с кодом (код выдран из DeDe):
Приложение:
Отправлен: 06.03.2005, 08:50
Вопрос задал: apmpc (статус: Посетитель)
Всего ответов отправлено: 1
Отвечает: Boriss
Здравствуйте, apmpc!
А в чем именно вопрос? Прокомментировать каждую строчку? Вряд ли...
Что именно делает "call 00409DB0"? в комментарии перед командой написано ...
Наверно, от несясности вопроса нет и ответов
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 09.03.2005, 10:50