Что происходит при выполнении стековых команд PUSH AX и POP DX?
Пожалуйста, объясните на пальцах ситуацию в памяти до и после выполнения стековых команд PUSH AX и POP DX, и что происходит с участвующими в этом регистрах.
Например, есть исходные данные: SP=0010h, DS=0011h, DI=0022h, AX=0033h, BX=0044h, DX=0055h, SI=0066h (цифры взяты для красоты). Что и куда сдвигается при PUSH AX и POP DX?
По идее, при PUSH AX значение SP уменьшается на 2, а при POP DX значение SP увеличивается на 2, но что происходит с остальными регистрами, куда записывается полученное значение SP?
Спасибо за ответ! Но, пожалуйста, можете уточнить:
При команде PUSH AX меняется значение только у SP? Ведь SP же на два уменьшается, да? А в этом случае значение SP в AX не переходит? То есть, для наглядности, было SP=0010h, стало SP=0008h, не нужно ли полученное значение толкать в AX?
При команде POP DX при SP=0010h, к значению SP прибавляем 2 - получаем SP=0012h и вот это вот полученное значение помещаем в DX. Я правильно думаю?
Rsa97, а, простите, если не затруднит, вы не могли бы подсказать ресурсы, где можно подробней об этом почитать? Хотелось бы лучше понять все эти стековые команды, регистры и с чем их едят, но, к сожалению, не знаю, за что хвататься...
Rsa97, в любом случае, спасибо!
И ещё раз уточнить по изначальному вопросу:
Вот есть такие данные: SP=0324h, DS=4302h, DI=0073h, AX=4852h, BX=3010h, DX=0000h, SI=0071h.
При PUSH AX:
SP = SP - 2 = 0324h - 2 = 0322h - полученное значение записывается в SP и больше ничего не меняется (меняется только SP).
При POP DX:
SP = SP + 2 = 0324h + 2 = 0326h - полученное значение переходит в DX (и теперь DX = 0326h). Но что остаётся в SP в таком случае?
Извиняюсь за, может быть, дурацкие вопросы, но они покоя не дают.
Narsn, для intel существует официальный intel developer manual, рекомендую. Часть 1 описывает прикладное программирование, часть 2 -- каждую инструкцию, часть 3 -- системное программирование.