консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написано, спустя некоторое время сама закрывается, несмотря на invoke getch и invoke ExitProcess,0 в конце метки.)
mov eax, 6
invoke printf, eax
Собственно, а в чём дело ?
cinvoke printf, '%d', eax
прочитайте параметры функции printf, и какое она имеет соглашение о вызовах
Можно ссылку на ресурс ?
Зачем , так тоже можно и я так делал
Просто... Я буквально день назад решил учить ассемблер и пока из моих источников информации пара страниц под строкой поиска гугла.
mov dword ptr esp, msg_2 mov dword ptr esp, msg_1 push frmt call ptr printf add esp,4*3я вообще так писал
не, лучше так mov ebp,esp mov esp,p jmp printf q: mov esp,ebp ... p dd q,frmt,msg_1,msg_2
Чёт ничего не поменялось
А обязательно регистр использовать, не пойдет метка там?
Я экспериментирую, пытаюсь понять, чё можно, а чё нет
почему
Потому что локальные переменные.
точно, исправил
Он хотел скоротать push, проложив сразу формат стека с аргументами, но забыл, что у функции есть локальные переменные.
А теперь ты не скоротал push, а даже сделал намного хуже. Теперь код бесполезный.
зато производительность на высоте
Ты хочешь при каждом вызове функции самому создавать ей ещё и кадр стека? Зачем? Не говоря уже о том, что не каждой функции он нужен
На 0, оно не будет работать при вызове стандартных функций
В пределах Hello World - возможно, но никто не будет качать твой бинарник весом 2 гигабайта, потому что ты не умеешь узнавать размер локальных переменных внутри функции, и решил просто выделить под каждый такой формат статический стек по 66666... двойных слов.
Обсуждают сегодня