Команды пересылки данных
Рис. 26. Принцип работы команды pusha
4. pushaw – почти синоним команды pusha В чем разница? Атрибут разрядности может принимать значение use16 или use32. Рассмотрим работу команд pusha и pushaw при каждом из этих атрибутов:
1) use16 – алгоритм работы pushaw аналогичен алгоритму pusha;
2) use32 – pushaw не изменяется (т. е. она нечувствительна к разрядности сегмента и всегда работает с регистрами размером в слово – ах, сх, dx, bx, sp, bp, si, di). Команда pusha чувствительна к установленной разрядности сегмента и при указании 32-разрядного сегмента работает с соответствующими 32-разрядными регистрами, т. е. еах, есх, edx, ebx, esp, ebp, esi, edi.
5. pushad – выполняется аналогично команде pusha, но есть некоторые особенности.
Следующие три команды выполняют действия, обратные вышеописанным командам:
1) рора;
2) popaw;
3) popad.
Группа команд, описанная ниже, позволяет сохранить в стеке регистр флагов и записать слово или двойное слово в стеке. Отметим, что перечисленные ниже команды – единственные в системе команд микропроцессора, которые позволяют получить доступ (и которые нуждаются в этом доступе) ко всему содержимому регистра флагов.
1. pushf – сохраняет регистр флагов в стеке.
Работа этой команды зависит от атрибута размера сегмента:
1) use 16 – в стек записывается регистр flags размером 2 байта;
2) use32 – в стек записывается регистр eflags размером 4 байта.
2. pushfw – сохранение в стеке регистра флагов размером в слово. Всегда работает как pushf с атрибутом use16.
3. pushfd – сохранение в стеке регистра флагов flags или eflags в зависимости от атрибута разрядности сегмента (т. е. то же, что и pushf).
Аналогично, следующие три команды выполняют действия, обратные рассмотренным выше операциям:
1) popf;
2) popftv;
3) popfd.
И в заключение отметим основные виды операции, когда использование стека практически неизбежно:
1) вызов подпрограмм;
2) временное сохранение значений регистров;
3) определение локальных переменных.