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

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

Моделирование регулировочного участка цеха на GPSS + Пояснительная записка
Информационная система - транспортный парк на 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 Комментариев · 21495 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
TsHintManager
XPcontrol
Degisy Data Acces...
Создание оригинал...
KOL & MCK v1.69
База англоязычных...
Последнее загруж...
Assistant
Переработанный пл...
Фундаментальные а...
32 урока по Delphi
FormShape [Исходн...
ATComponents
Visual Studio 200...
PHP глазами хакера
PHP: Полезные приемы
Borland C++Builde...
Calendar
Учебник для продв...
Программирование ...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20261
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Кодирование
С учетными записям...
10.10.
TIdSMTP и TIdIMAP4...
клиентским компьют...
Использование карк...
1.1. Набросок решения
Другие связанные с...
Варианты дисплея с...
Программирвоание: ...
Полный локальный в...
Синтаксис - МПролог
Обратимся к полю и...
Так, пользователь ...
Разборка приставки...
Удаление компонент...
Продвижение web са...
Лицензия Creative ...
Содержание цифрово...
Снова об интерфейс...
4. Как изменить ср...
Ообъектив с функци...
Задание: обзор чле...
Web-сервис
Circular unit refe...
Статистика



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


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