Программирование на ассемблере: почему аргументы функции всегда находятся в памяти? - PullRequest
0 голосов
/ 15 февраля 2012

Я новичок в программировании на ассемблере, и мне было интересно, почему адрес переменной всегда помещается в стек вместо фактической переменной. Например:

.text:00401270 push ebp

.text:00401271 mov ebp, esp

.text:00401273 sub esp, 80h

.text:00401279 push offset aString1

.text:0040127E call sub_401554

Почему фактическая переменная никогда не выдвигается в качестве аргумента?

1 Ответ

2 голосов
/ 15 февраля 2012

Не все аргументы «функции» обязательно передаются по ссылке, но ваш пример - строка, которая передается по ссылке из-за того, что ее переменный размер не подходит для стека.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...