Sintaxa AT&T
Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 17 decembrie 2013; verificările necesită
19 modificări .
Sintaxa AT&T este unul dintre formatele pentru scrierea mnemonicii instrucțiunilor procesorului .
Caracteristici
Diferențele dintre asamblatorul AT&T ( gaz ) și asamblatorul Intel ( MASM , TASM , FASM , NASM ) :
- Comentariul începe cu un caracter „#”, nu cu „;”; la rândul său, simbolul „;” separă comenzile și vă permite să scrieți mai multe comenzi pe o singură linie.
- Absența unui prefix de operand indică o adresă de memorie, așa că movl $foo,%eax plasează adresa lui foo în registrul %eax, iar movl foo,%eax plasează conținutul lui foo în %eax.
- Numele registrelor încep cu un caracter %, adică %eax, %dl, în loc de eax, dl etc. Acest lucru vă permite să includeți variabile externe C în codul dvs. fără teama de erori și fără a utiliza prefixe de subliniere (_). De exemplu:
%eax, %ebx, %ecx, %edx
- Mărimea operandului este definită ca sufixul numelui instrucțiunii. Sufixe:
- b (din octet ) - operanzi de 1 octet
- w (din cuvânt ) - operanzi de 1 cuvânt (2 octeți).
- l (de la long ) - operanzi de 4 octeți
- q (din quad ) - operanzi de 8 octeți
- t (de la zece ) - operanzi de 10 octeți
- o (din octo ) - operanzi de 16 octeți
movb %al , %ah
movw %ax , %bx
movl %ebx , %eax
- Ordinea operanzilor este mai întâi sursa, apoi destinația și nu invers, ca în sintaxa Intel . De exemplu:
mov eax , ebx ;(Intel)
movl %ebx , %eax #(AT&T)
- constantele numerice au următoarea notație:
20 h ;(Intel)
$0x20 #(AT&T, semnul dolarului la început)
mov ebx , 10 h ;(Intel)
movl $0x10 , %ebx #(AT&T)
- pentru a scrie/citi o valoare de la o anumită adresă într-un registru, nu există semnul dolarului:
movl 0xffff , %eax
- segment.offset (numai în modul real):
00:0 FFh ;(Intel)
00 .$0xFF #(AT&T)
es: [ bx + 0x1a ] ;(Intel)
% es.0x1a ( %bx ) #(AT&T)
Indicațiile metodelor de adresare la index diferă prin aceea că sunt folosite paranteze în loc de paranteze drepte:
sub eax ,[ ebx + ecx * 4 h-20h ] ;(Intel)
subl -0 x20 ( %ebx , %ecx , 0x4 ), %eax #(AT&T) scade din valoarea EAX (ECX * 4) + EBX - 32
Mnemonicii unor comenzi diferă (de exemplu, cdqeste numit cltdîn AT&T).
Comenzile asamblatorului diferă (cum ar fi declararea constantelor, rezervarea spațiului).
Vezi și