Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.08.2022
Сообщений: 4
1

В каких случаях можно обойтись одним add esp ?

14.08.2022, 21:20. Показов 1177. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте, подскажите в каких случаях можно обойтись одним add esp
например
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mov     [ebp+var_5C], eax
mov     eax, [ebp+var_18]
push    eax
mov     eax, [ebp+var_68]
push    eax
call    sub_4025D6
add     esp, 8 <--------------
mov     [ebp+var_14], eax
mov     eax, [ebp+var_18]
push    eax
mov     eax, [ebp+var_68]
push    eax
call    sub_403AF8
add     esp, 8 <--------------
в каком случае можно поставить после последней процедуры один add esp, 10 вместо двух после каждой процедуры?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2022, 21:20
Ответы с готовыми решениями:

В каких случаях нельзя обойтись без событий?
В каких случаях нельзя обойтись без событий, либо это очень сложно ? Для чего их вообще применяют ?...

В каких случаях стоит хранить значения в стейте компоненты, а в каких случаях в инстансе?
Вопрос по собеседованию React. В каких случаях стоит хранить значения в стейте компоненты, а в...

Почему в php в некоторых случаях можно обойтись без кавычек?
Никогда не думал в каких случаях можно обходиться без кавычек. Но недавно наткнулся на интересный...

Можно ли одним Recordset'oм обойтись ?
Клон это понятно, фишка в том, что можно ли одним Recordset'oм обойтись ?

3
Модератор
Эксперт по электронике
8477 / 4335 / 1643
Регистрация: 01.02.2015
Сообщений: 13,462
Записей в блоге: 8
14.08.2022, 23:02 2
В том случае - когда самостоятельно пишите программу на ассемблере и задаётесь целью сократить код в том числе и такими трюками.

Кстати, для программ x64 Windows принято соглашение, а также разработаны макросы для компиляторов, когда стек выделяется сразу для всех вызываемых подпрограмм, а параметры в стек помещаются не push, а mov, т.к. сам указатель стека esp остаётся неизменным (в пределах данного уровня вложенности кода).
Не совсем как в примере, но отдалённо похоже
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
push rbp
mov rbp, rsp
sub rsp, 28h
 
mov [rbp-8h], 123h    <---- параметр в стек
mov [rbp-16h], 123456h <---- параметр в стек
call sub_001
 
mov [rbp-8h], 123h    <---- параметр в стек
mov [rbp-10h], 123456h <---- параметр в стек
mov [rbp-18h], 789h <---- параметр в стек
call sub_002
 
add rsp, 28h
pop rbp
0
0 / 0 / 0
Регистрация: 14.08.2022
Сообщений: 4
14.08.2022, 23:26  [ТС] 3
т.е. я это могу сделать без последствий?
в данном случае я смотрю старую программу и хочу освободить чуток места, чтобы добавить нужную мне команду
встречал ранее объединенные esp от разных процедур, но это было не у всех процедур, а у конкретных, например, у часто выводящих текст, преобразующие string в целое итд
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
15.08.2022, 10:08 4
Лучший ответ Сообщение было отмечено nikqz как решение

Решение

В целом можно и так:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mov     [ebp+var_5C], eax
mov     eax, [ebp+var_18]
push    eax
mov     eax, [ebp+var_68]
push    eax
call    sub_4025D6
;add     esp, 8 <-------------- не надо
mov     [ebp+var_14], eax
mov     eax, [ebp+var_18]
push    eax
mov     eax, [ebp+var_68]
push    eax
call    sub_403AF8
add     esp, 16 <--------------
Просто будет чуть больше стека использоваться, что некритично.

Добавлено через 1 минуту
Если бы передавался 1 параметр (а не 2), можно было бы вместо каждого add esp, 4 сделать pop eax (или pop edx, если в eax нужно вернуть результат функции). Будет по 1 байту (итого 2), вместо 3-х.
1
15.08.2022, 10:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2022, 10:08
Помогаю со студенческими работами здесь

Можно ли обойтись одним запросом
Добрый вечер, помогите дописать sql , и можно ли уложится одним как-то запросом ... SELECT...

В каких случаях можно получить символьное решение дифф. уравнения
В каких случаях в MATHCAD можно получить символьное решение дифф. уравнения?

В каких случаях можно заменить break на continue и наоборот и при этом результат не меняется?
Вопрос: В каких случаях можно заменить break на continue и наоборот при этом результат не меняется.

В каких случаях использовать обращение self::, а в каких $this. В чём разница между ними?
Привет! Сейчас пишу регистрацию в стиле ооп. Пишу функцию __construct в классе Registration...

В каких случаях уместно применять F-критерий, а в каких - эмпирическое корреляционное отношение?
Дисперсионный анализ Доброго времени суток! Подскажите, пожалуйста, в каких случаях уместно...

В каких случаях надо создавать индексы к полям, а в каких - нет?
Не могу понять, в каком случае надо создовать индексы к полям а вкаких нет. если надо, то в каком...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru