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

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


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

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

Выпуск № 635
от 21.12.2006, 01:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 369, Экспертов: 30
В номере:Вопросов: 1, Ответов: 1


Вопрос № 67066: Здравствуйте уважаемые эксперты! В главе 14-ть книги Олега Калашникова описывается принцип рисования рамки на экране. Автор говорит следующее: - Перед тем как вывести рамку в центр экрана необходимо разделить её высоту на два...

Вопрос № 67.066

Здравствуйте уважаемые эксперты!

В главе 14-ть книги Олега Калашникова описывается принцип рисования рамки на экране. Автор говорит следующее:

- Перед тем как вывести рамку в центр экрана необходимо разделить её высоту на два и из полученного числа вычесть середину высоты.

Загружаем следующий код в отладчик (он взят из книги):

mov ax, Height_X
shr al, 1
mov dh, 11
sub dh, al

Что мы видим? Загружаем в ах высоту нашей рамки - 23 строки, делим на два, вычитаем серидину получая в dh - 0. Расчитывая ширину отладчик также показывает в итоге ноль. И для чего нужны такие координаты? Не проще ли тогда сразу обнулить dh командой xor dh, dh?

Дальше - хуже. Автор пишет, что координату нужно перевести в линейный массив. В текстовом режиме 80х25 символов каждая строка "весит" 2*80=160 байт и соответственно каждый столбец 2*25=50 байт. Вот пример из книги:

mov dh, 8
mov dl, 56
linear = dl*2
linear = linear+dh*160

Так вот при расчёте мы почему то строку умножаем на 160, а вот столбец не на 50-т (что было бы логичнее), а на два. С чем это связано?

Спасибо!
Отправлен: 15.12.2006, 09:01
Вопрос задал: Paltus (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: IceWolf
Здравствуйте, Paltus!
Здравствуйте, Paltus!
1.>Не проще ли тогда сразу обнулить dh
А если высота рамки не 23... Например 10: 10/2=5 11-5=6, а не ноль. Кстати, пример из рассылки.
2. Ищем адрес символа в буфере: длина каждой строки 80 символов*2=160 байт(символ=2 байта). Помимо этого рамка начинается не с левого края экрана, т.е. слева от неё незаконченая строка, кол-во символов в ней и есть нометр столбца. А учитывая, что символ-2байта, получаем Adres=stroka*80*2+ctolbez*2.
С уважением, IceW0|f.

Приложение:

---------
Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!

Ответ отправил: IceWolf (статус: 5-ый класс)
Ответ отправлен: 17.12.2006, 03:38
Оценка за ответ: 5


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное