Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 07:12   #1
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию Препроцессор. Расшифровка

Приветствую:
В интернете наткнулся на следующий макрос:
Код:
#define IRQ_HANDLER(func) void func (void);\
 asm(#func ": pusha \n call _" #func " \n movb $0x20, %al \n outb %al,$0x20 \n popa \n iret \n");\
 void _## func(void)
Как я понял, при написании следующего кода:
Код:
IRQ_HANDLER(func)
{
    print("Hello");
}
Макрос создаст две функции:
первая func(), содержит следующий код на асме:
Код:
pusha
call _func
movb $0x20, %al
outb %al, $0x20
popa
iret
и вторую функцию _func():
Код:
void _func()
{
print("hello");
}
А теперь вопрос:
почему не работает такой код:
Код:
void func()
{
        asm("pusha");

        print("hello");

	asm("movb $0x20,%al");
	asm("outb %al, $0x20");
	asm("popa");
	asm("iret"); 
}
Вроде бы это тот же самый, что и с макросом, но без второй функции(т.е. они объединены)

ЗЫ это обработчик прерывания для защищенного режима
Sna1L вне форума Ответить с цитированием
Старый 11.03.2012, 09:52   #2
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

возможно асм код надо так писать..
Код:
_asm{

code;

}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 12.03.2012, 12:11   #3
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

Неужели нет продвинутых Сишников?
Я конечно могу и макросом пользоваться, но мне интересно что за ошибку я допустил
Sna1L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Препроцессор Delphi Warn Общие вопросы Delphi 3 19.12.2011 20:46
Препроцессор: определение длины строки Пепел Феникса Общие вопросы C/C++ 11 10.02.2011 21:20
Расшифровка MD5 Skynet91 Общие вопросы C/C++ 1 24.07.2010 11:09
C++, препроцессор, как из "int" сделать "char"? Максай Помощь студентам 3 05.09.2008 08:16