169 похожих чатов

А с каким компилятором не будет ошибкой использовать асм вставки?

14 ответов

65 просмотров

FPC умеет так )

Ассемблерные вставки это сама по себе и есть ошибка. Ты видишь в коде func(arg1), и думаешь, что это указатель. А на деле компилятор передаёт его в стек, или ещё куда-то (в зависимости от температуры и УФ-индекса), и весь твой код ломается, ломается и ещё раз ломается. Писать нужно весь код только на ассемблере, тогда будешь понимать, что у тебя происходит.

Вот, например: myfunc: Ты указатель в стек передал, смог бы ты тут написать lea eax, dword[esp+4] чисто логически? Сомневаюсь, такой ошибки ты бы никогда не сделал. ret callfunc: push arg1 call myfunc add esp, 4 ret

КТ315
Вот, например: myfunc: Ты указатель в стек переда...

Типа возврат из функции адреса аргумента?) ахахахаха

The Bird of Hermes
Типа возврат из функции адреса аргумента?) ахахаха...

Нет, типа в коде выше он затёр стек, думая что компилятор ему даёт указатель, а на самом деле в функции он ему даёт смещение внутри стека. Он сделал lea eax, myvar Думая, что у него там указатель, а на деле компилятор ему сделал lea eax, dword[esp+N], и он затёр весь стек.

КТ315
Нет, типа в коде выше он затёр стек, думая что ком...

Это даже сформулировать тяжело... Видишь одно, а компилятор делает другое. Как так писать можно вообще? Зачем мешать ассемблер со всякой хернёй...

КТ315
Нет, типа в коде выше он затёр стек, думая что ком...

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

The Bird of Hermes
Ну тут надо просто помнить, чем являются аргументы...

Чем являются аргументы в С* и локальные переменные в С* и как ведёт себя С-компилятор* и как он захочет сгенерировать код*

КТ315
Чем являются аргументы в С* и локальные переменные...

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

purebasic

КТ315
Нет, типа в коде выше он затёр стек, думая что ком...

если не думать, а знать, то всех этих ошибок можно избежать

Aiwan \ (•◡•) / _bot
если не думать, а знать, то всех этих ошибок можно...

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

Как и суть какого-либо знания вообще

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта