...szeretnem osszeszedni az osszes koztudatban levo szintaxist
Ez nem ízlés kérdése.
http://www.z80.info/zip/z80cpu_um.pdf
Edit: Hmmm. Még mindig volt mit javítani benne
http://www.zilog.com/docs/z80/um0080.pdf
Masodsorban pedig IGENIS izles kerdese, mert ha van egy olyan cucc ami _ILYEN es OLYAN_ formatumot ad, akkor hiaba nem hivatalos az, hiaba nem tetszik stb stb, kenytelen vagy vele egyutt elni ha hasznalni akarod, ez ilyen egyszeru
Most nem mondthatom meg az sdcc (meg az as-z80) keszitoinek hogy "hulyek vagytok sz** a syntaxis" attol valszeg nem lesznek meghatva kulonoskeppen max azt valaszolnak hogy nem kotelezo hasznalni ha nem tetszik. De nekem pont az, hogy szuksegem lenne ra ...
Amugy ez mar eleve nem olyan egyszeru pl x86-on sem, mint ismert ott is ket fo formatum van, az Initel es az AT&T syntaxis, mely utobbit hasznalja pl a gas/gcc is, es elso latasra eleg durva, eleve forditva van a ket operandus, hogy masrol ne is beszeljek):
__asm__ __volatile__(
"1: mov" "b" " %2,%" "b" "1\n"
"2:\n"
".section .fixup,\"ax\"\n"
"3: movl %3,%0\n"
" xor" "b" " %" "b" "1,%" "b" "1\n"
" jmp 2b\n"
".section __ex_table,\"a\"\n"
" .align 4\n"
" .long 1b,3b\n"
".text" : "=r"(__gu_err), "=q" (__gu_val): "m"((*(struct __large_struct *)
( __gu_addr )) ), "i"(- 14 ), "0"( __gu_err )) ;
break;
Ez AT&T syntaxist hasznalno gcc inline assmbler betet volt eppen ;-> Lathato hogy allatira nem trivialis (google-el erdemes rakeresni arra hogy "black magic gcc assembly"
Amugy ez az AT&T syntaxis pl tobbe kevesbe kvazi standard UNIX vagy UNIX szeru rendszereken, tobbfele CPU-n is (max ofkoz maguk az opcode-ok masok).
Ezt most csak peldanak mondtam, hogy milyen nehez kerdes is az, hogy mi az "izles kerdese" meg mi nem ...
Raadasul, ha mar x86, az sem egyszeru kerdes, hogy kitalalja az assembler, eppen milyen cimzesmodot hasznalna szerencsetlen programozo, nezzunk egy peldat:
mov ax,label
Namost jo kerdes, hogy most az AX regiszterbe a label cimke cimen levo word-ot kell betolteni, vagy magat a cimet. Itt pl total keveredes van x86 assemblereknek. A NASM (Netwide Assembler) pl ezert ilyet nem is enged, es MEGKOVETELI, hogy a programozo egyertelmuen jelezze mit akar, ott pl a fenti forma a CIMRE vonatkozik, a [label] pedig a cimen levo ertekre. Pl 65xx cpu-kon mar eleve a "hivatalos" syntaxis is felkeszult erre, es # jelet hasznalja arra, hogy jelezze ez bizony egy konstans, es nem cim, azaz pl az "LDA #1" 1-es erteket tolti be az akkumlatorba, mig az "LDA 1" az az 1-es cimmel rendelkezo byte tartalmat ( hasonlo lenne az x86-os mov ax,label vagy mox ax,[label], ahol keveres is van mert nehol pl mov ax,offset label syntaxist is hasznalnak az "offset" szoval jelezve hogy a label offsetje kell, mint lathato minden CPU-n kurva nagy kavarodas van, sot assemblerenkent valtozik)!
Persze ez elvileg Z80 eseten is megvan, ahol ugye ilyesmire szokas hasznalni a (...) jeleket, viszont pl ezt se erzem mindenhol logikusnak. Valoszinuleg az scc/as-z80 keszitoi azert akartak egy EGYERTELMU es konnyeben ertelmezheto jelolesrendszert bevezetni (ami amugy nemikepp az 65xx szintaxisra hasonlit, ami azert is gyanus, mert amugy azt is tamogatja az 65xx procikat legalabbis ami a mellekelt assemblereket as-* illeti).