программе нужно ввести код из
001F 8B 4E 06 MOV CX, [BP+6] ; Выборка второго параметра (BX)
0022 8B 56 08 MOV DX, [BP+8] ; Выборка первого параметра (AX)
; ...
0025 C2 0008 RET 8 ; Возврат с уничтожением поля параметров
0028 SUBROUTINE ENDP
0028 CODE ENDS
END
Фиг. 4.7 Операции со стеком
программе нужно ввести код из порта ввода=вывода 3DAH, а в регистре
DX находятся важные данные. Следующая последовательность команд
PUSH DX
MOV DX, 3DAH
IN AL, DX
POP DX
сохраняет регистр DX в стеке на то время, пока он нужен в
программе для выполнения команды IN.
Операции сохранения регистров в стеке обычно используется в
начале программы. В большинстве случаев подпрограмма старается
избегать изменения содержимого любого регистра. Поэтому
подпрограмма, которой нужны регистры для вычислений и для хранения
адресов, помещает все необходимые ей регистры в стек до выполнения
команд обработки. Затем, после выполнения, подпрограмма
восстанавливает регистры из стека с помощью команд POP.
Помните о том, что стек - это структура типа LIFO. Если в вашей
программе выполняется последовательность команд
PUSH BX
PUSH CX
POP BX
POP CX
то результирующим эффектом будет обмен значений в регистрах BX
и CX. Только тот факт, что в команде PUSH был указан регистр BX, не
означает, что команда POP, указывающая на тот же регистр,
восстанавливает первоначальное содержимое регистра BX. Еще одним
важным моментом является то, что команды PUSH и POP должны быть
сбалансированы, т.е. каждой команде PUSH должна соответствовать
Содержание Назад Вперед