> man operating_systems
Центр информации по операционным системам :: Форумы :: Программирование :: Низкоуровневое программирование
 
<< Предыдущая тема | Следующая тема >>
Конвенция C и внешние статические переменные
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
nnivanov
Среда 13.04.2005 02:43

ID пользователя #253
Зарегистрирован: Вторник 29.03.2005 01:18
Местонахождение: Russia, Velikiy Novgorod
Сообщений: 123
Всем привет!

До сих пор я стыковал ассемблерные и C-модули следующим образом:

-- C module --------
...
static int i;
...
function (i);
...
--------------------------

-- ASM module ---
...
function:
pushl %ebp
movl %esp, %ebp

/* functon's body */

popl %ebp
ret
...
---------------------------

Все работает нормально. Но стековые переменные в C-модулях в некоторых случаях cъедаются вызовами функций, приходится использовать статические. Сейчас я решил навсегда покончить со статическими переменными во всех модулях. Подскажите пожалуйста, где скрывается ошибка или посоветуйте, где мне найти полную документацию по C-конвенции передачи параметров.

Спасибо.

- Зачем мотоциклу реактивный двигатель?
- Да потому что нам так нравится!
Discovery Channel
Наверх
Сайт
Dron
Среда 13.04.2005 10:45


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Не понял зачем такие проблемы....
Зачем вообще со статическими переменными связываться? чем через стек плохо?

Там все просто...
Вот к примеру есть функция
func (a, b, c, d)

на асме это выглядит так:
push d
push c
push b
push a
call func
add esp, 16

Ну я пишу в интель синтаксисе, смысл главное.

При этом в функции надо еще учесть поле на адрес возврата.

соответственно в функции получается
esp + 0 - адрес возврата
esp + 4 - a
esp + 8 - b
esp + 12 - c
esp + 16 - d

то есть в принципе ebp использовать вовсе не обязательно. главное чтобы описанное выше было справедливо.

Но если используешь ebp, то все смещения увеличиваются еще на 4.

Ничего не съедается...

Одну из двух вечных российских проблем можно, в принципе, решить с помощью асфальтоукладчиков и катков. А вот с дорогами, конечно, будет труднее...

Андрей Валяев
Наверх
Сайт
nnivanov
Четверг 14.04.2005 01:02

ID пользователя #253
Зарегистрирован: Вторник 29.03.2005 01:18
Местонахождение: Russia, Velikiy Novgorod
Сообщений: 123
2Dron: В том и беда, что все так и делаю, только вот вызываемая (ассемблерная) функция съедает (особенно в циклах) стековые переменные вызывающей функции. Отладчик дает лишь тугое представление о том, что я как-то не так работаю со стеком. Если не секрет, напиши для сравнения базу, лимит и начальное значение esp стека твоего ядра.

- Зачем мотоциклу реактивный двигатель?
- Да потому что нам так нравится!
Discovery Channel
Наверх
Сайт
nnivanov
Четверг 14.04.2005 03:07

ID пользователя #253
Зарегистрирован: Вторник 29.03.2005 01:18
Местонахождение: Russia, Velikiy Novgorod
Сообщений: 123
Проблема решена. Это моя ошибка в gdt (даже смешно!). Приношу свои извинения, что напрасно потревожил.

- Зачем мотоциклу реактивный двигатель?
- Да потому что нам так нравится!
Discovery Channel
Наверх
Сайт
Dron
Четверг 14.04.2005 10:28


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Да не за что... для того и служит форум... чтобы люди помогали друг другу.

PS: Это сообщение не несет смысловой нагрузки и предназначено лишь для скорейшего достижения первого места в списке флудеров.

Одну из двух вечных российских проблем можно, в принципе, решить с помощью асфальтоукладчиков и катков. А вот с дорогами, конечно, будет труднее...

Андрей Валяев
Наверх
Сайт
 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.