а в чём вообще смысл использования этой модели? я засунул эту модель в код, собрал. смотрю, результат вообще ничем не отличается от того, что было до этой модели. т.е. передача аргументов такая же. как и до этого. байт в байт, строка в строку. зачем мне лишние записи в исходнике тогда? может и есть какие то особенности использования этой модели, я об этом не знаю, оно не очевидно и в целом мало полезно.
именно из-за этого стек и уплывает при использовании "pop hl:ex (sp),hl ". я не поленился и для теста поменял пару функций на "это". в результате второй вызов функции привёл к зависанию программы.SDCC юзает для выравнивания стека в подобных случаях INC SP/DEC SP.
эээх. ну понятно. что все аргументы лягут на стек, далее конечно можно и наверно было бы удобнее гонять индексные регистры, однако, переключиться на альтернативный набор регистров религия не позволяет?здесь много параметров, для них явно не хватает регистров общего назначения.
а ты точно проверял как это работает? оно хорошо, когда передать нужно 1 аргумент в 1 байт или 2 байта или два аргумента по 1 байту. как только данных становится больше, чем 2 байта, эта модель перестаёт работать.__z88dk_fastcall, компилятор вообще не будет использовать стек, только регистр L (или пару HL в случае двухбайтового аргумента).
насколько я вижу по коду, эта модель не работает с аргументами, не кратными 2 байтам. 1 лишний байт снимается со стека, из-за этого стек уплывает. всё потому, что компилятор юзает лишние inc sp/dec sp. но про это я уже когда то давно говорил (в сравнении с хайтехом).Только для __z88dk_callee.





Ответить с цитированием