Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как корректно выйти в дос? не могу вернуться в дос 
:(
    Опции темы
Dreamuchiy
Дата 13.4.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



У меня ms-dos 622, работает с загрузочной флешки. Masm 61. Меняю видео режим (int 10h). Режим меняется, а вот в конце написано mov ax,4c00h и соответственно int 21h. Режим меняется и на этом все... Не могу понять почему нет возврата нормального в дос и почему нельзя просто использовать команду RET ? Помогите разобраться пожалуйста, я на x86 процах еще новичок совсем. Давно еще активно писал простые проги еще под проц z80, там выход осуществлялся просто командой ret
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
iff
Дата 14.4.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Цитата(Dreamuchiy @  13.4.2011,  22:54 Найти цитируемый пост)
Помогите разобраться пожалуйста, я на x86 процах еще новичок совсем. Давно еще активно писал простые проги еще под проц z80, там выход осуществлялся просто командой ret 

Хотите идти в ногу со временем?  smile

Цитата(Dreamuchiy @  13.4.2011,  22:54 Найти цитируемый пост)
mov ax,4c00h и соответственно int 21h

Можно завершить также прерыванием INT 20h, но у функции 4Ch прерывания INT 21h есть приемущество - она может возвратить код завершения (error level). Функция 4Ch прерывания INT 21h вызывается так:
нужно в регистр ah поместить 4Ch (код функции), в регистр al поместить код завершения (в случае отсутствия ошибок код завершения обычно делают равным нулю, в случае ошибки - её коду), затем исполняется непосредственно вызов прерывания инструкцией INT 21h.
Код завершения ошибки можно обработать в bat-файлах, например:
Код

myprog.exe
if errorlevel 1 echo Ошибка исполнения программы myprog.exe

В новых версиях ДОС (точнее уже в её эмуляторах под виндовсом) существет переменная среды errorlevel, которая содержит код завершения последней программы.

А на ms-dos тоже можно завершать программу инструкцией ret (точнее retn). При выполнении этой инструкции берётся адрес из стека (стек должен быть пуст к этому моменту и на его вершине тогда записано 0000 - нулевое значение оставляет ДОС.), процессор переходит к исполнению инструкции по адресу 0000 - а там размешена инструкция INT 20h - ее тоже оставил ДОС в PSP (префикс сегментного кода - область памяти с адреса 0000 до 0100h). - Но это только в программах типа COM всё так просто. В программах типа EXE - сложнее - там CS не указывает на сегмент PSP, на него указывает DS и ES.
Но программу типа EXE тоже можно зывершить инструкцией ret (точнее retf).
Код

push ds ;записываем в стек адрес сегмента PSP
push ax ;записываем в стек 0000 (ax при загрузки равен 0000) - это смещение инструкции INT 20h в PSP
   ...

retf ;переход по ранее записанному адресу к инструкции INT 20h




--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
500mhz
Дата 14.4.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



кстате после смены видеорежима ну к примеру на 320*200 при возврате в дос он какбэ не обязан востанавливаться. нужно принудительно сделать 0х3 режим


--------------------

PM MAIL ICQ   Вверх
Dreamuchiy
Дата 14.4.2011, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



Вобщем при принудительном режиме 0x3, тупо висит курсор моргая и на этом все

Это сообщение отредактировал(а) Dreamuchiy - 20.4.2011, 21:33
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.