Comments 14
Автор, это, скорее всего, не стэк, а стек (см. https://ru.m.wikipedia.org/wiki/Стек ). Подумайте об этом, выходя из мэтро на пэррон.
Бывает expand down стек на i386, прикольная штука — «стек наоборот».
Про выравнивание данных на стеке можно упомянуть, когда это надо и зачем.
Про особенности стека при прерываниях и исключениях процессора.
Да и команд еще куча есть для работы со стеком, например pusha/popa.
Почему в x86 push sp сначала работал одним образом, а потом стал другим нарушив совместимость.
ну и т.д.
Да, вы абсолютно правы, в статье нет упоминания про expand up стек, про то, как ведёт себя стек при каких-либо исключениях процессора и много чего ещё, к сожалению
Изначально казалось, что статья будет необоснованно большой, если начать писать про все команды, влияющие на поведение стека, такие как pusha/popa, pushad/popad, pushf/popf и многие другие, а также при расписывании всех EFLAGS, которые могут быть затронуты при операциях на стеке, хотя про совместимость инструкций push sp я однозначно дополню статью, остальные замечания, лучше, думаю, будет описать во второй части статьи, т.к., действительно, я о многом не рассказал, что касается стека i386, в данной статье.
Спасибо за замечание!
Ошибочка в коде
pushl %ebp
pushl %esp, %ebp
Надо
pushl %ebp
movl %esp, %ebp
Как видно из Рисунка 1, при помещении чего-либо на стек, он увеличивается вниз.
Это не видно из рисунка. На рисунке не обозначены адреса.
"и записывает записывает помещаемое значение" - очепятка
Спасибо за статью.
Было бы здорово увидеть итоговый, полный код файла args.s , например на GitHub. Человек со стороны как я, на простой "запятой" сможет споткнуться и ничего не получить.
И было бы особенно полезным посмотреть на исполнения из gdb, состояние стека, регистров или т.п.
Да, соглашусь насчёт того, что стоило бы показать исполнение прогаммы из gdb или другого дебагера, подумаю над дополнением статьи
А ссылка на исходный код указана в заключении под номером 9, на всякий случай продублирую здесь
Исходный код на GitHub с небольшими изменениями - https://github.com/d0wnFvll/x86-asm-argv/blob/main/args.S
Устройство Стека для Intel386