Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Команды

.doc
Скачиваний:
17
Добавлен:
15.06.2014
Размер:
283.65 Кб
Скачать

Применение: Команда применяется для восстановления содержимого вершины стека в регистр, ячейку памяти или сегментный регистр. Заметим, что недопустимо восстановление значения в сегментный регистр cs.

my_proc proc    near

        push    ax

        push    bx

;тело процедуры, в которой изменяется содержимое

;регистров ax и bx

...

        pop     bx

        pop     ax

        ret

        endp

        

См. также: уроки 7, 10, 14, 15, 16, 17 и команды popa, popad, popf, popfd, push, pusha, pushad, pushf, pushfd

POPA

(POP All general registers from the stack)

Извлечение всех регистров общего назначения из стека

 

Схема команды: 

popa 

Назначение: извлечение из стека регистров общего назначения di, si, bp, sp, bx, dx, cx, ax.

Синтаксис Алгоритм работы:

  • извлечь из стека последовательно значения и загрузить ими регистры общего назначения di, si, bp, sp, bx, dx, cx, ax. Содержимое di восстанавливается первым. Содержимое sp извлекается, но не восстанавливается;

  • увеличить значение указателя стека esp/sp на 16.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение: Команда popa по принципу работы является обратной команде pusha и используется для восстановления содержимого всех регистров общего назначения значениями из стека. Эту команду можно использовать в процедурах и программах обработки прерываний для восстановления регистров общего назначения прерванной программы.

.386

my_proc proc    near

        pusha

;тело процедуры, в которой изменяется

;содержимое регистров общего назначения

...

        popa

        ret

        endp

        

См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popad, popf, popfd, push, pusha, pushad, pushf, pushfd

PUSH

(PUSH operand onto stack)

Размещение операнда в стеке

 

Схема команды: 

push источник 

Назначение: размещение содержимого операнда источник в стеке.

Синтаксис Алгоритм работы:

  • уменьшить значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса — use16 или use32);

  • записать источник в вершину стека (адресуемую парой ss:esp/sp).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение: Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека. Размер записываемых значений — слово или двойное слово. Также в стек можно записывать непосредственные значения. Заметьте, что в отличие от команды pop в стек можно включать значение сегментного регистра cs. Другой интересный момент связан с регистром sp. Команда push esp/sp записывает в стек значение esp/sp по состоянию до выдачи этой команды. В микропроцессоре i8086 по этой команде записывалось скорректированное значение sp. При записи в стек 8-битных значений для них все равно выделяется слово или двойное слово (в зависимости от use16 или use32).

my_proc proc    near

        push    ax

        push    bx

;тело процедуры, в которой изменяется содержимое

;регистров ax и bx

...

        pop     bx

        pop     ax

        ret

        endp

        

См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popf, popfd, pusha, pushad, pushf, pushfd

PUSHA

(PUSH All general registers onto stack)

Размещение всех регистров общего назначения в стеке

 

Схема команды: 

pusha 

Назначение: размещение в стеке регистров общего назначения в следующей последовательности: ax, cx, dx, bx, sp, bp, si, di.

Синтаксис Алгоритм работы:

  • уменьшить значение указателя стека esp/sp на 32/16 (в зависимости от значения атрибута размера адреса — use16 или use32);

  • включить в стек последовательно значения регистров общего назначения ax, cx, dx, bx, sp, bp, si, di.

Содержимое di при этом будет на вершине стека. В стек помещается содержимое sp по состоянию до выполнения команды. Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение: Команда pusha используется совместно с командой popa для сохранения и восстановления всех регистров общего назначения. Эти команды удобно использовать при работе с процедурами, программами обработки прерываний, а также в других случаях для сохранения и восстановления регистров общего назначения как части контекста некоторого вычислительного процесса.

my_proc proc    near

        pusha

;тело процедуры, в которой изменяется

;содержимое регистров общего назначения

...

        popa

        ret

        endp

        

См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popad, popf, popfd, push, popa, pushad, pushf, pushfd

SUB

(SUBtract)

Вычитание

 

Схема команды: 

sub операнд_1,операнд_2 

Назначение: целочисленное вычитание.

Синтаксис Алгоритм работы:

  • выполнить вычитание операнд_1=операнд_2-операнд_1;

  • установить флаги.

Состояние флагов после выполнения команды:

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

r

r

r

r

r

Применение: Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.

;выполнить вычитание 64-битных значений: vich_1-vich_2

vich_1  dd      2 dup (0)

vich_2  dd      2 dup (0)

rez     dd      2 dup (0)

...

;ввести значения в поля vich_1 и vich_2:

;младший байт по младшему адресу

...

        mov     eax,vich_1

        sub     eax,vich_2      ;вычесть младшие половинки чисел

        mov     rez,eax ;младшая часть результата

        mov     eax,vich_1+4

        sbb     eax,vich_2+4    ;вычесть старшие половинки чисел

        mov     rez+4,eax       ;старшая часть результата

        

См. также: урок 8, приложение 7 и команду sbb

Соседние файлы в предмете Системное программное обеспечение