![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 29.12.2010
Сообщений: 3
|
![]()
Я создал загрузчик (asm), который загружает ядро (Си) по адресу в памяти. Реальный режим. Проблема со стеком. Если параметры функции, вызываемой в ядре, передаются через регистры, все ок. Но если нет - через стек - например, переменное количество аргументов, все летит. Как инициализировать стек? Куда должны указывать регистры? Спасибо.
Вот kernel.c. В qemu код ничего не выводит, и выводит 'S', если '...' заменить на 'int x'. Отличие в передаче параметров через стек, как видно в ассемблерном коде. Код:
Код:
Код:
Последний раз редактировалось kuraga1991; 29.12.2010 в 11:14. |
![]() |
![]() |
![]() |
#2 |
Регистрация: 29.12.2010
Сообщений: 3
|
![]()
Я вот че понял: все правильно, он берет смещения переменных от начала какого-то сегмента... Какого? Я просто привык, что мы пишем ASSUME, а GCC такого не пишет... Или это на linux всегда так? Так вот: базирование .LC0 ведь идет по DS? А кто его устанавливает? Сейчас - я, причем абсолютно неправильно!!! А как GCC формирует сегменты? Один сегмент данных или как? Как получить его адрес, и почему он не записывается в DS? И где сегмент стека, какой из указанных опций я его отключил?
Ответьте, пожалуйста, и простите за тупые вопросы! ![]() Вот ассемблерный код kernel.c: Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Стек | Anabella | Помощь студентам | 1 | 20.06.2010 21:01 |
C++ Стек | phantom4eg | Помощь студентам | 0 | 31.05.2010 01:16 |
Стек | [ICQ] | Помощь студентам | 5 | 02.05.2010 13:44 |
C++ и стек | MaGWaY_minsk | Помощь студентам | 1 | 14.12.2009 13:09 |
Стек | lucky | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 12.05.2009 18:35 |