Вопрос № 69864: Здравствуйте,уважаемые эксперты!
разбирая программку из книги Калашникова возникла парочка вопросов(прога в приложении):
1.mov di,0;обнуляем di для того , чтобы счётчик не уходил на бесконечность(т.е. в di заносим число оставшихся попыток,а т...Вопрос № 69872: Имеется обычное окно (не диалоговое), требуется создать контекст воспроизведения OpenGL не на все окно, а на какую-либо часть, выделить квадрати и туда выводить графику, а в остальныом месте разместить кнопки поля и т.п. Как сделать это на асме.
...Вопрос № 69913: Приветствую, ув. эксперты. У меня возникла такая проблема: в выпуске № 25 рассылки О. Калашникова нужен Turbo Debugger 5.0. В рассылке написано, что он есть на сайте kakashnikoff.ru, но я его что-то там не нашел. Подскажите, пожалуйста, какую нибудь ...Вопрос № 69924: Ребята как программировать COM-порт? Изменение выходного сигнала, вкл/выкл.....
Буду признателен любой инфе или ссылке. Спасибо. ...Вопрос № 69971: Люди, помогите понять, как мне ставить пароль по моему усмотрению (какой захочу), в программу, либо дайте плз прогу если имеется такая чтобы с помощью mov ah, 0Ah, 21uj прерывания, вводить пароль, и он будет проверяться из переменной....
Вопрос № 69.864
Здравствуйте,уважаемые эксперты!
разбирая программку из книги Калашникова возникла парочка вопросов(прога в приложении):
1.mov di,0;обнуляем di для того , чтобы счётчик не уходил на бесконечность(т.е. в di заносим число оставшихся попыток,а тогда что происходит с cx или наоборот- непонятно. )
2.Интересно, если во внутреннем цикле add di,2 всё супер,но если пишем add di,1 (какая разница с какой скоросью растёт di [ведь любой символ ASC II занимает 1 байт]) вдруг программа работает глючит.
Связано ли это с ячейкой памяти выделяемой под 1 рожицу или нет.
И самое интересное, проверяя две идентичные проги (прога Калашникова) только с 2 разными операторами:
add di,1
sub di,2 ( в каждой прге всё идентично кроме этих операторов)
эффект одинаковый (проверено по afdpro). Почему?
И ещё скажите ,пожалуйста, как бы с эмулироват DOS по-нормальному,
а то у меня DOS`а нет и я запускаю com-программы в Dos Navigator`е, но хотелось бы полноценной вещи. Как с эмулировать Dos в WinXP(или может лучше скачатьMS-DOS где-нибуть?[Вы не подсажете,где поискать?])
Приложение:
Отправлен: 07.01.2007, 14:48
Вопрос задал: Loriendil (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: ramok
Здравствуйте, Loriendil!
1. cx используется в нутри процетуды Out_chars как внутренний счетчик. и во вторых в конце этой процедуры мы восстанавливаем значение cx
mov cx,dx
для внешнего цикла
loop Next_screen
2. di используется что бы получить доступи к видео памяти.
mov es:[di],ax
es в данном случае указывает на начало сегмента видеопамяти 0B800h, а di - на текущий символ видеопамяти. Увеличение di на 2 связано с тем как видеопамять устроена. на каждый символ выводимый на экран хранится 2 байта: сам символ и аттрибут цвета. Увеличивая di на 2 каждый раз Вы не только переходите к следующему символу, но и пропускаете байт аттрибута текущего символа. Думаю подробней должно быть в Вашем учебнике
3. Обычно использую или Far или Dos Navigator как Вы
Ответ отправил: ramok (статус: 6-ой класс)
Ответ отправлен: 07.01.2007, 16:14 Оценка за ответ: 5
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 07.01.2007, 16:32 Оценка за ответ: 3
Отвечает: Ivanich
Здравствуйте, Loriendil!
Все просто.
- Команда loop инкрементирует cx
- add di, 2 необходимо для того, что мы осуществляем прямой вывод в видео память. А адресация каждой экранной позиции в сегменте видео буфера равна 2 байтам. (Цвет фона и симфола) + ASCII код символа!
Ответ отправил: Ivanich (статус: 6-ой класс)
Ответ отправлен: 07.01.2007, 19:00 Оценка за ответ: 4
Вопрос № 69.872
Имеется обычное окно (не диалоговое), требуется создать контекст воспроизведения OpenGL не на все окно, а на какую-либо часть, выделить квадрати и туда выводить графику, а в остальныом месте разместить кнопки поля и т.п. Как сделать это на асме.
Отправлен: 07.01.2007, 15:28
Вопрос задал: KeGAR (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ivanich
Здравствуйте, KeGAR!
glViewPort(0, 0, ClientWidth, ClientHeight);
Функция библиотеки opengl32.dll отвечает за величину области вывода opengl
Ответ отправил: Ivanich (статус: 6-ой класс)
Ответ отправлен: 07.01.2007, 18:51
Вопрос № 69.913
Приветствую, ув. эксперты. У меня возникла такая проблема: в выпуске № 25 рассылки О. Калашникова нужен Turbo Debugger 5.0. В рассылке написано, что он есть на сайте kakashnikoff.ru, но я его что-то там не нашел. Подскажите, пожалуйста, какую нибудь ссылочку (только без TASM'а в это же архиве). Я сам пробовал искать, но находил только в комплекте с TASM (4 мб).
Отправлен: 07.01.2007, 20:13
Вопрос задал: Anton_m (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: IceWolf
Здравствуйте, Anton_m!
TD.exe, 393kb: http://slil.ru/23709364
С уважением, IceW0|f.
--------- Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 6-ой класс)
Ответ отправлен: 09.01.2007, 13:42
Вопрос № 69.924
Ребята как программировать COM-порт? Изменение выходного сигнала, вкл/выкл.....
Буду признателен любой инфе или ссылке. Спасибо.
Отправлен: 07.01.2007, 22:04
Вопрос задал: MBO (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ivanich
Здравствуйте, MBO!
Попробуй воспользоваться функциями 14h прерывания.
=====================================================
Инициализация асинхронной связи
Вызов функции:
AH=00h
DX=номер канала (0-3) в соответствие с таблицей портов по адресу 0000:0040h
AL=параметры инициализации:
биты 0, 1:
-00:5-и битный код
-01:6-и битный код
-10:7-и битный код
-11:8-и битный код
бит 2:
-0:1 стоп-бит
-1:2 стоп-бита для 6-8 битного кода и 1,5 стоп-бита для 5-и битного
бит 3:
-0:1 стоп-бит
-1:2 стоп-бита для 6-8 битного кода и 1,5 стоп-бита для 5-и битного
бит 4:
-0:контроль по нечетности
-1:контроль по четности
биты 5-7:скорость обмена (бод)
-000:110
-001:150
-010:300
-011:600
-100:1200
-101:2400
-110:4800
-111:9600
Результаты:
AH=состояние линии управления
AL=состояние модема
=====================================================
Передача байта
Вызов функции:
AH=01h
DX=номер канала (0-3) в соответствие с таблицей портов по адресу 0000:0040h
AL=байт данных для передачи
Результаты:
AH=состояние линии управления
=====================================================
Прием байта
Вызов функции:
AH=02h
DX=номер канала (0-3) в соответствие с таблицей портов по адресу 0000:0040h
Результаты:
AH=состояние линии управления
AL=принятый байт
=====================================================
Получить состояние канала
Вызов функции:
AH=03h
DX=номер канала (0-3) в соответствие с таблицей портов по адресу 0000:0040h
Результаты:
AH=состояние линии управления
-1ХХХХХХХ:тайм-аут
-Х1ХХХХХХ:конец передачи
-ХХ1ХХХХХ:готов к передачи
-ХХХ1ХХХХ:обрыв канала (авария)
-ХХХХ1ХХХ:ошибка по стоп-биту
-ХХХХХ1ХХ:ошибка по паритету
-ХХХХХХ1Х:переполнение
-ХХХХХХХ1:готов к приему
AL=состояние модема
-1ХХХХХХХ:детектор принимаемого линейного сигнала канала данных (цепь 109)
-Х1ХХХХХХ:индикатор вызова (цепь 125)
-ХХ1ХХХХХ:аппаратура готова (цепь 107)
-ХХХ1ХХХХ:готов к передаче (цепь 106)
=====================================================
Расширенная функция инициализация
Вызов функции:
AH=04h
DX=номер канала (0-3) в соответствие с таблицей портов по адресу 0000:0040h
AL= 0 - без обработкой Break; 1 - с обработкой Break
BH=
0 - нет контроля
1 - контроль по нечетности
2 - контроль по четности
3 - stick, контроль по нечетности
4 - stick, контроль по четности
BL= 0 - 1 стоп-бит; 1 - 2 стоп-бита для 6-8 битного кода и 1,5 стоп-бита для 5-и битного кода
CH=
0 - 5-и битный код
1 - 6-и битный код
2 - 7-и битный код
3 - 8-и битный код
CL= скорость передачи (бот)
0 - 110 бот
1 - 150
2 - 300
3 - 600
4 - 1200
5 - 2400
6 - 4800
7 - 9600
8 - 19200
Результаты:
AH=состояние линии управления
AL=состояние модема
=====================================================
Расширеная функция управления
Вызов функции:
AH=05h
DX=номер канала (0-3) в соответствие с таблицей портов по адресу 0000:0040h
AL= 0 - чтение регистра управления модемом; 1 - запись регистра управления модемом
BL=состояние регистра управления модемом при AL=1
Результаты:
AH=состояние линии управления
AL=состояние модема
BL=состояние модема при AL=0
Значения BL:
-111ХХХХХ:0
-ХХХ1ХХХХ:цикл (возможность диагностирования)
-ХХХХ1ХХХ:управление выходом OUT2
-ХХХХХ1ХХ:управление выходом OUT1
-ХХХХХХ1Х:запрос на передачу (цепь 105)
-ХХХХХХХ1:терминал данных готов (DTR, цепь 108)
Вот и все функции
Ответ отправил: Ivanich (статус: 6-ой класс)
Ответ отправлен: 08.01.2007, 00:07 Оценка за ответ: 5 Комментарий оценки: 5. Спасибо. Я загорелся... еще есть? Просьба, если еще что-нить найдешь, скинь.Ага.
Вопрос № 69.971
Люди, помогите понять, как мне ставить пароль по моему усмотрению (какой захочу), в программу, либо дайте плз прогу если имеется такая чтобы с помощью mov ah, 0Ah, 21uj прерывания, вводить пароль, и он будет проверяться из переменной.
Отвечает: Ivanich
Здравствуйте, Огнёв Артём!
Попробуй сделать как в Linux'е. Используй 08'ю функцию 21'ого прерывания для по символьного ввода. Без вывода на экран!!!
Попробуй поместить код из приложения в *.BAT файл и запустить его. (Правда подкорректируй расположение компилятора)
При запуске получившегося *.exe файла с тебя потребуется пароль. Попробуй ввести: "password" (без кавычек). Если пароль подошел, то ты увидишь "Password OK. Wellcome!". Ну а если нет, то "Invalid password!"
Моя программа хороша еще тем, что она не расшифровывает пароль находящийся в памяти, и его нельзя посмотреть в дебаггере сразу, в отличие от твоей!
Приложение:
Ответ отправил: Ivanich (статус: 6-ой класс)
Ответ отправлен: 08.01.2007, 15:29