КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ


Команды пересылки данных осуществляют обмен данными между регис­трами процессора и ячейками адресного пространства памя­ти или адресного пространства ввода—вывода.

Основная команда общего назначения MOV (переслать) может переслать байт или слово между регистрами и ячейкой памяти или между двумя регистрами (рис. 2.11). В команде допустимо следующее сочетание операндов:

MOV REG8, R8/M8

MOV R8/M7, REG8

MOV R16/Ml6, SR

MOV AL, M8

MOV M8, AL

MOV REGS, DATA8

MOV M8, DATA8

MOV REG16, R16/M16

MOV R16/M16, REG 16

MOV SR, R16/M16

MOV AX, M16

MOV Ml6, AX

MOV REG16, DATA 16

MOV M16, DATA 16

В команде MOV исключаются следующие сочетания опе­рандов:

1) нельзя осуществить непосредственную пересылку дан­ных из одной адресуемой ячейки памяти в другую;

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

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

4) нельзя использовать регистр CS в качестве приемника в команде пересылки (для этого служат команды межсегмент­ных переходов).

Адрес Содержимое Команда Комментарий

CS:OlOO A1 59 02 MOV AX, [259h] ;Пересылка из DS:259h в АХ

CS:0103 A3 59 02 MOV. [259h], AX ;Пересылка из АХ в DS:259h

CS:O106 26 89 07 MOV ES:[BX], AX ; Пересылка из АХ в ES:[BX]

CS:0109 8E D8 MOV DS, AX ;Пересылка из АХ в DS

CS:010B 88 C3 MOV BL, AL ;Пересылка из AL в BL

CS:010D Bl El MOV CL, -30 ;3асылка константы -30 в CL

CS:010F C6 06 03 00 19 MOV [3], 25 ;3асылка константы 25 в [3]

Рис. 2.11. Примеры кодирования и использования команды MOV

Имеются две команды для работы со стеком — PUSH (поместить слово в стек) и POP (извлечь слово из стека). Команда PUSH помещает содержимое регистра или адресуе­мой ячейки памяти размером в слово в стек, а команда POP, наоборот, извлекает последнее занесенное слово из стека и помещает его в адресуемую ячейку памяти или регистр.

Команды PUSH и POP используются парами, т.е. каждой команде PUSH в программе должна соответствовать своя команда POP. Под вершиной стека мы понимаем ячейку памя­ти в сегменте стека, эффективный адрес которой содержится в указателе стека SP. Так как стек “растет” по направлению к младшим адресам памяти, то первое помещаемое в стек слово запоминается в ячейке стека с наибольшим адресом, следующее . ~ по адресу на два меньше и т.д. Регистр SP всегда указывает на слово, помещенное в стек последним. Следовательно, команда PUSH вычитает 2 из значения указа­теля стека, а затем пересылает операнд—источник в стек, по адресу SS:SP. Действуя обратным образом, команда POP пере­сылает в операнд—приемник слово, адрес которого равен SS:SP, а затем добавляет 2 к содержимому регистра указателя стека SP. На рис. 2.12 показаны состояния стека и его указа­теля SP до и после использования команд PUSH и POP.

POP

В стековых командах POP и PUSH допустимо использование следующих операндов (рис. 2.13)

XCHG

Команда обмена XCHG (exchange — обменять) меняет между собой содержимое двух регистров или содержимое ре­гистра и ячейки памяти. Однако она не может выполнить об­мен значений сегментных регистров. В команде XCHG допустимо использование следующих операндов (см. рис. 2.14):

LEA

Команды загрузки адреса передают не- содержимое пере­менных, а их эффективные адреса. Команда загрузки исполни­тельного адреса LEA (load effectiv address — загрузить эффек­тивный адрес) пересылает смещение ячейки памяти, определяе­мое указанным в команде способом адресации в любой 16-би­товый регистр общего назначения, регистр указателя или ин­дексный регистр. В команде LEA допустимо использование только следующих операндов (см. рис. 2.15):

LEA REG16, М16

LES

Команда LES (LDS) (load pointer using ES (DS) — загру­зить 32-битовый адрес (указатель) с использованием регистра ES (DS) считывает из адресуемой ячейки памяти два слова и загружает первое слово в 16-битовый регистр, задаваемый в команде, а второе — в сегментный регистр ES (DS). Полный . адрес ячейки памяти состоит из двух слов, в первом из кото­рых (по меньшему адресу) хранится смещение в сегменте, а во втором (с большим адресом) — адрес сегмента. В команде LDS и LES допустимо использование только следующих опе­рандов (см. рис. 2.16):

clip_image010

Команды перемещения флагов в стек PUSHF и извлече­ние флагов из стека POPF пересылают содержимое регистра флагов в стек и обратно. Они идентичны командам PUSH и POP, но в них не требуется указывать операнд, так как под ним подразумевается регистр флагов (неявное задание, операн­дов). Каждой команде PUSHF должна соответствовать испол­няемая позже команда POP. В командах PUSHF, POPF опе­ранды не задаются (рис. 2.17).

POPF

Загрузка...