GNU Assembler

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
  • verktygsuppsättning version av binutils [1]
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 .

Syntax

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 , %ex

placerar 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 , 42

motsvarar AT&T-syntaxen ovan.

Exempel

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 _

Anteckningar

  1. https://sourceware.org/git/?p=binutils-gdb.git;a=tree
  2. Linux Assembly HOWTO: GAS  (  otillgänglig länk) . Datum för åtkomst: 18 juli 2010. Arkiverad från originalet den 22 mars 2012.
  3. Använder som: GNU Assembler  (engelska)  (nedlänk) . Datum för åtkomst: 18 juli 2010. Arkiverad från originalet den 22 mars 2012.
  4. gas/NEWS  (engelska)  (nedlänk) . Tillträdesdatum: 17 juli 2010. Arkiverad från originalet den 18 februari 2012.

Länkar