Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
Расчет обратной матрицы на Delphi + Пояснительная записка
Диплом RSA, ЭЦП, сертификаты, шифрование на C#

Работа с адресами и указателями
При написании программ на ассемблере производится интенсивная работа с адре-
сами операндов, находящимися в памяти. Для поддержки такого рода операций
есть специальная группа команд, в которую входят следующие команды.
lea <приемник>,<источник> — загрузка эффективного адреса;
Ids <приемник>,<источник> — загрузка указателя в регистр сегмента данных ds;
les <приемник>,<источник> — загрузка указателя в регистр дополнительного сег-
мента данных es;
Igs <приемник>,<источник> — загрузка указателя в регистр дополнительного сег-
мента данных gs;
* Ifs <приемник>,<источник> — загрузка указателя в регистр дополнительного сег-
мента данных fs;
ii Iss <приемник>,<источник> — загрузка указателя в регистр сегмента стека ss.
Команда LEA похожа на команду MOV тем, что она также производит пересылку,
однако команда LEA производит пересылку не данных, а эффективного адреса дан-
ных (то есть смещения данных относительно начала сегмента данных) в регистр,
указанный операндом <приемник>.
Часто для выполнения некоторых действий в программе недостаточно знать
значение одного лишь эффективного адреса данных, а необходимо иметь полный
указатель на данные. Вы помните, что полный указатель на данные состоит из сег-
ментной составляющей и смещения. Все остальные команды этой группы позво-
ляют получить в паре регистров такой полный указатель на операнд в памяти. При
этом имя сегментного регистра, в который помещается сегментная составляющая
адреса, определяется кодом операции. Соответственно, смещение помещается
в регистр общего назначения, указанный операндом <приемник>. Но не все так про-
сто с операндом <источник>. На самом деле в команде в качестве источника нельзя
указывать непосредственно имя операнда в памяти, на который мы бы хотели по-
лучить указатель. Предварительно необходимо получить само значение полного
указателя в некоторой области памяти и задать в команде получения полного ад-
реса имя этой области. Для выполнения этого действия необходимо вспомнить
директивы резервирования и инициализации памяти (см. главу 5). При примене-
нии этих директив возможен частный случай, когда в поле операндов указывается
имя другой директивы определения данных (фактически, имя переменной). В этом
случае в памяти формируется адрес этой переменной. Какой адрес будет сформи-
рован (эффективный или полный), зависит от применяемой директивы. Если это
DW, то в памяти формируется только 16-разрядное значение эффективного ад-
реса, если же DD — в память записывается полный адрес. Размещение этого
адреса в памяти следующее: в младшем слове находится смещение, в старшем —
16-разрядная сегментная составляющая адреса. Посмотрите на листинг 5.3
и рис. 5.20 (глава 5). В сегменте данных программы из листинга 5.3 переменные
adr и adr_full иллюстрируют наш случай получения частичного и полного указате-
лей на данные в памяти.
Например, при организации работы с цепочкой символов удобно поместить ее
начальный адрес в некоторый регистр и далее в цикле модифицировать это значе-
ние для последовательного доступа к элементам цепочки. В листинге 7.2 произво-
дится копирование строки байтов str_l в строку байтов str_2. В строках 13 и 14
в регистры SI и DI загружаются значения эффективных адресов переменных str_l
и str_2. В строках 18,19 производится пересылка очередного байта из одной стро-
ки в другую. Указатели на позиции байтов в строках определяются содержимым
регистров SI и DI. Для пересылки очередного байта необходимо увеличить на еди-
ницу регистры SI и DI, что и делается командами сложения ШС (строки 20,21). После
этого программу необходимо зациклить до обработки всех символов строки.

Листинг 7. 2. Копирование строки
<1> ; - Prg_7_2.asm -
<2> masm
<3> model small
<4> .data
<5> ...
<6> str_l db "Ассемблер - базовый язык компьютера"
<7> str_2 db 35 dup (" ")
<8> full_pnt dd str_l
<9> ...
<10> .code
<11> start:
<13> lea si ,str_l
<14> lea di ,str_2
<15> les bx,full_pnt ;полный указатель на strl в пару es:bx
<16> mov ex, 35 ;счетчик цикла для loop ml (глава 10)
<17> ml:
<18> mov al , [si ]
<19> mov [di] ,al
<20> inc si
<21> inc di
<22> ;цикл на метку ml до пересылки всех символов (loop ml)
<23>
<24> end start




Необходимость использования команд получения полного указателя данных
в памяти, то есть адреса сегмента и значения смещения внутри сегмента, возника-
ет, в частности, при работе с цепочками. Мы рассмотрим этот вопрос в главе 12.
В строке 8 листинга 7.2 в двойном слове fulLpnt формируются сегментная часть
адреса и смещение для переменной str_l. При этом два байта смещения занимает
младшее слово fulLpnt, а значение сегментной составляющей адреса — старшее
слово fulLpnt. В строке 15 командой LES эти компоненты адреса помещаются в регис-
тры ВХ и ES.
Опубликовал Kest January 03 2009 21:52:44 · 0 Комментариев · 22113 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
В.Понамарев - COM...
PBEditPack
DelphiX
Экспорт базы данн...
Игра змейка
Архив значков
Добавление к ссы...
PHP 5. Практика с...
PHP 5. Полное рук...
Delphi 6 программ...
Borland Delphi 6....
Упорядоченный дин...
EditButton
Динамические за...
Шифрование по алг...
Calendar
Counter [Исходник...
Пример работы с ф...
Программирование ...
Философия C++. Пр...

Топ загрузок
Приложение Клие... 100801
Delphi 7 Enterp... 98065
Converter AMR<-... 20304
GPSS World Stud... 17069
Borland C++Buil... 14262
Borland Delphi ... 10389
Turbo Pascal fo... 7399
Калькулятор [Ис... 6094
Visual Studio 2... 5242
Microsoft SQL S... 3677
Случайные статьи
файлов
STORAGE (ПАМЯТЬ)
LED-лампы
Необходимые типы д...
Поисковый механизм...
Всегда можно измен...
Структура экспертн...
Настройка параметр...
Наследование
Модерация отзывов
Сообщения протокол...
Приложение RADIUS ...
Оптимальная сортир...
13.1. Интерфейс
Пример стека как с...
решения для выделе...
Делай уроки сам
Особенности примен...
Сигнатуры
Настройка дизайн-т...
Файлы не подчиняю...
ПЕРЕМЕННЫЕ
Информационный экс...
Некоторые пытаются...
Польза гвоздики
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?