Соответствует ли стек также соглашению о малых порядках в сборке?

#assembly #x86

#сборка #x86

Вопрос:

Я изучаю сборку (x86 NASM) в университете. Излишне говорить, что я крайне смущен и мало что понимаю. Мы недавно узнали о литтл-энде, так что мы в самом начале.

Во время лекции наш профессор сказал, что мы должны быть осторожны при работе со стеком, мы должны помнить о литтл-энде. Я действительно не понимаю, почему это так. Мой вопрос: соответствует ли стек также соглашению о малых порядках? Я попытался увидеть это в отладчике, и, судя по тому, что я увидел, я думаю, что стек на самом деле не соответствует соглашению о младшем конце, что для меня не имеет смысла, я ожидал, что стек также будет в младшем конце, как и шестнадцатеричный дамп. Я надеюсь, что следующий пример может проиллюстрировать, что я имею в виду:

  1. Допустим, я помещаю в регистр EAX значение 12345678h . Он сохраняется так же, как я его написал, т. Е. Он сохраняется как 12345678 . Таким образом, он не сохраняется с использованием соглашения о младшем конце. Здесь нет ничего удивительного, я ожидал этого.

введите описание изображения здесь

  1. Вот мое замешательство. Теперь я поместил значение из регистра EAX в стек. Я полностью ожидал, что он будет сохранен с использованием соглашения о малых порядках. Поэтому я ожидал, что он будет сохранен в стеке как 78563412 , но, к моему удивлению, он хранится не так. Он хранится точно так же, как он хранится в регистре EAX , поэтому я склонен полагать, что стек не соответствует соглашению о малых порядках.

введите описание изображения здесь

  1. Просто чтобы вернуть себе немного здравомыслия, я также переместил значение регистра EAX в dword переменную с именем a . Это действительно было сохранено в литтл-энде. Здесь тоже нет ничего удивительного, я полностью ожидал этого.

введите описание изображения здесь

Итак, вы видите, моя проблема в пункте (2) из приведенного выше. Почему значение регистра не сохраняется в стеке с использованием соглашения о младшем конце? Это то, чего я на самом деле ожидал. Могу ли я сделать вывод, что стек не соответствует соглашению о младшем конце? Если да, то что имел в виду мой профессор, когда сказал, что нам нужно помнить о литтл-энде при работе со стеком?

Комментарии:

1. Дамп стека с правой стороны уже отменяет младший конец, чтобы вы были более удобочитаемыми. Это особенность вашего отладчика. Если вы посмотрите на дамп байтов так же, как вы это делали для раздела данных, все будет в порядке.

2. Перейдите в ячейку памяти 19FF70 и проверьте, она будет в младшем конце.

3. @Jester Ооооо, я вижу. Это имеет смысл, я просто не знал, что стек автоматически отменяет младший конец. Большое вам спасибо!

4. @tkausl Да, теперь я понял. Большое спасибо!