Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> asm code 
:(
    Опции темы
MAKCim
Дата 6.11.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Код

static inline void get(void* tss) {
...
    int value;
    __asm__(
        "pushl   %%eax; \
          pushl   %%ebx; \
          movl    %1, %%eax; \
          andw    $(~0)<<2, 0x4C(%%eax); \
          movl    0x4C(%%eax), %0; \
          popl     %%ebx; \
          popl     %eax" :
        "=b" (value) :
        "b"    (tss)
    );

    value &= 3;

    printk(KERN_INFO "cpl: %d\n", value);      /* Почему выводит 3 а не 0??? */
}


Это сообщение отредактировал(а) MAKCim - 6.11.2006, 14:33


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 6.11.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Ну у меня эта штука вообще не скомпилировалась... в последней инструкции
надо 

Код

popl   %%eax


То бишь, два знака '%'.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 6.11.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



JackYF, 
ну да, когда набирал не посмотрел


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 6.11.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



MAKCim, по тому, что я заметил:
смотри:

1. Инициализации value в функции нет.
2. Ты value подаешь на ввод в регистр EBX, однако в самом асме ты его push и в самом конце pop.
3. Потом снова EBX->value.

То есть, как я понял, значение value после выхода из АСМ может быть любым...
?

Добавлено @ 18:14 
Может ты имел в виду "=a"(value) ?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 6.11.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



JackYF
Код

int value;
    __asm__(
        "pushl   %%eax; \
          pushl   %%ebx; \                   /* Сохраняем значение, потому как идет работа с EBX */
          movl    %1, %%eax; \           /* Через EBX в EAX кладем tss */
          andw    $(~0)<<2, 0x4C(%%eax); \     /* По адресу который записан в EAX, т. е tss, + 0x4C, делаем & с маской, сбрасывающей 2 младших бита в слове */
          movl    0x4C(%%eax), %0; \      /* В value через EBX записываем значение которое получилось на предыдущем шаге */
          popl     %%ebx; \          /* Восстановление */
          popl     %eax" :
        "=b" (value) :
        "b"    (tss)
    );
    value &= 3;    /* Тут в любом случае должен быть 0, т. к у value 2 младших бита сброшены */



Добавлено @ 19:07 
Цитата

1. Инициализации value в функции нет.

инициализация в любом случае в __asm__(...)


Это сообщение отредактировал(а) MAKCim - 6.11.2006, 19:04


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 6.11.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Ты же делаешь "popl     %eax" в конце. У тебя он восстановится таким, каким он был в начале __asm__!

Добавлено @ 19:10 
Код

int value;
    __asm__(
        " pushl   %%ebx; \                   /* Сохраняем значение, потому как идет работа с EBX */
          movl    %1, %%eax; \           /* Через EBX в EAX кладем tss */
          andw    $(~0)<<2, 0x4C(%%eax); \     /* По адресу который записан в EAX, т. е tss, + 0x4C, делаем & с маской, сбрасывающей 2 младших бита в слове */
          movl    0x4C(%%eax), %0; \      /* В value через EBX записываем значение которое получилось на предыдущем шаге */
          popl     %%ebx; "          /* Восстановление */
        "=b" (value) :
        "b"    (tss)
    );
    value &= 3;    /* Тут в любом случае должен быть 0, т. к у value 2 младших бита сброшены */


Попробуй так...

Добавлено @ 19:13 
Нет, стоп, так не пойдет...

Добавлено @ 19:16 
Ага, не так... вроде понял... убери "=b"(value) в конце...:
Код

int value;
    __asm__(
        "pushl   %%eax; \
          pushl   %%ebx; \                   /* Сохраняем значение, потому как идет работа с EBX */
          movl    %1, %%eax; \           /* Через EBX в EAX кладем tss */
          andw    $(~0)<<2, 0x4C(%%eax); \     /* По адресу который записан в EAX, т. е tss, + 0x4C, делаем & с маской, сбрасывающей 2 младших бита в слове */
          movl    0x4C(%%eax), %0; \      /* В value через EBX записываем значение которое получилось на предыдущем шаге */
          popl     %%ebx; \          /* Восстановление */
          popl     %%eax" :
        "0" (value) :
        "b"    (tss)
    );
    value &= 3;    /* Тут в любом случае должен быть 0, т. к у value 2 младших бита сброшены */


Или как-то так...

Это сообщение отредактировал(а) JackYF - 6.11.2006, 19:20


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 6.11.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

Ты же делаешь "popl     %eax" в конце. У тебя он восстановится таким, каким он был в начале __asm__!

так в конце он мне и не нужен
после
Код

movl    0x4C(%%eax), %0;

значение уже должно быть в value
или я туплю


Это сообщение отредактировал(а) MAKCim - 6.11.2006, 19:19


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 6.11.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(JackYF @  6.11.2006,  19:08 Найти цитируемый пост)
Ага, не так... вроде понял... убери "=b"(value) в конце...:

Замени на "0"(value) или типа этого( я точно не помню ).



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 7.11.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

Замени на "0"(value) или типа этого( я точно не помню ).

уж тогда на "1" (value), у tss идентификатор то 1


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0761 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.