Size: a a a

Ассемблер

2021 August 22

ВВ

Вячеслав Васютин... in Ассемблер
Почему надо? Что, если не сдвинуть?
источник

d

disba1ancer in Ассемблер
если сделаешь вызов функции она перепишет твои переменные
источник

ВВ

Вячеслав Васютин... in Ассемблер
Переполнение буфера будет?
источник

d

disba1ancer in Ассемблер
это не переполнение
источник

E

Entusiast in Ассемблер
Я говорю про x86, для x86_64 - размер адреса - 8 байт, так что да - 8, а не 4
источник

E

Entusiast in Ассемблер
Ну если только переполнение стэка..
источник

ВВ

Вячеслав Васютин... in Ассемблер
А, точно - стэка.
источник

ВВ

Вячеслав Васютин... in Ассемблер
А почему

mov dword[esp], operand

Если в esp нет никакого адресса, и вот, только кидается операнд (указатель на стэк), или в esp всегда находится адресс, и по этому адрессу нужно размещать указатель?
источник

ВВ

Вячеслав Васютин... in Ассемблер
Да и, в регистры же кидаются адресса, а не значения по адрессу...
источник

d

disba1ancer in Ассемблер
дайте человеку уже какое-нибудь хорошее пособие...
источник

ВВ

Вячеслав Васютин... in Ассемблер
)))
Лично для себя я толком ничего не нашел. Нет ничего для новичков, все объясняется в книгах как-то поверхностно, не сильно подробно и не всегда встретишь ответ на вопросы "почему так, а не сяк?", "зачем делать так?" и т.д.🤦‍♂🤷‍♂
источник

E

Entusiast in Ассемблер
Стэк выделяет ОС при запуске программы.
На примере Windows PE поле "SizeOfStackReserve"
"SizeOfStackCommit"
"SizeOfHeapReserve"
"SizeOfHeapCommit"

Если не ОС - выделит процессор. Читай - "машинный стэк"
источник

E

Entusiast in Ассемблер
Да потому что если тебе обьяснять, что да как, и почему - у тебя ещё больше вопросов будет, и так до бесконечности, пока до первой печатной машинки не дойдёшь

Лучше таких вопросов не задавать, и оставаться поверхностно - т.е знать - вот стэк, в него кладутся адреса, мне его выделяют.
Не нужно больше вопросов, это просто сделано для тебя

А вот когда уже знания поднимуться, захочешь поглубже влиться, тогда можешь и задавать вопросы. Но тогда ты вряд ли уже будешь их задавать, у тебя Google будет на автозапуске открываться, или по щелчку))
источник

ВВ

Вячеслав Васютин... in Ассемблер
Ох этот ассемблер... Так все медленно учится...
источник

d

disba1ancer in Ассемблер
если не ОС то ты сам должен сам выделить стек, установив начальное значение esp
источник

ВВ

Вячеслав Васютин... in Ассемблер
Понимается..
источник

E

Entusiast in Ассемблер
И ещё немного примечание:

Регистры названы не просто так.
Тот же ESP - stack pointer
Назвали как раз потому, что создали стэк, и нужно хранить где-то указатель на стэк. Вот тебе и ESP

ECX - counter
Он так же используется jecxz (jump if ecx zero), и loop, а так же многими другими инструкциями, как счётчик - "сколько нужно итераций?"

Тебе нужно ещё почитать про названия регистров - может тоже поможет в понимании
источник

ВВ

Вячеслав Васютин... in Ассемблер
А... Я стэк еще и выделять должен.. Теперь картина, хоть, пояснее
источник

ВВ

Вячеслав Васютин... in Ассемблер
Может. Я читал, но так и не понял, просто запомнил их, как просто регистры для процессора, так как мне сложно понять их на словах..
источник

E

Entusiast in Ассемблер
Да хоть два стэка можешь сделать!

stack_end: db 1024 dup(0)
stack_start:

mov ebp, esp

mov esp, stack_start
push eax
pop eax

mov esp, ebp
push eax
pop eax
источник