Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Команды пересылки данных




Команды пересылки данных наиболее часто используются из всего набора команд любого ПК. Задача по обработке данных заключается в переносе информации из одного места в другое.

Команда пересылки MOV — основная команда пересылки данных, которая позволяет переслать содержимое источника (операнд 2) в приемник (операнд 1). Содержимое приемника безвозвратно теряется, содержимое источника не изменится

Формат команды MOV < операнд 1>,< операнд 2>

В качестве приемника можно использовать один из регистров общего назначения 8-ми и 16-ти разрядный или переменную в памяти размерностью в байт или слово.

В качестве источника можно также использовать один из регистров общего назначения (8-ми или 16-ти разрядные), переменную в памяти (байт или слово), а также константу размерностью в байт или слово (понятно, что константу нельзя использовать в качестве приемника).

При использовании команд пересылки необходимо помнить:

- нельзя пересылать данные непосредственно между двумя адресами памяти;

- следить за тем, чтобы размерности пересылаемых операндов соответствовали друг другу, иначе может возникнуть ошибка;

- нельзя пересылать данные из одного сегментного регистра в другой;

- при помощи команды MOV нельзя загрузить сегментный регистр CS.

При выполнении команды MOV никакие флаги — не меняются.

 

Команда замены XCHG

Команда XCHG просто меняет местами между собой содержимое двух операндов (например, двух регистров, или регистра и ячейки памяти).

Формат команды XCHG < операнд 1>,< операнд 2>

Команда XCHG заменяет три команды пересылки и не требует промежуточной ячейки памяти.

Если бы не было этой команды, то, чтобы обменять значения в регистрах AX и BX, сначала нужно было бы переслать содержимое AX в рабочую ячейку, затем содержимое BX в AX, а потом содержимое рабочей ячейки в BX. Команда XCHG одна выполняет эту операцию

При выполнении команды XCHG никакие флаги не меняются

 

Команда LEA

С помощью команды LEA можно вычислить и загрузить в один из регистров исполнительный адрес (смещение) операнда в памяти

Формат команды LEA <register>,<memory>, где <register > — один из регистров общего назначения, значение которого безвозвратно теряется. Второй операнд <memory> является некоторым адресом или адресным выражением. В качестве второго операнда можно использовать любой вид адресации.

При выполнении команды LEA никакие флаги микропроцессора, описывающие его состояние, не меняются.

Отличие от команды MOV в том, что по команде MOV загружается значение некоторого участка памяти, а при команде LEA — адрес начала этого участка.

 

Оператор указания типа — PTR

При записи команд в символьной форме необходимо внимательно следить за правильным указанием типа (размера) операндов, чтобы не было ошибок. Тип обычно определяется по внешнему виду одного из них, например:

MOV AH,5; пересылка байта, т.к. AH - байтовый регистр

MOV AX,5; пересылка слова, т.к. AX - 16-битовый регистр

; (операнд 5 может быть байтом и словом, по нему нельзя определить размер пересылаемой величины)

MOV [BX],300; пересылка слова, т.к. число 300 не может быть байтом

Если по внешнему виду можно однозначно определить тип обоих опе­рандов, тогда эти типы должны совпадать, иначе ассемблер зафиксирует ошибку.

Примеры:

MOV DS,AX; оба операнда имеют размер слова

MOV CX,BH; ошибка: регистры CX и BH имеют разные размеры

MOV DL,300; ошибка: DL - байтовый регистр, а число 300 не может быть байтом.

Возможны ситуации, когда по внешнему виду операндов нельзя опреде­лить тип ни одного из них, как, например, в команде

MOV [BX],5

Здесь число 5 может быть и байтом, и словом, а адрес из регистра BX может указывать и на байт памяти, и на слово. В подобных ситуациях ас­семблер фиксирует ошибку. Чтобы избежать ее, надо уточнить тип одного из операндов с помощью оператора с названием PTR, который записывается следующим образом:

<тип> PTR <выражение >, где

<тип>- это BYTE, WORD, а <выражение > - может быть константой или адресом, например,

MOV BYTE PTR [BX],5; пересылка байта

MOV WORD PTR [BX],5; пересылка слова

Оператор PTR необходим и в том случае, когда надо изменить тип, предписанный имени при его описании. Если, например, X описано как имя переменной размером в слово:

X DW 999

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

MOV AH,X

нельзя, т.к. ее операнды имеют разный размер. Эту команду следует за­писать несколько иначе:

MOV AH,BYTE PTR X

Здесь конструкция BYTE PTR X означает адрес X, но уже рассматриваемый не как адрес слова, а как адрес байта. (Напомним, что с одного и того же адреса может начинаться байт, слово и двойное слово; оператор PTR уточняет, ячейку какого размера мы имеем в виду.)

 

К командам пересылки относятся также команды стека PUSH и POP

Стеком называют область памяти для временного хранения произвольных данных. Удобство стека заключается в том, что его область используется многократно. Размер стека не должен превышать 64 кбайт и начальный адрес должен быть кратен 16. Другими словами, эта область должна быть сег­ментом памяти; он называется сегментом стека, где начальный адрес хранится в регистре SS

В ПК принято стек заполнять снизу вверх: первый элемент записывается в стек в ячейку области с наибольшим адресом (дно стека), следующий элемент записывается над ним и т.д. При считывании из стека первым удаляется самый верхний элемент (признак LIFO — “последним пришёл — первым ушёл”).

Таким образом, получается, что дно стека фиксировано, а вершина стека всё время сдвигается. Для того чтобы знать текущее положение этой вершины, используется регистр SP — указатель стека, в котором хранится адрес той ячейки, где находится элемент, записанный в стек последним.

Следовательно, в SP — находится смещение, т.е. адрес, отсчитанный от начала сегмента стека. Абсолютный адрес вершины стека задается парой регистров SS:SP

И не следует забывать, что по мере записи данных в стек, последний растёт в сторону младших адресов (эта особенность заложена в алгоритм команд работы со стеком).

При занесении элемента в стек, микропроцессор уменьшает значение регистра SP на 2 байта, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека микропроцессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека SP на 2 байта.

Основными стековыми командами являются команды записи слова в стек и считывания слова из стека.

Формат команды: PUSH <операнд>

Команда PUSH записывает в стек свой операнд, которым может быть слово. Флаги команда не меняет.

Чтение из стека слова: POP <операнд>

Команда POP считывает слово из вершины стека

 

 

Следующая пара стековых команд используется для записи в стек и чтения из стека регистра флагов:

PUSHF и POPF

Эти команды обычно используются для сохранения текущих состояний флагов и последующего их восстановления.

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

При работе со стеком необходимо помнить: если мы что-то записали в стек, то обязаны всё это считать из стека (сколько было команд PUSH, столько должно быть команд POP).

 




Поделиться с друзьями:


Дата добавления: 2014-11-09; Просмотров: 4413; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.