• Иллюстрированный самоучитель по Assembler

    P

    POPF Восстановление из стека регистра флагов

    Команда popf пересылает верхнее слово стека (на которое указывает регистр SP) в регистр флагов FLAGS. После этого содержимое SP увеличивается на 2, и SP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Команда popf не имеет параметров; она воздействует на все флаги процессора, кроме флагов VM и RF.

    Пример 1:

    popf; Регистр флагов загружается из стека
    

    Пример 2:

    pushf; Отправим флаги в стек
    mov BP,SP; Настроим ВР на флаги в стеке
    or [BP],100h; Установим бит 100h (флаг TF)
    popf; Вытолкнем в регистр флагов.
    ;Теперь в регистре флагов TF=1
    

    386+ POPFD Восстановление из стека расширенного регистра флагов

    Команда popfd пересылает верхнее слово стека (на которое указывает регистр ESP) в расширенный регистр флагов EFLAGS. После этого содержимое ESP увеличивается на 4, и ESP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Команда popfd не имеет параметров; она воздействует на все флаги процессора.

    Пример:

    popfd; Регистр EFLGS загружается из стека
    

    PUSH Занесение операнда в стек

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

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

    push 1234h
    

    В неэффективную последовательность операций со стеком, результатом которой будет проталкивание указанного операнда в стек. Команда push не воздействует на флаги процессора.

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

    Пример 1:

    push ES:mem; Сохранение содержимого
    push DS; слова памяти mem из
    push BP; дополнительного сегмента
    ;а также регистров DS и ВР
    …;
    pop PP; Восстановление из стека
    pop DS; трех операндов
    pop ES: mem; в обратном порядке
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.