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

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


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

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

Выпуск № 515
от 13.08.2006, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 337, Экспертов: 26
В номере:Вопросов: 2, Ответов: 4


Вопрос № 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. Правильно?
Отправлен: 07.08.2006, 14:37
Вопрос задал: Волков Павел Юрьевич (статус: 5-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Евгений Иванов
Здравствуйте, Волков Павел Юрьевич!

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


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

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

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

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

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

В избранное