Синтаксис AT&T

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Синтаксис AT&T або AT&T-синтаксис — один з форматів запису мнемоніки інструкцій процесора.

Особливості[ред. | ред. код]

Відмінності AT&T-асемблера (gas) від Intel-асемблера (MASM, TASM, FASM, NASM):

  • Коментар починається зі знака "#", а не ";"; у свою чергу знак ";" відокремлює команди і дозволяє записувати декілька команд в одному рядку.
  • Відсутність префікса операнда вказує на адресу в пам'яті; тому movl foo,%eax поміщає адресу змінної foo в регістр %eax, а movl $foo,%eax поміщає в %eax вміст змінної foo.
  • Назви регістрів починаються зі знака %, тобто %eax, %dl, замість eax, dl тощо. Це дозволяє включати в код зовнішні змінні C, не побоюючись помилок і не використовуючи префіксів з підкресленнями (_). Наприклад:

%eax, %ebx, %ecx, %edx

  • Розмір операнда визначається суфіксом інструкції. Суфікси:
    • b (від byte) — операнди розміром 1 байт
    • w (від word)— операнди розміром 1 слово (2 байти)
    • l (від long) — операнди розміром 4 байти
    • q (від quad) — операнди розміром 8 байт
    • t (від ten) — операнди розміром 10 байт
    • o (від octo) — операнди розміром 16 байт
 movb %al,%ah
 movw %ax,%bx
 movl %ebx,%eax
  • Порядок операндів — спочатку джерело, потім приймач, а не навпаки, як в синтаксисі Intel. Наприклад:
mov eax,ebx (Intel)
movl %ebx,%eax (AT&T)
  • числові константи мають таку форму запису
20h (Intel)
$0x20 (AT&T, знак "долар" на початку)
mov ebx, 10h (Intel)
movl $0x10,%ebx (AT&T)
  • для запису/зчитування значення з певної адреси в регістр знак долара відсутній
movl 0xffff,%eax
  • сегмент.зміщення (тільки в реальному режимі) :
00:0FFh (Intel)
00.$0xFF (AT&T)
  • регістр.зміщення :
es:[bx+0x1a] (Intel)
%es.0x1a(%bx) (AT&T)

Вказівки на індексні методи адресації відрізняються тим, що використовуються круглі, а не квадратні дужки:

sub eax,[ebx+ecx*4h-20h] (Intel)
subl -0x20(%ebx,%ecx,0x4),%eax (AT&T) # відняти від EAX значення (ECX * 4) + EBX - 32

Відрізняються мнемоніки деяких команд (наприклад, cdq називається cltd в AT&T).

Відрізняються команди асемблера (такі, як оголошення констант, резервування місця).

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]