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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 295
от 22.11.2005, 20:36

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


Вопрос № 29721: Объясните следующее: 1. SI,DI 2. MOV [PATH+DI],AL (что означают квадратные скобки?) 3. OFFSET 4. BYTE PTR [SI] 5. MOV CS:_SEG,AX 6. MOV AL,[SI+1] 7. PSP Знаю что вопросы глупые, но для дальнейшего понимания необхо...
Вопрос № 29722: Вопросы из облости графического изображения: 1.Палитра, бордюр, видео страница (что это такое, зачем нужны и как с ними работать?) 2.Что такое видео адаптер, регистры адаптера? 3.Битовые плоскости и регистры битовой маски? и еще вопро...

Вопрос № 29.721
Объясните следующее:
1. SI,DI
2. MOV [PATH+DI],AL (что означают квадратные скобки?)
3. OFFSET
4. BYTE PTR [SI]
5. MOV CS:_SEG,AX
6. MOV AL,[SI+1]
7. PSP

Знаю что вопросы глупые, но для дальнейшего понимания необходимые.
Заранее спасибо.
Отправлен: 17.11.2005, 14:50
Вопрос задал: Gwest (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Gwest!
1. регистры. основного назначения.
2. они означают адресацию.
3. смещение
4. взять байт по адресу SI
5. занести в переменную _SEG регистр AX. переопределение сегмента идёт.
6. занести в регистр AL число по адресу SI+1
7. это блок окружения и управления для ДОС программ.

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 17.11.2005, 15:19

Отвечает: Ayl
Здравствуйте, Gwest!

1. Индексные регистры. В некоторых командах могут автоматически изменять свое значение для указания на следующий элемент массива. Обычно используются в качестве указателей на элемент массива. Можно использовать как стандартный 16-разрядный регистр общего назначения.
2. Квадратные скобки обозначают, что происходит обращение к памяти. В качестве смещения адреса ячейки памяти используется выражение PATH+DI, то есть смещение метки PATH плюс значение из регистра DI. Вся команда обозначает действие по записи значения из регистра AL в данную ячейку памяти.
3. Смещение указанной метки программы. Любая метка программы имеет адрес, состоящий из двух компонент - сегмента и смещения. Данная директива возвращает смещение.
4. Обращение к байту по адресу, указанному в регистре SI. Т.к. процессору при выполнении команды необходимо знать размер операндов, а из контекста программы компилятор не всегда может извлечь нужную информацию (например, как интерпретировать команду mov [si], 0 - как запись байта или слова?), то в таких случаях программист явно может указать размерность, используя выражения:
BYTE PTR - обращение к байту
WORD PTR - обращение к слову
DWORD PTR - обращение к двойному слову
и т.д.
5. На самом деле, эту команду лучше записать так:
mov cs:[_SEG], ax
Т.к. происходит обращение к памяти, но ленивые программисты позволяют себе не указывать квадратные скобки, потому что компилятор это допускает.
По умолчанию, адресация переменных происходит через регистр DS. Но в данном случае нужно, чтобы адрес ячейки рассчитывался, используя в качестве сегмента значение из регистра CS. Вот указание CS: и производит эту операцию. Называется "замена сегмента" или "замена сегментного регистра".
6. Сравни эту запись с записью 2. Видишь соответствие? А команда производит загрузку в регистр AL байта из памяти со смещением, равным увеличенному на 1 значению в регистре SI.
7. PSP - Program Segment Prefix, Префикс Сегмента Программы. Это область из 256 байт, расположенная перед программой, которая формируется операционной системой перед запуском программы на выполнение и содержит много важных данных. Например, таблицу открытых файлов, командную строку, сохраненные вектора некоторых важных прерываний и т.п.

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 17.11.2005, 15:28

Отвечает: Юра Устинов
Здравствуйте, Gwest!
Почему же глупые, у всех они были ;)
esi,edi - регистры процессора. Их используют для операций над строками памяти.
Яснее, у вас есть память по адресу SOURCE вам нужно скопировать из неё 400 байт в память по адресу PRIEMNIK.
Быстрее всего это сделать следующим образом.
mov ecx,100
mov esi,offset SOURCE
mov edi,offset PRIEMNIK
rep movsd
Вот вырезка из документации по строковым операциям.
Копирует один байт (MOVSB), слово (MOVSW) или двойное слово (MOVSD) из памяти по адресу DS:ESI (или DS:SI, в зависимости от разрядности адреса) в память по адресу ES:EDI
Квадратные скобки - это косвенная адресация.
Чтобы понятнее, ты можешь обращаться с помощью них к конкретному адресу и конкретному размеру байт.
mov ax, word ptr [bx+esi+PATH]
Offset аргумент- возвращает адрес аргумента в памяти.
ptr - поясняет с каким кол-вом байт нужно работать
mov ax,word ptr PEREM - правильно
mov ax,dword ptr PEREM - неправильно, потому что регистр ax размером в слово, а мы пытаемся в него засунуть 4 байта.
SEG как и offset возвращает адрес аргумента, только его старшую часть.
PSP - Program Segment Prefix или наоборот не помню, когда ты запускаешь com или досовский exe-шник у них есть PSP.
Его структура выглядит следующим образом:
Смещение 0000h: INT 20h - это устаревший метод для прекращения работы программы, вместо которого используется функция 4Ch INT21h.
Смещение 0002h: Дальше идет указатель на следующий сегмент, расположенный после нашей программы. Мы используем его, чтобы узнать, сколько памяти DOS выделил нам (вычитая смещение, на которое он указывает от смещения 0000 нашего PSP). Hам возвращается память в параграфах, поэтому мы должны умножить его на 16, чтобы получить pазмеp в байтах.
Смещение 0005h: Это довольно любопытный путь вызова INT 21h. И, конечно, мы можем использовать его в своих целях. Функции находятся в CL вместо AH, и мы можем использовать только функции меньше 24h. Я объясню больше в главе TUNNELING.
Смещение 000Ah: Здесь мы сохраняем оригинальные векторы INT 22h. INT 22h получает контроль, когда программа завершает свою работу одним из следующих образов:
INT 20h
INT 27h
INT 21h (функции 00h, 31h, 4Ch)
Смещение 000Eh: Здесь мы сохраняем векторы другого int, INT 23h. Это прерывание обрабатывает комбинацию CTRL+C.
Смещение 0012h: Здесь сохранено другое прерывание - INT 24h. Оно обрабатывает критические ошибки. Примеры подобных ошибок? Hапример, когда в вашем дисководе нет дискеты или она защищена от записи.
Смещение 002Ch: Здесь начинается блок окружения.
Смещение 005Ch: В этом поле сохранен первый FCB (File Control Block) по умолчанию. Это путь для получения доступа к файлам обычно не используется программами (он существует для совместимости со старыми версиями DOS'а), но вирмейкеры обычно используют его для реализации невидимости. Смотрите структуру FCB за дополнительной информации.
Смещение 006Ch: Это второй FCB по умолчанию.
Смещение 0080h: У это поля есть две функции:
Сохранение командной части
Файловый буфер по умолчанию для сохранения DTA
Эти функции не могут жить вместе, поэтому когда стартует программа, первое, о чем мы должны подумать - это командная часть. Если она нам нужна, я рекомендую вам сохранить ее в надежное место (переменная в нашем коде). Первый байт командной части (80h) содержит ее длину, а дальше находятся реальные параметры. Структура DTA будет объяснена в той же главе.

УДАЧИ! И вот ещё что, найди учебник Зубкова, классная вещь!
---------
Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 6-ой класс)
Отправлен: 19.11.2005, 13:12


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

Понимаю что надоел со своими вопросами, просто не к кому больше обратиться...
За ответ буду очень благодарен!
Отправлен: 17.11.2005, 15:01
Вопрос задал: Gwest (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Gwest!
сейчас битовые плоскости устарели. используй линейную адресацию и защищённый режим.

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Что имеем - не храним, потерявши - плачем

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 17.11.2005, 15:15

Отвечает: Ayl
Здравствуйте, Gwest!

Ну, блин, и что в одном ответе про это можно сказать? Когда на эту тему многотомные фолианты пишут!

1. Палитра - это те цвета, которые выдаются на экран. Т.к. обычно число одновременно отображаемых цветов много меньше максимально возможного числа цветов (кроме режимов HiColor и TrueColor), то для выводимых цветов выделяют некий массив - палитру, в котором хранятся реальные соотношения первичных цветов. Индекс в этом массиве и является номером "цвета", который используется при работе с экраном. То есть фраза "поставить точку с цветом 2" по хорошему должна читаться как "поставить точку с цветом, указанным во втором элементе палитры".
Бордюр - область экрана, на которую невозможен вывод точек, но который может быть отображен в некотором цвете.
Видеостраница - это область видеопамяти, которая отвечает за отображение на экране. Т.к. объем видеопамяти достаточно большой по отношению к необходимому объему памяти в некоторых режимах, то неиспользуемая память может быть использована в качестве второй, третий и т.д. страниц.

2. Видеоадаптер - это плата, которая подключена к монитору. Регистры - это средство управления видеоадаптером.

3. Читайте про организацию видеопамяти в EGA, VGA, SVGA.

4. Оверлей - это часть программы, которая загружается в память только при необходимости и может быть в любой момент перезагружена или удалена из памяти.

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 17.11.2005, 15:54

Отвечает: Юра Устинов
Здравствуйте, Gwest!
Видео адаптер - видео карта(Позволяет тебе видеть эту надпись).
Регистры видеоадаптера - регистры видео карты :)
Если ты работаешь с портами ввода-вывода, то как раз и работаешь с регистрами.
Палитра - это набор цветов выводимых монитором, а хранятся они в памяти видео адаптера( их можно менять).
Извини но про твои другие вопросы у меня 1Гб информации и я не смогу тебе её передать, а коротко не знаю как и объяснить.
---------
Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 6-ой класс)
Отправлен: 19.11.2005, 13:12


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

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

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

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

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


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


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Архив рассылки
Отписаться
Вспомнить пароль

В избранное