GNU Assembler

GNU Assembler (GAS)
Tip de asamblator
Dezvoltator Free Software Foundation
Scris in C
Sistem de operare software multiplatformă
Prima editie 1986
Platformă hardware software multiplatformă
ultima versiune
  • versiunea set de instrumente a binutils [1]
Licență GPL 3
Site-ul web gnu.org/software/binutil…

GNU Assembler sau GAS (numit de comanda as ) este asamblatorul proiectului GNU ; folosit de compilatorul GCC [2] . Inclus în pachetul GNU Binutils . Program multiplatformă care rulează și compilează cod pentru numeroase arhitecturi de procesoare. Distribuit sub licența gratuită GPL 3 .

Sintaxă

Sintaxa și directivele GAS pe toate platformele sunt aproape aceleași [3] . Directivele încep cu un punct. Comentariile pe mai multe linii sunt notate ca în C ( /* … */). Comentariile pe o singură linie sunt notate diferit pe platforme diferite; de exemplu, în GAS pentru x86 și x86-64 sunt notate ca în C++ ( // …) sau ca în sh ( # …), în timp ce în GAS pentru ARM sunt notate cu @.

În mod implicit, GAS utilizează sintaxa AT&T pentru x86 și x86-64, adică registrele sunt prefixate %și registrul de destinație este specificat după sursă; de exemplu cod

movl $42 , %eax

plasează valoarea 42 în registrul eax.

Versiunea 2.10 (lansată în 2000) a introdus suport pentru o variantă a sintaxei Intel x86 mai familiare [4] numită de o directivă .intel_syntax noprefix(directiva .intel_syntaxeste folosită pentru o variantă a sintaxei Intel în care registrele sunt notate cu prefixul %). De exemplu, cod

.intel_syntax noprefix mov eax , 42

este echivalentă cu sintaxa AT&T de mai sus.

Exemple

Următoarele sunt exemple ale Hello, world! pentru GAS sub Linux .

Salut Lume! pentru Linux x86 (sintaxă AT&T) .data msg: .ascii "Bună ziua, lume!\n" len = . - msg # caracterul len are alocată lungimea șirului .text .global _start # punct de intrare în program _start: movl $4 , %eax # apel de sistem #4 - sys_write movl $1 , %ebx # stream #1 - stdout movl $msg , %ecx # pointer to output string movl $len , % edx # lungime șir int $0x80 # apel kernel movl $1 , %eax # apel de sistem #1 - sys_exit xorl %ebx , %ebx # cod de ieșire 0 int $0x80 # apel kernel Salut Lume! pentru Linux x86 (sintaxă Intel cu prefix) .intel_syntax .data msg: .ascii "Bună ziua, lume!\n" len = . - msg # caracterul len are alocată lungimea șirului .text .global _start # punct de intrare program _start: mov %eax , 4 # apel de sistem #4 - sys_write mov %ebx , 1 # flux #1 - stdout mov %ecx , OFFSET FLAT : msg # pointer to line to output # OFFSET FLAT înseamnă folosiți orice adresă va avea mesajul la pornire mov %edx , len # lungime șir int 0x80 # apel kernel mov %eax , 1 # apel de sistem #1 - sys_exit xor %ebx , %ebx # cod de ieșire 0 int 0x80 # apel kernel Salut Lume! pentru Linux ARM (EABI) .data msg: .ascii "Bună ziua, lume!\n" len = . - msg @ în GAS pentru comentariile ARM încep cu @ sau sunt incluse în /* */ .text .global _start @ punct de intrare program _start : mov r7 , #4 @ apel de sistem # 4 - sys_write mov r0 , #1 @ flux # 1 - stdout ldr r1 , = msg @ pointer la șirul de ieșire ldr r2 , = len @ lungime șir swi #0 @ apel kernel mov r7 , #1 @ apel de sistem # 1 - sys_exit mov r0 , #0 @ cod de ieșire 0 swi # 0 @ apel kernel

Note

  1. https://sourceware.org/git/?p=binutils-gdb.git;a=tree
  2. Linux Assembly HOWTO: GAS  (  link inaccesibil) . Data accesului: 18 iulie 2010. Arhivat din original pe 22 martie 2012.
  3. Folosind ca: The GNU Assembler  (engleză)  (downlink) . Data accesului: 18 iulie 2010. Arhivat din original pe 22 martie 2012.
  4. gaz/ȘTIRI  (engleză)  (downlink) . Data accesului: 17 iulie 2010. Arhivat din original la 18 februarie 2012.

Link -uri