КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |