# #assembly #x86 #x86-16 #stack-memory
Вопрос:
; SP is at 0100h
mov ax, 1234h
push ax
pop ax
sub sp, 2
Значение in SS:00FE
больше не составляет 1234 часа. Он стал 3302h. Почему это происходит?
Даже без sub sp, 2
инструкции, просто прокрутите вниз до SS:00FE
, это 3302 часа.
После push ax
, SP
= 00
часов После pop ax
, SP
= 0100 часов
После sub sp, 2
, SP
= 00 часов после
Ответ №1:
Значение ниже стека at SS:SP-2
не удаляется, но в ближайшее время оно может быть перезаписано другим процессом. В режиме реального процессора стек совместно используется с прерываниями и другими потоками процессора, работающими одновременно, например, отладчиком. Всякий раз, когда вы нажимаете клавишу для прокрутки вниз, процессор будет нажимать флаги, CS и IP в вашем стеке, перезаписывая предыдущее значение 1234
.
Комментарии:
1. итак, после pop я больше не могу получить значение из стека по адресу, который я нажимал раньше ? после того , как процессор сделает sp = sp 2 (после pop), мы не можем вернуться ? и получите ценность ?
2. @salayivany: Не достоверно, нет. Так что просто не создавайте свою программу таким образом. Не извлекайте значение из стека и не увеличивайте указатель стека мимо него до тех пор, пока вам больше не понадобится это значение.