Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 654
от 13.01.2007, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 374, Экспертов: 27
В номере:Вопросов: 5, Ответов: 7


Вопрос № 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

Отвечает: Евгений Иванов
Здравствуйте, Loriendil!

Поставь DosBox. Отличный эмулятор реального режима.

http://dosbox.sourceforge.net

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +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 прерывания, вводить пароль, и он будет проверяться из переменной.

Приложение:

Отправлен: 08.01.2007, 10:48
Вопрос задал: Огнёв Артём (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ivanich
Здравствуйте, Огнёв Артём!
Попробуй сделать как в Linux'е. Используй 08'ю функцию 21'ого прерывания для по символьного ввода. Без вывода на экран!!!
Попробуй поместить код из приложения в *.BAT файл и запустить его. (Правда подкорректируй расположение компилятора)
При запуске получившегося *.exe файла с тебя потребуется пароль. Попробуй ввести: "password" (без кавычек). Если пароль подошел, то ты увидишь "Password OK. Wellcome!". Ну а если нет, то "Invalid password!"
Моя программа хороша еще тем, что она не расшифровывает пароль находящийся в памяти, и его нельзя посмотреть в дебаггере сразу, в отличие от твоей!

Приложение:

Ответ отправил: Ivanich (статус: 6-ой класс)
Ответ отправлен: 08.01.2007, 15:29


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное