Консультация № 189120
08.04.2016, 08:57
0.00 руб.
08.04.2016, 09:32
0 5 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Я изучаю книгу Калашникова О. "Ассемблер - это просто. Учимся программировать." В книге приводятся много ассемблерованных примеров.
При компиляции которых получаем программы с расширением .COM.
При написании листиков 5.3 , 6.5 и других, после операторов START, BEGIN нет двух команд
это mov ax,3
int 10h
Полученные после компиляции файлы без этих двух команд не запускаются,
а в файлах-приложениях эти команды есть и они запускаются.
Вопрос, может я что то не понимаю или так задумано?
С уважением, Михаил Назаренко.




Обсуждение

давно
Старший Модератор
31795
6196
08.04.2016, 09:31
общий
Адресаты:
1)Программы писались под COMMAND.COM, в следующих версиях окон идет CMD.EXE.
2)Разница к подходу эмуляции ДОСа этих двух программ состоит в отображении видеобуфура на видеокарту. Т.е. первая призапуске уже отображала видеобуфер, вторая только эмулироваля отображение. При использовании стандартных прерываний вывода разница не заметна, но при прямой записи в видеобуфер, во втором случае ничего не происходило.
Чтобы заставить CMD.EXE отбражать видеобуфер его принудительно нужно переводить в 3-и режим.
3)В книгах осталось примеры для певого случая, в листингах уже для второго.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400164
12
10.04.2016, 15:43
общий
Константин Николаевич, спасибо за быстрый ответ.
Действительно, при чистом DOSe, запускаются обе программы.
И еще, если можно, при запуске хитрой программы, нет русского текста
а только абракодавра. ни в чистом DOSe ни в эмулчции.
У меня WIN XP SP3++.

Чтобы заставить CMD.EXE отображать видеобуфер его принудительно нужно переводить в 3-и режим.
Что значит переводить в 3-и режим?
C уважением, Михаил

давно
Старший Модератор
31795
6196
11.04.2016, 09:06
общий
11.04.2016, 09:17
Адресаты:
Цитата: Михаил
нет русского текста а только абракодавра

Кодировки не совпадают. ср1251 и ср866 - первая кодировка кодировка Windows, вторая - DOS, русские буквы имеют разные коды. Программы нужно писать в редакторах, которые поддерживают кодироввку 866.

Цитата: Михаил
Что значит переводить в 3-и режим?

А то и значат:
Цитата: Михаил
mov ax,3
int 10h

COMMAND.COM автоматически запускал программы в 3-ем режиме, а CMD.EXE, этот режим только эмулировал.
Тут эта тема разбиралась полностью.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
12.04.2016, 09:23
общий
это ответ
Здравствуйте, Михаил!

Книга писалась ещё при Windows 9x, её особенностью был эмулятор DOS'a - COMMAND.COM. В следующих версиях Windows уже использовался CMD.EXE. Они по разному эмулируют работу с видеоадапером. Первый создавал видеобуфер и заставлял видеоадптер считывать данные с него. Второй этот момент игнорирует. При работе стандартными функциями вывода DOS или BIOS практически не видно разницы. Различия появляются, при прямой записи в видеобуфер. Чтобы заставить эмулятор CMD.EXE использовать видеобуфер, его принудительно переводят в тесктовый/графические режимы. Отсюда и строчки:
[code lang=asm h=50]mov ax,3
int 10h[/code]
Перевести эмулятор в 3-й текстовый режим.
В книге листинги остались с первого издания, на диске файлы уже с учетом современной ситуации.
ps:Кому интерестно тут подробно разбирался этот вопрос.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400164
12
13.04.2016, 14:58
общий
Адресаты:

Я бы оценил на пять с плюсом.
Все те вопросы, которые спрашивал, после проверки
они подтвердились. Я узнал даже больше.
Проверил на чистом ДОСе и Win XP.
Отдельно за быстрый ответ.
Константин, большее спасибо.
Так держать!

Форма ответа