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

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

14 ответов

33 просмотра

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
если не думать, а знать, то всех этих ошибок можно...

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

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

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

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

Кто нибудь из участников чата пишет на ассемблере под GNU/Linux?
Spiker01
24
анрей С какой целью зашёл?
КТ315
42
я часов 15 назад начал пытаться написать хоть что-то напоминающее ос и у меня есть проблема, которую я пытаюсь решить последние часов 5: есть крч 2 исходника с минимальным код...
Al1to
15
Я не очень много работал с потоками, тут возник вопрос - если будет одновременный доступ к памяти из двух разных потоков, это само по себе приведет к ошибке?
The Bird of Hermes
25
Слушайте, никак не могу заставить работать сортировку в TClientDataSet! Вроде все делаю правильно, создаю индекс, присваиваю его название ClientDataSet1.IndexName, первый раз...
Ivan Burnatov
7
а вот интересный вопрос появляется: допустим у нас есть приложение с системой модулей. Будет ли считаться система модуль+прога ассемблерной программой если: а) Прога на Си, м...
Mixail Frolov
29
я в заголовке имплементировал функцию. В заголовке стоят гарды. Но я все равно получаю multiple definitions. Как это может происходить?
Павλо 🇺🇦
15
как можно вывести первые 100 символов поля content на странице?
Artem
10
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Может кто встречал такое? Один набор данных, но в одном столбце кодировка нормальная, а в другом ироглифы. Как такое может быть?
Alexander
23
Карта сайта