Поместить регистр или ячейку памяти в стек
______________________________PUSH reg/mem
16 - Поместить reg/mem
16 в стек.
______________________________PUSH reg
16 - Поместить reg
16 в стек.
______________________________PUSH CS - Поместить CS в стек.
______________________________PUSH SS - Поместить SS в стек.
______________________________PUSH DS - Поместить DS в стек.
______________________________PUSH ES - Поместить ES в стек.
Предположим, что регистр
ax содержит
123416 После выполнения
push ax регистр
ax по прежнему будет содержать
123416, но на вершине стека будет лежать значение регистра
ax.
- title Автор: Довгополов Евгений Сергеевич
- .model small
- .stack 100h
- code segment public _______; Начало сегмента кода
- ____assume cs:code
- ____main proc _____________; Начало процедуры main
- ________mov_____al, 1234h _; Копируем значение 1234 в регистр ax
- ________push____ax_________; Ложим значение регистра ax на вершину стека
- ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
- ________int_____21h _______; Вызываем прерывание DOS
- ____main endp _____________; Конец процедуры main
- code ends _________________; Конец сегмента кода
- end main __________________; Конец файла. Точкой входа указывается процедура main
В следующем примере мы положим на вершину стека значение переменной value которое находится в сегменте данных.
- title Автор: Довгополов Евгений Сергеевич
- .model small
- .stack 100h
- data segment public
- ____value dw 1234h
- data ends
- code segment public __________; Начало сегмента кода
- ____assume ds:data, cs:code
- ____main proc ________________; Начало процедуры main
- ________mov_____ax, seg data _; Получаем адрес сегмента памяти данных и сохраняем его в регистре ax
- ________mov_____ds, ax________; Передаём адрес сегмента памяти данных из регистра ax в ds
- ________push____ds:[value]____; Ложим значение переменной value на вершину стека
- ________mov_____ax, 4C00h_____; Копируем значение функции завершения процесса в ah а значение в al
- ________int_____21h __________; Вызываем прерывание DOS
- ____main endp ________________; Конец процедуры main
- code ends ____________________; Конец сегмента кода
- end main _____________________; Конец файла. Точкой входа указывается процедура main