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 |
|
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 .
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 , %eaxplasează 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 , 42este echivalentă cu sintaxa AT&T de mai sus.
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 kernellimbaj de asamblare | |
---|---|
IDE | |
Traducători | |
Formate de sintaxă |