Assembler Tags auf AT&T Syntax erweitern
-
Wäre es prinzipiell möglich, den ASM-Tag, bei dem ja nur Intel-Syntax "unterstützt" wird, auch auf AT&T-Syntax zu erweitern?
Wir haben ja z.B. einen grösseren OS-Thread von Erhard im Assembler-Subforum, wo die AT&T Syntax inzwischen, ob mit Freude oder ohne, dauerhaft eingesetzt wird
Die GCC verwendet sie ja auch standardmässig.Ich nutze den GNU Assembler auch ab und zu
Das sieht alles irgendwie hässlich aus, z.B.:
.section .data eax: .long 0 .section .text movl %eax, eax
Variablendeklaration .long wird nicht erkannt. Variable eax wird als gültiges Register erkannt. Register eax wird zwar erkannt, aber Prozent-Zeichen nicht. Befehl movl (move long) wird nicht erkannt, usw...
Wäre es vielleicht möglich, gar einen neuen Tag einzuführen, ASM AT&T o.ä.?
-
Welche Schlüsselwörter müßte man denn einfärben?
-
Marc++us schrieb:
Welche Schlüsselwörter müßte man denn einfärben?
Man müsste mindestens alle Registerbezeichnungen einfärben, die mit % Zeichen (inklusive das Zeichen selbst, weiss nicht, wie es besser wäre) eingegeben werden (habe sie grade aus http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gnu-assembler/i386-regs.html):
%eax, %ebx, %ecx, %edx, %edi, %esi, %ebp, %esp %ax, %bx, %cx, %dx, %di, %si, %bp, %sp %ah, %al, %bh, %bl, %ch, %cl, %dh, %dl %cs, %ds, %ss, %es, %fs, %gs %cr0, %cr2, %cr3. %db0, %db1, %db2, %db3, %db6, %db7 %tr6, %tr7 %st(0), %st(1), %st(2), %st(3), %st(4), %st(5), %st(6), %st(7) %mm0, %mm1, %mm2, %mm3, %mm4, %mm5, %mm6 and %mm7 %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7 %rax, %rbx, %rcx, %rdx, %rdi, %rsi, %rbp, %rsp %r8, %r9, %r10, %r11, %r12, %r13, %r14, %r15 %r8d, %r9d, %r10d, %r11d, %r12d, %r13d, %r14d, %r15d %r8w, %r9w, %r10w, %r11w, %r12w, %r13w, %r14w, %r15w %r8b, %r9b, %r10b, %r11b, %r12b, %r13b, %r14b, %r15b %sil, %dil, %bpl, %spl %db8, %db9, %db10, %db11, %db12, %db13, %db14, %db15 %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm15
Dann gibt es Kommentare, die mit # Zeichen beginnen:
mov %eax, %ebx # Das ist ein Kommentar
Es gibt noch eine Reihe von Assembler-Direktiven (s. z.B. hier http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gnu-assembler/index.html). Im Prinzip, alles Schlüsselwörter, die mit einem Punkt beginnen:
.abort .ABORT .align .ascii .asciz .balignw .balignl .byte .comm .cfi_startproc .cfi_endproc .cfi_def_cfa .cfi_def_cfa_register .cfi_def_cfa_offset .cfi_adjust_cfa_offset .cfi_offset .cfi_rel_offset .cfi_window_save .cfi_escapeexpression .data .def .desc .dim .double .eject .else .elseif .end .endef .endfunc .endif .equ .equiv .err .exitm .extern .fail .file .fill .float .func .global .hidden .hword .ident .if .incbin .include .int .internal .irp .irpc .lcomm .lflags .line .linkonce .ln .mri .list .long .macro .altmacro .noaltmacro .nolist .octa .org .p2alignw .p2alignl .previous .popsection .print .protected .psize .purgem .pushsection .quad .rept .sbttl .scl .section .set .short .single .size .sleb128 .skip .space .stabd .stabn .stabs .string .struct .subsection .symver .tag .text .title .type .uleb128 .val .version .vtable_entry .vtable_inherit .weak .word
Die Konstanten beginnen mit einem $ Zeichen:
movl $0xABCDEF00, %eax movl $SomeVariable, %ecx
Dann gibt es ein Paar Präfixe für die ganzen Befehle, die u.a. Speicher lesen/schreiben, irgendwelche Operanden benutzen usw.: b (byte 8 Bit), w (word 16 Bit), l (long 32 bit) und q (quad 64 Bit). So kann z.B. der Befehl mov so aussehen (je nach Kontext):
mov movb movw movl movq
Oder analog der Befehl inc:
inc incb incw incl
Die Sprungmarken sind im Prinzip wie in anderen Assemblern. Man kann aber noch zusätzlich die Zahlen 0...9 allein (als nur lokale sichtbare Marken) verwenden mit dem Präfix b (für back) oder f (für forward):
jmp CooleStelle CooleStelle: ... 0: jmp 0b # Spring zurück (0 back) auf die Marke 0 jmp 0f # Spring vorwärts (0 forward) auf die Marke 0 0:
Hoffe, habe das wichtigste aufgelistet...