Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Организация зап... 65201
Создание отчето... 61682
Модуль Forms 61585
ТЕХНОЛОГИИ ДОСТ... 58147
Пример работы с... 55760
Имитационное мо... 53493
Реклама
Сейчас на сайте
Гостей: 17
На сайте нет зарегистрированных пользователей

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

Обратное размещение элементов ЭВС на Delphi + Пояснительная записка
Программа тестирования и обучающая программа по математике на Turbo Pasc...
Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Пересылка данных
К группе команд пересылки данных относятся следующие команды:
mov <операнд назначения>,<операнд-источник>
xchg <операнд!>,<операнд2>
MOV — это основная команда пересылки данных. Она реализует самые разнооб-
разные варианты пересылки. Отметим особенности применения этой команды.
« Командой MOV нельзя осуществить пересылку из одной области памяти в дру-
гую. Если такая необходимость возникает, то нужно использовать в качестве
промежуточного буфера любой доступный в данный момент регистр общего
назначения. К примеру, рассмотрим фрагмент программы для пересылки бай-
та из ячейки fls в ячейку fid:
masm
model
.data
fls db
fid db
.code
start:
mov
mov
small
5
1
al.fls
fld.al
end start



Нельзя- загрузить в сегментный регистр значение непосредственно из памяти.
Для такой загрузки требуется промежуточный объект. Это может быть регистр
общего назначения или стек. Если вы посмотрите на листинг 5.1, то увидите
в начале сегмента кода две команды MOV, выполняющие настройку сегментного
регистра DS. При этом из-за невозможности напрямую загрузить в сегментный
регистр значение адреса сегмента, содержащееся в предопределенной перемен-
ной @data, приходится использовать регистр общего назначения АХ.
II Нельзя переслать содержимое одного сегментного регистра в другой сегмент-
ный регистр. Это объясняется тем, что в системе команд нет соответствующего
кода операции. Но необходимость в таком действии часто возникает. Выпол-
нить такую пересылку можно, используя в качестве промежуточных все те же
регистры общего назначения. Вот пример инициализации регистра ES значени-
ем из регистра DS:
mov ax.ds
mov es.ax



Но есть и другой, более «красивый» способ выполнения данной операции —
использование стека и команд PUSH и POP:
push ds ;поместить значение регистра ds в стек
pop es ;записать в es число из стека
• Нельзя использовать сегментный регистр CS в качестве операнда назначения.
Причина здесь простая. Дело в том, что в архитектуре процессора IA-32 пара
CS:IP содержит адрес команды, которая должна выполняться следующей. Из-
менение командой MOV содержимого регистра CS фактически означало бы опе-
рацию перехода, а не пересылки, что недопустимо.
В связи с командой MOV отметим один тонкий момент. Пусть в регистре ВХ со-
держится адрес некоторого поля (то есть мы используем косвенную базовую адре-
сацию). Его содержимое нужно переслать в регистр АХ. Очевидно, что нужно при-
менить команду MOV в форме
mov a x , [ Ь х ]
Транслятор задает себе вопрос: что адресует регистр ВХ в памяти — слово или
байт? Обычно в этом случае он принимает решение сам, по размеру большего опе-
ранда, но может и выдать предупреждающее сообщение о возможном несовпаде-
нии типов операндов.
Или другой случай — возможно, более показательный. Рассмотрим команды
инкремента INC (увеличения операнда на 1) и декремента DEC (уменьшения опе-
ранда на 1):
inc [Ьх]
dec [bx]



Что адресуется регистром ВХ в памяти — байт, слово или двойное слово?
Допустим также, что требуется инициализировать поле, адресуемое регистром
ВХ, значением 0. Очевидно, что одно из решений — применение команды MOV:
mov [bx] ,0
И опять у транслятора вопрос: какую машинную команду ему конструировать?
Для инициализации байта? Для инициализации слова? Для инициализации двой-
ного слова?
Во всех этих случаях необходимо уточнять тип используемых операндов. Для
этого существует специальный оператор ассемблера PTR (см. приложение). Пра-
вильно записать приведенные ранее команды можно следующим образом:
mov ax,word ptr[bx] ;если [bx] адресует слово в памяти
inc byte ptr[bx] ;если [bx] адресует байт в памяти
dec dword ptr[bx] ;если [Ьх] адресует двойное слово в памяти
mov word ptr[bx],0 ;если [Ьх] адресует слово в памяти
Можно рекомендовать использовать оператор PTR во всех сомнительных отно-
сительно согласования размеров операндов случаях. Также этот оператор нужно
применять, когда требуется принудительно поменять размерность операндов.
К примеру, требуется переслать значение Offh во второй байт поля flp:
masm
model small
.data
tip dw 0
.code
start:
mov byte ptr (flp+l),0ffh
end start



Несмотря на то что поле flp имеет тип WORD, мы сообщаем ассемблеру, что поле
нужно трактовать как байтовое, и заставляем вычислить значение эффективного
адреса второго операнда как смещение flp плюс единица. Тем самым мы получаем
доступ ко второму байту поля flp.
Для двунаправленной пересылки данных применяют команду XCHG. Для этой
операции можно, конечно, применить последовательность из нескольких команд
MOV, но из-за того что операция обмена используется довольно часто, разработчи-
ки системы команд процессора посчитали нужным ввести отдельную команду об-
мена — XCHG. Естественно, что операнды должны иметь один тип. Не допускается
(как и для всех команд ассемблера) напрямую обменивать между собой содержи-
мое двух ячеек памяти. К примеру,
xchg ах,Ьх ;обменять содержимое регистров ах и Ьх
;обменять содержимое регистра ах и слова в памяти по адресу в [si]:
xchg ax,word ptr [si]
Опубликовал Kest January 04 2009 00:49:04 · 0 Комментариев · 13284 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Sztransppanel
AVIwriter
Технология .Net в VB
Программирование ...
Prolog Interprete...
Запрет гостям ск...
Программирование ...
XPButtons
Анекдоты с ostrie.ru
C++ Стандартная б...
Animation (Пример...
База данных: Книж...
Разработка клиент...
Мод "register.php...
С. Г. Горнаков - ...
Длинный заголовок...
Мод "проверочный ...
Delphi 6 программ...
Создание лабиринт...
Аватары в комме...

Топ загрузок
Приложение Клие... 100399
Delphi 7 Enterp... 83979
Converter AMR<-... 20052
GPSS World Stud... 11471
Borland C++Buil... 11291
Borland Delphi ... 8240
Turbo Pascal fo... 6993
Visual Studio 2... 4975
Калькулятор [Ис... 4489
FreeSMS v1.3.1 3517
Случайные статьи
Шрифт
Топологические фигуры
Установка плагина ...
Машинно-независима...
на прилагаемом ком...
Сбор данных с прим...
Эмуляция директивы...
Как маршрутизатор ...
3.1. Дополнительна...
Настройка фонового...
Функция ядра
Создание восстанов...
Метаданные
Оптимизация програ...
Формы внутреннего ...
Модуль Text
Принцип постоянств...
Отсутствует прямой...
Непроверяемые прео...
Как сделать Outloo...
HACK F.A.Q
ПРИЛОЖЕНИЕ Е. МИК...
Адреса, локальные ...
Язык программирова...
Общее представлени...
Статистика



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


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