GNU Assembler (GAS) | |
---|---|
Sorts | assemblerare |
Utvecklaren | Free Software Foundation |
Skrivet i | C |
Operativ system | plattformsoberoende programvara |
Första upplagan | 1986 |
Hårdvaruplattform | plattformsoberoende programvara |
senaste versionen |
|
Licens | GPL 3 |
Hemsida | gnu.org/software/binutil... |
GNU Assembler eller GAS (kallas av kommandot as ) är assemblern av GNU- projektet ; används av GCC-kompilatorn [2] . Ingår i GNU Binutils-paketet . Plattformsövergripande program som kör och kompilerar kod för många processorarkitekturer. Distribueras under den fria licensen GPL 3 .
Syntaxen och direktiven för GAS på alla plattformar är i stort sett desamma [3] . Direktiv börjar med en prick. Flerradskommentarer betecknas som i C ( /* … */). Enradskommentarer betecknas olika på olika plattformar; till exempel i GAS för x86 och x86-64 betecknas de som i C++ ( // …) eller som i sh ( # …), medan de i GAS för ARM betecknas med @.
Som standard använder GAS AT&T-syntax för x86 och x86-64, dvs. register har prefix och% destinationsregistret anges efter källan; till exempel kod
movl $42 , %explacerar värdet 42 i eax-registret.
Version 2.10 (släpptes 2000) introducerade stöd för en variant av den mer bekanta x86 Intel-syntaxen [4] som kallas av ett direktiv .intel_syntax noprefix(direktivet .intel_syntaxanvänds för en variant av Intel-syntaxen där register betecknas med prefixet %). Till exempel kod
.intel_syntax noprefix mov eax , 42motsvarar AT&T-syntaxen ovan.
Följande är exempel på Hej världen! för GAS under Linux .
Hej världen! för Linux x86 (AT&T-syntax) .data msg: .ascii "Hej världen!\n" len = . - msg # tecken len tilldelas längden på strängen .text .global _start # programingångspunkt _start: movl $4 , %eax # systemanrop #4 - sys_write movl $1 , %ebx # stream #1 - stdout movl $msg , %ecx # pekare till utdatasträng movl $len , % edx # stränglängd int $0x80 # kärnanrop movl $1 , %eax # systemanrop #1 - sys_exit xorl %ebx , %ebx # exitkod 0 int $0x80 # kärnanrop Hej världen! för Linux x86 (Intel-syntax med prefix) .intel_syntax .data msg: .ascii "Hej världen!\n" len = . - msg # tecken len tilldelas längden på strängen .text .global _start # programingångspunkt _start: mov %eax , 4 # systemanrop #4 - sys_write mov %ebx , 1 # stream #1 - stdout mov %ecx , OFFSET FLAT : msg # pekare till linje till utgång # OFFSET FLAT betyder använd vilken adress som msg kommer att ha vid uppstart mov %edx , len # stränglängd int 0x80 # kärnanrop mov %eax , 1 # systemanrop #1 - sys_exit xor %ebx , %ebx # exitkod 0 int 0x80 # kärnanrop Hej världen! för Linux ARM (EABI) .data msg: .ascii "Hej världen!\n" len = . - msg @ i GAS för ARM - kommentarer börjar med @ eller är inneslutna i /* */ .text .global _start @ programingångspunkt _start : mov r7 , # 4 @ systemanrop # 4 - sys_write mov r0 , # 1 @ stream # 1 - stdout ldr r1 , = msg @ pekare till utmatningssträngen ldr r2 , = len @ _ _ stränglängd swi # 0 @ kärnanrop _ mov r7 , # 1 @ systemanrop # 1 - sys_exit mov r0 , # 0 @ exitkod 0 swi # 0 @ kärnanrop _assembleringsspråk | |
---|---|
ID | |
Översättare | |
Syntaxformat _ |