Manuel Skrevet 10. mai 2004 Del Skrevet 10. mai 2004 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
kattemat Skrevet 10. mai 2004 Del Skrevet 10. mai 2004 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
Manuel Skrevet 10. mai 2004 Forfatter Del Skrevet 10. mai 2004 gcc er din venn! 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 Lenke til kommentar
☀ ❄ Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 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
gspr Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 Hvilken link var det du fikk? Har begynt å titte på asm selv i det siste... Dette er boken. Den er gitt ut under FDL, og ligger derfor her gratis i PDF-format. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå