![]() |
|
|
![]()
|
|
| Dreamuchiy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 26.12.2006 Репутация: нет Всего: -1 |
У меня ms-dos 622, работает с загрузочной флешки. Masm 61. Меняю видео режим (int 10h). Режим меняется, а вот в конце написано mov ax,4c00h и соответственно int 21h. Режим меняется и на этом все... Не могу понять почему нет возврата нормального в дос и почему нельзя просто использовать команду RET ? Помогите разобраться пожалуйста, я на x86 процах еще новичок совсем. Давно еще активно писал простые проги еще под проц z80, там выход осуществлялся просто командой ret
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт... |
|||
|
||||
| iff |
|
||||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Хотите идти в ногу со временем? Можно завершить также прерыванием INT 20h, но у функции 4Ch прерывания INT 21h есть приемущество - она может возвратить код завершения (error level). Функция 4Ch прерывания INT 21h вызывается так: нужно в регистр ah поместить 4Ch (код функции), в регистр al поместить код завершения (в случае отсутствия ошибок код завершения обычно делают равным нулю, в случае ошибки - её коду), затем исполняется непосредственно вызов прерывания инструкцией INT 21h. Код завершения ошибки можно обработать в bat-файлах, например:
В новых версиях ДОС (точнее уже в её эмуляторах под виндовсом) существет переменная среды errorlevel, которая содержит код завершения последней программы. А на ms-dos тоже можно завершать программу инструкцией ret (точнее retn). При выполнении этой инструкции берётся адрес из стека (стек должен быть пуст к этому моменту и на его вершине тогда записано 0000 - нулевое значение оставляет ДОС.), процессор переходит к исполнению инструкции по адресу 0000 - а там размешена инструкция INT 20h - ее тоже оставил ДОС в PSP (префикс сегментного кода - область памяти с адреса 0000 до 0100h). - Но это только в программах типа COM всё так просто. В программах типа EXE - сложнее - там CS не указывает на сегмент PSP, на него указывает DS и ES. Но программу типа EXE тоже можно зывершить инструкцией ret (точнее retf).
-------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
||||
|
|||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
кстате после смены видеорежима ну к примеру на 320*200 при возврате в дос он какбэ не обязан востанавливаться. нужно принудительно сделать 0х3 режим
-------------------- |
|||
|
||||
| Dreamuchiy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 26.12.2006 Репутация: нет Всего: -1 |
Вобщем при принудительном режиме 0x3, тупо висит курсор моргая и на этом все
Это сообщение отредактировал(а) Dreamuchiy - 20.4.2011, 21:33 --------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт... |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |