О команде bswap...

Тема в разделе "LANGS.C", создана пользователем Praetor11, 15 окт 2009.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Маловато будет (с)
     
  2. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    Код (Text):
    1. asm ("bswap %1" : "=r" (i) : "0" (i));
    Есссс..! Спасибо вам. Это работает! Я не знаю как устроено это но главное что оно работает. А ту статью про asm я ещё прочитаю, но думаю мне это пока не нужно.

    Код (Text):
    1. 5. Extended Asm.
    2. http://www.ibiblio.org/gferg/ldp/GCC-In … HOWTO.html
    Спасибо конечно, но мой английский пока не настолько высок, чтобы читать документацию. Всем ответившим огромное спасибо, считаю что ответ получен и тему можно закрыть.
     
  3. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    Спасибо за статью. Жаль, что там так мало про AT&T асм, хотелось бы больше. Теперь я понял что означают эти двоеточия, и %% перед регистрами, однако неясно почему именно "=r", ведь больше нигде эта r не встречается. Также у вас написано что номера входных/выходных операндов, обозначаются префикосм %, но как отличить %0 входного операнда от %0 выходного операнда. И что за список используемых регистров такой. Хоть отдельную тему создавать(
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    По поводу r и =r:
    r - так описывается входной операнд\ы
    =r - так описывается выходной операнд\ы
    Входной от выходного операнда как вы уже поняли отличается перфиксом "=" в перечне выходных операндов
    При перечислении операндов они нумеруются от первого выходного до последнего входного по порядку.
    Код (Text):
    1. :"=r"(x) ;%0
    2. :"r"(x) ,"r"(y) ;%1, %2
    3. :"%eax", "%ebx"
    Именование играет роль. r - обычно любой регистр, но обязанный быть перечисленным в 3 строчке ниже. (вы так же можете написать вместо r что угодно). Но если написать "a" то в перечне регистр можно не указывать - это будет регистр %eax. Об э том говорится в той статье на английском.
    Скопирую оттуда зарезервированный перечень:
    Код (Text):
    1. +---+--------------------+
    2. | r   |    Register(s)          |
    3. +---+--------------------+
    4. | a |   %eax, %ax, %al     |
    5. | b |   %ebx, %bx, %bl     |
    6. | c |   %ecx, %cx, %cl     |
    7. | d |   %edx, %dx, %dl     |
    8. | S |   %esi, %si             |
    9. | D |   %edi, %di             |
    10. +---+--------------------+
    А зачем нужен список регистров - так как раз за тем что ваши переменные использовать в коде. По сути компилятор присваивает значение переменной регистру, и наоборот. В зависимости от действия.
    Ну примерно так. Поправьте, если не прав.
     
  5. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    Спасибо за отличное описание! А у вас есть ещё статью про АСМ синтаксиса АТиТ? Я бы с радостью почитал..