#define F (*(void(*)(int,int,int)) 0x10000)
F(1,2,3);
тоесть вызывается функция с тремя параметрами, возвращающая ничего по адресу 0x10000
а как сделать переход на си по определённому адресу?
Тебя интересует 16-битный или 32-битный режим? Если речь идёт о ваткомовской флат-модели, то тебе надо перейти внутри 4-гигабайтного сегмента программы или наружу? Наружу сильно сложнее как я понимаю, но в крайнем случае можно на встроенном асме что-то воткнуть...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Shaos wrote:
Тебя интересует 16-битный или 32-битный режим? Если речь идёт о ваткомовской флат-модели, то тебе надо перейти внутри 4-гигабайтного сегмента программы или наружу? Наружу сильно сложнее как я понимаю, но в крайнем случае можно на встроенном асме что-то воткнуть...
Нет, тут речь идёт о физическом адресе:) Как на сях организовать переход? (без асм-вставок)
Romanich wrote:Ну допустим мне надо осуществить переход внутри сегмента 4Гб
Хм, в ваткоме goto требует только имя и такая метка может быть только в пределах видимости... А зачем тебе такие проивзольные переходы? Допустим в микроконтроллерах их можно себе представить, а в PC зачем?
Я тут за главного - если что шлите мыло на me собака shaos точка net
Shaos wrote:
А зачем тебе такие проивзольные переходы? Допустим в микроконтроллерах их можно себе представить, а в PC зачем?
Для написания загрузчиков в контроллерах!
Известен начальный адрес загрузчика, адрес приложения выбирается.
Загрузчик должен с UART'а считать код и записать его в память микроллера. И передать коду управление. Поставщик кода - Вин32 прога
У меня пока всё работает с вызовом функции кода, в идеале нужен переход на фрагмент кода - тоесть возврата не будет(да и стек экономится
Shaos wrote:
А зачем тебе такие проивзольные переходы? Допустим в микроконтроллерах их можно себе представить, а в PC зачем?
Для написания загрузчиков в контроллерах!
Известен начальный адрес загрузчика, адрес приложения выбирается.
Загрузчик должен с UART'а считать код и записать его в память микроллера. И передать коду управление. Поставщик кода - Вин32 прога
У меня пока всё работает с вызовом функции кода, в идеале нужен переход на фрагмент кода - тоесть возврата не будет(да и стек экономится
Ну вызови функцию и не делай return - делов то
Я тут за главного - если что шлите мыло на me собака shaos точка net
Shaos wrote:
Ну вызови функцию и не делай return - делов то
при вызове функции без праметров в стек заносится адрес возврата. Меня жаба давит, что стек незначительно, но расходуется. Даже если перетру его настройкой сегментов - грязно это!
Shaos wrote:
Ну вызови функцию и не делай return - делов то
при вызове функции без праметров в стек заносится адрес возврата. Меня жаба давит, что стек незначительно, но расходуется. Даже если перетру его настройкой сегментов - грязно это!
Если у тебя PC, то 4 байта - фигня
Я тут за главного - если что шлите мыло на me собака shaos точка net
Romanich wrote:
а как сделать переход на си по определённому адресу?
читай внимательно документацию на компилятор. в стандарте, по-моему, такого нету. а вот в компиляторе -- может и есть. по-крайней мере, gcc умеет адреса меток в указатели складывать, и наверное это значит, что можно адрес в goto использовать.
Shaos wrote:
Ну вызови функцию и не делай return - делов то
при вызове функции без праметров в стек заносится адрес возврата. Меня жаба давит, что стек незначительно, но расходуется. Даже если перетру его настройкой сегментов - грязно это!
Берёшь gcc (avr-gcc или arm-elf-gcc).
1. Как на С перейти по произвольному адресу :
((void (*)())(0x1000))(); - переходит по адресу 0x1000.