Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

Моделирование круглосуточного интернет кафе на GPSS + Отчет
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
Информационная система - продуктовый магазин на Turbo Pascal (База данны...

Работа с адресами и указателями
При написании программ на ассемблере производится интенсивная работа с адре-
сами операндов, находящимися в памяти. Для поддержки такого рода операций
есть специальная группа команд, в которую входят следующие команды.
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 Комментариев · 21913 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Запрет гостям ск...
Доступа к БД Fire...
IPAddresseEdit
JanComp
Создание лабиринт...
isoCanvas (Редакт...
PHP, MySQL и Drea...
ScrollCredit
mp3tag
DragMe [Исходник ...
Plasma
Java Server Pages...
Сапёр
DelphiX
Приложение Клиент...
Прграммирование в...
Sztransppanel
CodeGear RAD Stud...
Zoom [Исходник на...
Szwavepanel

Топ загрузок
Приложение Клие... 100791
Delphi 7 Enterp... 97987
Converter AMR<-... 20293
GPSS World Stud... 17047
Borland C++Buil... 14217
Borland Delphi ... 10359
Turbo Pascal fo... 7387
Калькулятор [Ис... 6070
Visual Studio 2... 5228
Microsoft SQL S... 3673
Случайные статьи
Сколько по времени...
12.3. Пространство...
Просмотр техническ...
Видеоприложения со...
Как ответить на во...
Активизация некот...
Что позволяет подд...
Доступ к удаленной...
Создание атрибутов
1.1. Разработка пр...
Функции
Зеркало Вулкан: во...
Работа со списком ...
Реализация классиф...
Устройства доступа...
Локальные сети с п...
Классы TConf и TAn...
Как заработать в к...
Менеджмент
Виртуальные дестру...
Да! При проектиров...
Реализация методов...
Страница управлени...
Вращение AVL-дерев...
Модернизация Award...
Статистика



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


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