ХАНДЫФАР

Поместить регистр или ячейку памяти в стек

______________________________PUSH reg/mem16 - Поместить reg/mem16 в стек.
______________________________PUSH reg16 - Поместить reg16 в стек.
______________________________PUSH CS - Поместить CS в стек.
______________________________PUSH SS - Поместить SS в стек.
______________________________PUSH DS - Поместить DS в стек.
______________________________PUSH ES - Поместить ES в стек.

Предположим, что регистр ax содержит 123416 После выполнения push ax регистр ax по прежнему будет содержать 123416, но на вершине стека будет лежать значение регистра ax.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public _______; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc _____________; Начало процедуры main
  7. ________mov_____al, 1234h _; Копируем значение 1234 в регистр ax
  8. ________push____ax_________; Ложим значение регистра ax на вершину стека
  9. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  10. ________int_____21h _______; Вызываем прерывание DOS
  11. ____main endp _____________; Конец процедуры main
  12. code ends _________________; Конец сегмента кода
  13. end main __________________; Конец файла. Точкой входа указывается процедура main

В следующем примере мы положим на вершину стека значение переменной value которое находится в сегменте данных.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____value dw 1234h
  6. data ends
  7. code segment public __________; Начало сегмента кода
  8. ____assume ds:data, cs:code
  9. ____main proc ________________; Начало процедуры main
  10. ________mov_____ax, seg data _; Получаем адрес сегмента памяти данных и сохраняем его в регистре ax
  11. ________mov_____ds, ax________; Передаём адрес сегмента памяти данных из регистра ax в ds
  12. ________push____ds:[value]____; Ложим значение переменной value на вершину стека
  13. ________mov_____ax, 4C00h_____; Копируем значение функции завершения процесса в ah а значение в al
  14. ________int_____21h __________; Вызываем прерывание DOS
  15. ____main endp ________________; Конец процедуры main
  16. code ends ____________________; Конец сегмента кода
  17. end main _____________________; Конец файла. Точкой входа указывается процедура main



Made on
Tilda