16.08.2018, 13:57 [+3 UTC]
в нашей команде: 2 914 чел. | участники онлайн: 6 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.47 (16.04.2018)

Общие новости:
13.04.2018, 10:33

Форум:
16.08.2018, 11:45

Последний вопрос:
16.08.2018, 11:42

Последний ответ:
12.08.2018, 20:20

Последняя рассылка:
15.08.2018, 21:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
29.03.2010, 15:10 »
Botsman
Большое спасибо за развернутый ответ! [вопрос № 177540, ответ № 260441]
07.12.2009, 21:28 »
Jekaiseburga
Спасибо! Будет примером, к чему стремиться (в плане написания кодов). [вопрос № 174914, ответ № 257449]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 311
Kdsfofwe21
Статус: 1-й класс
Рейтинг: 220
cain52
Статус: 1-й класс
Рейтинг: 3

Перейти к консультации №:
 

Консультация онлайн # 67066
Раздел: • Assembler
Автор вопроса: Paltus
Отправлена: 15.12.2006, 09:01
Поступило ответов: 1


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

В главе 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-т (что было бы логичнее), а на два. С чем это связано?

Спасибо!

Состояние: Консультация закрыта

Ответ # 132003 от 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
Дата отправки: 17.12.2006, 03:38

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 67066

Посетитель

ID: 422

# 1

= общий = | 15.12.2006, 16:56 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Я не он, да и книги нет под руками, поэтому только свои соображения изложу 1) Алгоритмов может быть много. 2) А если рисовать рамку не на весь экран? 3) умножение на 2 от того, что каждому символу на экране (в буфере текстового экрана) соответствует два байта: в четном - код символа, в следующем - его аттрибут 4) отсюда - весь буфер текстового экрана можно представить в виде длинной цепочки (линейного массива). Вот и нужно определить место символа в этой цепочке

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13953 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.47 от 16.04.2018