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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 979
от 17.02.2008, 14:05

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 122807: Здравствуйте уважаемые эксперты! Извините за длинный вопрос, просто они у меня накапливаются, чтобы лишний раз вас не отвлекать. Объясните, пожалуйста, несколько вопросов. (программы типа COM). 1) Изучая режимы SVGA, я столкнулся с такой ...

Вопрос № 122.807
Здравствуйте уважаемые эксперты!
Извините за длинный вопрос, просто они у меня накапливаются, чтобы лишний раз вас не отвлекать.
Объясните, пожалуйста, несколько вопросов. (программы типа COM).
1) Изучая режимы SVGA, я столкнулся с такой ситуацией:
На большинстве машин за один пиксель отвечают 4 байта (синий, зеленый, красный, резерв). Я использовал процедуру в приложении 1 для пересчета в линейный адрес и установки «окна проецирования».
А вот на некоторых машинах, за один пиксель отвечают 3 байта (т.е. без резервного). В этом я убедился, используя ax=4f01h cx=112h (режим 640*480 и 3-х байтный цвет), int 10h.
Ну думаю ладно, изменил первые две строки процедуры (shl bx,2 / mov ax,640*4) на (mov ax,bx / add bx,ax / add bx,ax / mov ax,640*3). И тем не менее не хочет работать (рисунка нет). До этого все делал из-под Windows, загрузил с дискеты «чистый» DOS. И вот тогда программа заработала. Я делаю вывод, что каким-то образом принимает участие видеодрайвер (кстати, на этой машине стоит мат. плата «Mercury», а допол. видеокарты нет вообще). Но отсюда вытекает второй вопрос.
2) Почему SVGA режимы работают под «чистым» DOS. Неужели DOS понимает все современные видеокарты, ведь производители не стоят на месте. И никаких драйверов не надо?
3) Не совсем до конца понимаю, когда мы используем прямое копирование в сегмент A000h для графических режимов, и в сегмент B800h (или B900h и т.д.) для текстовых режимов – куда это все на самом деле копируется? Действительно сразу на видеопамять или все же сначала в оперативную память в некую область под условным названием «видеобуфер»? И в этом случае, когда все попадает на видеопамять?
4) Объяните, пожалуйста, команды арифметического сопроцессора: FBLD, FBSTP, FBST.
Сколько пробовал компилятор ругается. И что такое десятичный формат числа? Правильно ли я понял- что используя связки FLD-FBSTP и FBLD-FSTP можно переводить числа из 16-й системы в 10-ную и обратно?

Приложение:

Отправлен: 12.02.2008, 13:52
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Бартосик Феликс Михайлович!

1) Видеоконтролеры различных производителей по разному интерпретируют режимы TureColor: 10Fh,112h,115,118h и 11Bh. Одни как 24-битовые, другие как 32-битовые, т.е. однозначного стандарта на эти режимы нет. Поэтому нужно проверять функцией 4F01h байт +25h(возвращаемой структуры)- число бит резервной компоненты (если 0, значит это 24-битовый, если 8, то 32-битовый).
2) Работая в "чистом" DOSe, Вы работаете прямо с видеоконтролером, без "посредников". Когда Вы работаете в эмуляторе DOS под Windows, из-за некорректно написаного эмулятора DOS, некоторые режимы и команды неправильно обрабатываются и потом передаются по цепи: операционная система, драйвер и только сейчас видеоконтролер.
3) Все это копируется в оперативную память. Вывод информации на экран производится так:
- информация записывается в оперативную память;
- во время обратного хода луча, видеоконтролер используя режим DMA(Direct Memo ry Access - прямой доступ к памяти) без участия процессора, сам считывет информацию из опертивной памяти в свою;
- и только потом она попадает на экран.
По вопросам 1-3, думаю Вам будет полезна книга В.Кулакова.

4) Эти команды работают с упакoванными двоичнодесятичноними числами(BCD) , в отличии от двоичных, на каждую десятичную цифру отводится 4-е бита, т.е. в одном байте находятся 2-е десятичные цифры, к примеру: число 99 в BCD формате выглядят так:
1001 10012 = 9916 = 15310
В отличии от 2-ой системы:
0110 00112 = 6316 = 9910
не упакованные BCD число, это когда в каждом байте находятся по одной цифре. В приложении варианты ввода и вывода без сопроцессора, а также вывод с его использованием. Как пример перевода чисел без сопроцессора, посмотрите Вопрос № 120.924.
ps:вопросы задавайте в мини-форум.
Удачи!

Приложение:

---------
И только наступив на грабли мы приобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 12.02.2008, 18:16
Оценка за ответ: 5
Комментарий оценки:
Спасибо Константин Николаевич ! 3) Не совсем понял откуда видеоконтролер знает из какого места опер.памяти нужно считывать инфомацию в свою память? Т.е., если например программа находится в текстовом режиме и активна нулевая страница, то видеоконтролер такой умный и знает, что нужно считывать из 0B800h-ного сегмента? 4) В примере из Вашего приложения есть такая строка fbstp number_temp. Какого типа должна быть переменная number_temp. Вот над этим я уже и до этого бился - перебрал все типы от db до dq, и везде компилятор Masm611 выдает ошибку:invalid operand size for instruction


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное