Когда я выскакиваю из стека, значение удаляется; почему?

# #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: Не достоверно, нет. Так что просто не создавайте свою программу таким образом. Не извлекайте значение из стека и не увеличивайте указатель стека мимо него до тех пор, пока вам больше не понадобится это значение.