Автор Тема: Кто знаком с синтаксисом at&t? Помогите разобраться?  (Прочитано 3885 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pristavkin

  • Пользователь
  • Сообщений: 13
    • Просмотр профиля
void gbz80_inc(byte* reg)
{
     asm volatile (   
     "movl $0, %1\n"      // load 0 to NFLAG
     
     "incb %2\n"
         
     "lahf\n"             // get flags
     "andb $1,%%bh\n"     // carry not affected
     "andb $0xFE,%%ah\n"
     "orb %%ah, %%bh \n"
     
     : "=b" (flags), "=g" (NFLAG), "=q" (*reg)
     : "2" (*reg), "0" (flags)
     : "cc", "ah"); 
}
Собственно код. Первая часть понятно, а вот вторая
   : "=b" (flags), "=g" (NFLAG), "=q" (*reg)
     : "2" (*reg), "0" (flags)
     : "cc", "ah");
не пойму как это до конца работает.
Может кто-нибудь объяснит, расскажет что всё это значит и как устроено. Спасибо.

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
не ты ли?
http://www.wasm.ru/forum/viewtopic.php?id=34531

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Читать Extended Asm.

копипаста:
Цитата
после первого двоеточия - выходные параметры
после второго - входные параметры
после третьего - список регистров, которые будут использованы (т.е. затерты).

Вариант с интел синтаксисом
typedef unsigned char byte;
extern int NFLAG;
extern unsigned short flags;

void gbz80_inc(byte* reg)
{
  NFLAG = 0;

  __asm mov  eax,reg
  __asm mov  dl,[eax]
  __asm mov  bx,flags

  __asm inc  dl
  __asm lahf
  __asm and  bh,1
  __asm and  ah,0xFE
  __asm or   bh,ah

  __asm mov  flags,bx
  __asm mov  eax,reg
  __asm mov  [eax],dl
}
« Последнее редактирование: 28 Сентябрь 2009, 13:29:24 от Йобан Матич »

Оффлайн pristavkin

  • Пользователь
  • Сообщений: 13
    • Просмотр профиля
Ничего я не понял. Плиз давай те разберём :-\

Добавлено позже:
__asm mov  eax,reg
  __asm mov  dl,[eax]
  __asm mov  bx,flags

  __asm inc  dl = "incb %2\n" // Почему dl? Так и не понял %2. Второй какой то параметр но я его нигде не нашел.
  __asm lahf ="lahf\n" // тут понятно
  __asm and  bh,1 = "andb $1,%%bh\n" // Тут очему то bh. НО параметр записан черещ $ почему-то а не через проценты
  __asm and  ah,0xFE = andb $0xFE,%%ah.// Почему 2 процента
  __asm or   bh,ah = "orb %%ah, %%bh \n" // понятно

"movl $0, %1\n" куда то нолик грузим только не знаюкуда


  __asm mov  flags,bx
  __asm mov  eax,reg
  __asm mov  [eax],dl

: "=b" (flags), "=g" (NFLAG), "=q" (*reg)
     : "2" (*reg), "0" (flags)
     : "cc", "ah");

Тут между этими делами должна зависимость быть на я её не вижу :(

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Re: Кто знаком с синтаксисом at&t? Помогите разоk
« Ответ #3 : 28 Сентябрь 2009, 15:09:14 »
Зачем тебе AT&T если есть пример на intel?
GCC умеет и intel синтаксис понимать.

У AT&T порядок операндов — вначале источник, затем приёмник.

http://ru.wikipedia.org/wiki/AT&T-синтаксис

%eax - регистр
%%eax - переменная
$0x10 - константа
0x10 - адрес
« Последнее редактирование: 28 Сентябрь 2009, 15:13:09 от Йобан Матич »

Оффлайн pristavkin

  • Пользователь
  • Сообщений: 13
    • Просмотр профиля
Вообще нафиг не нужен но просто нужо перенес в инел код. Вот и сижу , пытаюсь понять, втыкаю, что всё то после : значит. Оно ведь там не просто так

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Цитата: pristavkin
после : значит.
Во втором сообщении написано про :

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Цитата
не ты ли?
http://www.wasm.ru/forum/viewtopic.php?id=34531
Цитата
ник: ajak
Всё понятно, Йобан Матич, спасибо за находку ;)

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Вот ещё похожая тема, по ошибке не на ту дал ссылку.
http://www.wasm.ru/forum/viewtopic.php?id=33750

Оффлайн romanich

  • Пользователь
  • Сообщений: 26
  • Пол: Мужской
  • пришёл
    • Просмотр профиля
Вот ещё похожая тема, по ошибке не на ту дал ссылку.
http://www.wasm.ru/forum/viewtopic.php?id=33750

ба! всё те же на манеже ;)