Gå til innhold

Hvilken syntaks i GAS...


Anbefalte innlegg

Jeg driver meg igjennom en assembly-bok som tar sikte på å lære leseren assembly i GNU/Linux med AT&T-syntaks (takk for link, gspr).

 

Problemet kommer når jeg skal kaste meg over "øvelsesoppgavene". Uten å gå mer i dybden enn nødvendig, er problemet mitt i grunn at jeg ønsker å skrive til en minneadresse gitt med en "label". Dette er lett nok i NASM (Intel-syntaks) hvor man ganske enkelt bruker instruksjonen movl en_streng, eax, eller motsatt; movl eax, long [en_streng] .

 

Meningen er at man har en tallrekke ved en bestemt minneadresse. Hvert tall er en long, så det er enkelt nok å regne seg til sluttadressen.... Hvis jeg bare hadde visst hvordan man kunne laste opp startadressen til en streng til et register...

 

Og hvordan får man assembleren til å regne ut lengden på en streng, slik at jeg kan lagre den som en slags "kunstig" variabel. Jeg kan selvfølgelig telle lengden, men det er unødvendig mye jobb hvis man legger til eller fjerner noe fra strengen.

 

F.eks at jeg har noe liknende dette:

 

.section .data

STRENG .byte A,a,B,b,C,c

 

.section .text

movl STRENG-count, %ecx # Nå går det greit å lage en løkke som avsluttes ved #strengens slutt

 

Beklager at dette blir litt rotete, og det er mulig dette er feil forum., men jeg regner med størst respons her. Dessuten er dette spørsmål spesifikke til assembleren, og ikke assembly-språket(?)

Lenke til kommentar
Videoannonse
Annonse

int
main(int argc, char **argv)
{
 char teststreng[] = "Dette er en test";
 return 1;
}

gcc -S test.c

cat test.s

.file	"test.c"
.section	.rodata
.LC0:
.string	"Dette er en test"
.text
.globl main
.type	main,@function
main:
pushl	%ebp
movl	%esp, %ebp
pushl	%edi
pushl	%esi
subl	$32, %esp
andl	$-16, %esp
movl	$0, %eax
subl	%eax, %esp
leal	-40(%ebp), %edi
movl	$.LC0, %esi
cld
movl	$17, %ecx
rep
movsb
movl	$1, %eax
leal	-8(%ebp), %esp
popl	%esi
popl	%edi
popl	%ebp
ret
.Lfe1:
.size	main,.Lfe1-main
.ident	"GCC: (GNU) 3.2.3"

 

gcc er din venn!

Lenke til kommentar
gcc er din venn!

:blush: Glemte c++ >> asm funksjonen til GCC (som foreslått i en tidligere tråd...). lea(l) var visst instruksjonen... Er så vant til NASM sine løsninger (kan'ke være bra når en assembler dytter inn struksjoner etter eget gode...). Anyways: Takk for hjelpen :w00t:

Lenke til kommentar

Hvilken link var det du fikk? Har begynt å titte på asm selv i det siste...

 

Som du nevner selv burde vel dette helst vært i Programmering->Assembly eller Programmering->Linux/Unix, men kan være enig i at det er et lite tvilstilfelle her :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...