Вопрос № 51402: Уважаемые эксперты.
Подскажите по адрессации в 16-битном режиме, работаю со структурой
ARRAY STRUC
offset dw ?
char db ?
res db ?
ARRAY ENDS
mov [si+bx*4],di ;сохраняю в поле offset
mov byte ptr [si+bx*4+...Вопрос № 51431: Доброго времени суток!
К сожалению не нашёл ни одной рассылки по низкоуровневой архитектуре и низкоуровневым стандартам, поэтому решил написать сюда (ибо низкий уровень - рулит...:).
Выручайте! Набрёл на какие-то непонятные грабли -...
Вопрос № 51.402
Уважаемые эксперты.
Подскажите по адрессации в 16-битном режиме, работаю со структурой
ARRAY STRUC
offset dw ?
char db ?
res db ?
ARRAY ENDS
mov [si+bx*4],di ;сохраняю в поле offset
mov byte ptr [si+bx*4+2],al ;работаю со вторым элементом структуры
Синтаксис строго TASM.
Как организовать работу со структурой?
Может быть дело в масштабировании?
У Юрова в Справочнике написано, что вроде бы в 16-битной базово-индексной адрессации можно работать только с регистрами BX, BP, SI, DI. Правильно?
Отвечает: Евгений Иванов
Здравствуйте, Волков Павел Юрьевич!
mov [si.offset], di
mov [si.char], al
удачи.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская, 66 WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 07.08.2006, 14:56 Оценка за ответ: 4 Комментарий оценки: У Юрова такой же пример, мне надо именно на регистрах с масштабированием для работы с массивом
структур, мне надо было это указать.
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Волков Павел Юрьевич!
Дополню предыдущего эксперта.
Можно использовать и масштабирование. Но они работают только с 32-битными регистрами.
Поэтому, если это допустимо, то, разрешив использование их использование командой .386,
можно писать mov word ptr [esi+ebx*4],di
Только, надо заметить, способ, предложенный Евгением, удобнее и проще.
2. Юров не обманывает...:)
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Ответ отправлен: 07.08.2006, 15:37 Оценка за ответ: 5 Комментарий оценки: Спасибо, но "шапка" MASM MODEL TINY .486 SEGMENT CSEG BYTE USE16 ASSUME CS:CSEG, DS:CSEG ORG 100h не помогает.
Отвечает: Басков Олег Владимирович
Здравствуйте, Волков Павел Юрьевич!
К сожалению, 16-битная базово-индексная адресация не позволяет указывать масштаб. В ней допустимы сочетания регистров BX+SI, BX+DI, BP+SI, BP+DI.
Масштабирование появилось в 80386 и применяется исключительно с 32-битными регистрами (всеми, но при ESP масштаб указывать нельзя)
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Басков Олег Владимирович (статус: 1-ый класс)
Ответ отправлен: 08.08.2006, 14:26 Оценка за ответ: 5 Комментарий оценки: Спасибо, так держать :)
Вопрос № 51.431
Доброго времени суток!
К сожалению не нашёл ни одной рассылки по низкоуровневой архитектуре и низкоуровневым стандартам, поэтому решил написать сюда (ибо низкий уровень - рулит...:).
Выручайте! Набрёл на какие-то непонятные грабли - глючит: то ли видеоадаптер, то ли Win, то ли монитор, то ли я...:)
В общем так: инициализирую видеографический режим 0103h (800x600x256) функцией 4А02h. Визуально на мониторе при этом разные варианты:
1) (Чаще всего) 320x200x256 (полоска окошка 800x10 на экране - 2 раза с копейками).
2) (Очень редко) Монитор с автоконфигурацией не может подстроится под видеорежим.
3) (Реже всего) Мои функции инициализации возвращают ошибку, мол неверно прочиталась информация о режиме и, соответственно, некорректная установка видеорежима.
Хотя перед этим вызывал 4A01h и проверял все параметры этого видеорежима (дамп - в приложении). Перепахал весь дамп - всё правильно, как и должно быть:
- И резолюции верны;
- И режим поддерживается;
- И окна на своих местах (А: 0A000h; B: Не поддерживается) и полный доступ к ним (к окну A - только оно и интересует, ибо только им и пользуюсь);
- И размер окон правильный (64КБ);
- И размерность bpp верная (8);
- И оконный режим поддерживается (точнее поддерживаются оба: и оконный и FLB)...
Вот только 2 вещи смущают:
- Количество банков (offs: 1Ah) почему-то 1, хотя (IMHO) должно быть (800*600/65536 = 7.32), хотя это, может быть и особенность VESA 2.0, сообщать _такую_ информацию...;
- Бит 5, выставленный в rModeAttr (offs: 00h), обозначающий, что регистры видеоадаптера НЕ поддерживают VGA (хотя VESA - работает).
Итак (самый частый вариант):
1. Инициализирую режим (все сторожевые проверочки детектируют правильные ответы видеоадаптера (поддержку VESA 2.0, нормальные завершения, нормальные возвращаемые значения)).
2. Очищаю экран (адрес процедуры переключения банков украден из ShadowMemory).
3. Вывожу бордюрчик - тишина.
4. Вывожу нехитрые окошки, визуально получается - 320x200x256, да ещё обрезанный какой-то...:( Да ещё и как будто бы чересстрочный (примерно через 3-4 строки).
5. Шевелю мышой - мыша шевелится (знаете, большая такая стрелочка... больше чем нужно раза в 4 и чересстрочная).
6. Выхожу из проги, восстанавливаю вектора шрифтов - всё нормально.
Компилирую в BC3.1 (с объектами) с 386-ми мнемониками.
Работает на:
На всех, кто знает VESA от AMD486x5-133 до AXP64-3GHz и P4-3GHz с S3Trio, GeForce, RIVA TNT2, TNT4 и ещё какими-то c DOS'ами и Windows'ами (9x, 2K, XP (c XP был notebook))(в общей сложности компов 20 было)...
Не работает на:
P4-3GHz-1GB-WinXP-SP2-Matrox и на Cel-1GHz-512MB-ATI-Win2K-SP4.
Помогите! Совсем уж замучился...:(
Может кто свежим глазом и увидит какую-нибудь явную (неужели мою?) ошибку, а может и скрытую и хитрую...:)
Извините если длинно написал (хотел - объективней) или необъективно (хотел - лаконичней).
Приложение:
Отправлен: 07.08.2006, 19:01
Вопрос задал: Sergijj (статус: 4-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: EPDSota
Здравствуйте, Sergijj!
Попробуй установить режим функцией 4f02h... И информацию получить функцией 4f01h...
Скорее всего у тебя в справочнике вместо английской f напечатали русскую а (одна и та-же клавиша). И получилось вместо функции VESA 4f00-4f05h использована 4a00-4a05...
И еще - про мышь - (по дампу) биос вывод на экран не поддерживает.
http://hardline.ru/selfteachers/Info/Programming/SVGA/Glava%201/Index8.htm
--------- Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 07.08.2006, 19:32