26

Jaki w ogóle jest wasz problem? Jeśli PLA $00 daje $68 $00, to jest to błąd w MADSie. Jeśli daje $68 to jest tak samo dobrze jak w QA i xaśmie.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

27 Ostatnio edytowany przez xxl (2012-04-30 11:45:35)

epi napisał/a:

Jeśli daje $68 to jest tak samo dobrze jak w QA i xaśmie.

raczej tak samo zle

---
pojdzmy dalej

dex $xx
inx $xx

itd itd.

http://atari.pl/hsc/ad.php?i=1.

28 Ostatnio edytowany przez epi (2012-04-30 12:13:15)

Dalej nie wiem, jaki masz problem. Składnia jest zdefiniowana następująco:
[etykieta] rozkaz [wymagane argumenty ][komentarz]
dex ma wymaganych argumentów 0, więc $xx jest komentarzem i od 1991 roku nikogo to nie dziwi.
Jeśli ci z tym źle, wybierz inny asembler, albo "use the force, change the source".

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

29 Ostatnio edytowany przez xxl (2012-04-30 13:58:04)

epi napisał/a:

dex ma wymaganych argumentów 0, więc $xx jest komentarzem i od 1991 roku nikogo to nie dziwi.

natomiast przed 1991 taka skladnia zdziwilaby wszystkich. sprawdz np. w mac65

ale zyjemy w demokracji :-) jak wiekszosc mowi ze krowa to kon, czas siodlac krasule.


---
atasm tez tego nie lyknie :-)

http://atari.pl/hsc/ad.php?i=1.

30

w załączniku mads po poprawce, tzn.

jeśli użyjemy łączenia mnemoników poprzez znak ':' będzie po staremu czyli w stylu QA, XASM

jeśli nie będzie łączenia mnemoników znakiem ':' to pojawi się błąd "Extra character in line"

 ldx:dex $00   -> OK
 dex $00         -> ERROR

p.s.
a może tak nauczyć edytor kontroli składni

Post's attachments

mads_30.04.2012.7z 140.16 kb, liczba pobrań: 4 (od 2012-04-30) 

Tylko zalogowani mogą pobierać załączniki.
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

31 Ostatnio edytowany przez epi (2012-04-30 18:40:02)

xxl napisał/a:
epi napisał/a:

dex ma wymaganych argumentów 0, więc $xx jest komentarzem i od 1991 roku nikogo to nie dziwi.

natomiast przed 1991 taka skladnia zdziwilaby wszystkich. sprawdz np. w mac65

ale zyjemy w demokracji :-) jak wiekszosc mowi ze krowa to kon, czas siodlac krasule.


---
atasm tez tego nie lyknie :-)

Pitu pitu. Próbujemy ci wytłumaczyć, że krowa to krowa (QA), a cielęta (xasm i mads) pochodzą od krowy. Tak bowiem miało być, że xasm jest kompatybilny z QA, a mads z xasmem.
Ty natomiast dziwisz się, że krowa i cielęta żują trawę, podczas gdy (twoim zdaniem) powinny, niczym konie (mac65 i atasm), wypiąć się na trawę i żreć owies. Tebe krasulę ci już osiodłał, szerokiej drogi!

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

32

@tebe dzieki za pomoc. bledy skladni jak sie kompiluja sa naprawde trudne do znaleznienia.

@epi, post 25.

http://atari.pl/hsc/ad.php?i=1.

33

Hmmm. A co myślicie o czymś takim:?

lda #
ldx #
ldy #

Co powinno się zdarzyć?

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

34

xxl: To nie jest błąd ani wyjątek, tylko spójna reguła.
To co ty proponujesz, a tebe zaimplementował, to jest wyjątek, bo w niektórych instrukcjach nie można już teraz zacząć komentarza od czegoś, co przypadkiem stanie się poprawnym wyrażeniem arytmetycznym.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

35

mono napisał/a:

Hmmm. A co myślicie o czymś takim:?

lda #
ldx #
ldy #

Co powinno się zdarzyć?

zdarzy się ZERO

lda #0
ldx #0
ldy #0
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

36

>xxl: To nie jest błąd ani wyjątek, tylko spójna reguła.

ta "spojna regula" z 1991 zawiera i wyjatki i bledy:

przyklad wyjatku:
[etykieta] rozkaz [wymagane argumenty ][komentarz]

[wymagane argumety ] w rozkach w trybie adresowania akumulatora sa wymagane tylko jesli w linii jest pole komentarza :-) niezla kicha.

przyklad bledu:
z powyzszego powinno byc
[etykieta] rozkaz [wymagane argumenty] [komentarz]
to zalatwia cala sprawe. w rozkazach bezargumetowych i tych gdzie argument mozna pominac przed komentarzem dwa odstepy (spacje/taby - nieistotne; z tego co pamietam tak jest w mac65). oczywiscie lepszym rozwiazaniem jest srednik.

czyli
pla $00 ; to powinno generowac blad skladni
pla  $00 ; a to juz nie.



>To co ty proponujesz, a tebe zaimplementował, to jest wyjątek, bo w niektórych instrukcjach nie można już teraz zacząć  komentarza od czegoś, co przypadkiem stanie się poprawnym wyrażeniem arytmetycznym.

szkoda wlasnie ze w niektorych rozkazach komentarz moze zaczynac sie od wyrazenia a nie np. srednika :-)

http://atari.pl/hsc/ad.php?i=1.

37

Wiele razy umyślnie pisałem kod w stylu:

 ldx #29
 sta:rpl ^00,x-
 inx #0

gdzie #0 to oczywiście komentarz. Nigdy nie miałem z tym problemu - przecież wiem, jak działa inx.

tebe napisał/a:
mono napisał/a:

Hmmm. A co myślicie o czymś takim:?

lda #
ldx #
ldy #

Co powinno się zdarzyć?

zdarzy się ZERO

No to już jest folklor madsowy.

xxl napisał/a:

ta "spojna regula" z 1991 zawiera i wyjatki i bledy:
przyklad wyjatku:
[etykieta] rozkaz [wymagane argumenty ][komentarz]
[wymagane argumety ] w rozkach w trybie adresowania akumulatora sa wymagane tylko jesli w linii jest pole komentarza :-) niezla kicha.
przyklad bledu:
z powyzszego powinno byc
[etykieta] rozkaz [wymagane argumenty] [komentarz]
to zalatwia cala sprawe. w rozkazach bezargumetowych i tych gdzie argument mozna pominac przed komentarzem dwa odstepy (spacje/taby - nieistotne; z tego co pamietam tak jest w mac65). oczywiscie lepszym rozwiazaniem jest srednik.

To wcale nie są reguły z 1991. Ani w QA ani w xasm nie ma wyjątku dla adresowania akumulatora - musi być "@". Nie ma też uzależniania interpretacji od tego, czy jest jedna, dwie czy pięć spacji.

https://www.youtube.com/watch?v=jofNR_WkoCE

38 Ostatnio edytowany przez laoo/ng (2012-05-01 10:24:32)

QA to natywny asembler, w którym ze względu na ograniczenia platformy pojawiły się pewne uproszczenia. Bardzo niejasne z gramatycznego punktu widzenia reguły co jest komentarzem, a co nie, nie wydają mi się powodem do chluby i przykładem do naśladowania. Ale to było na atari i można to zrozumieć. Problem widzę w tym, że nikt nie zdecydował się na zerwanie niechlubnej kompatybilności odpowiednio wcześnie, zanim nie upowszechniła się cross-developerka. A wystarczyłby przełącznik "QA-compatible". Możliwe, że całkiem sensownym rozwiązaniem mógłby być jakiś przełącznik powodujący błąd, jeśli komentarze nie zaczynają się od znaku początku komentarza (czyli po pla nie mogłoby znaleźć się nic poza oznaczonym komentarzem).

Fox napisał/a:
 ldx #29
 sta:rpl ^00,x-
 inx #0

Nie wiem czy chcę wiedzieć jaki jest cel takiego zabiegu (obfuscation?), ale widać perlowcy lubią takie potworki.

39

> sta:rpl ^00,x-

i dla tego lepiej czytac plik po deasemblacji niz zrodla :-)


> inx #0 gdzie #0 to oczywiście komentarz.

oczywiscie ale nie ja mowie o bledach skladni gdy napisze inx $ff zamiast inc $ff asemler to kompiluje bez zajakniecia, takie cos juz mac65 potrafil wychwycic - np. w edit sam dopisywal podwojne spacje (nie pamietam dobrze czy nie tabulacje) zeby odrazu rzucalo sie w oczy

> Ani w QA ani w xasm nie ma wyjątku dla adresowania akumulatora - musi być "@".

rozmawiamy o MADS, w mads mozesz spokojnie napisac bez @ i cokolwiek uzyjesz pozniej bedzie argumentem a nie komentarzem...

> Nie ma też uzależniania interpretacji od tego, czy jest jedna, dwie czy pięć spacji.

oczywiscie ze nie ma. szkoda ze nie ma. to jest regula na uleczenie sytuacji na interpretacje bledow skladni.


> Problem widzę w tym, że nikt nie zdecydował się na zerwanie niechlubnej kompatybilności odpowiednio wcześnie, zanim nie upowszechniła się cross-developerka.

dokladnie tak.

http://atari.pl/hsc/ad.php?i=1.

40

Widzę tylko narzekania w stylu "nie rozumiem X, pomyliłem się przy Y, więc to jest wina autora asemblera". Nikt Wam nie każe używać cross-assemblera mojego ani Tebego. Wybierzcie taki asembler, którego składnię jesteście w stanie pojąć. Jestem bardzo zadowolony ze składni xasm - to, czego mi brakowało w QA, dodałem bez łamania zgodności wstecz. Nie podobała mi się tylko ewidentnie dyrektywa opt, ale to zwykle jedna linijka w źródle.

https://www.youtube.com/watch?v=jofNR_WkoCE

41

xxl: ale przeciez ca65 z pakietu cc65 spelnia twoje wymagania. tj. masz komentarze po ; masz zerwana kompatybilnosc z qa (w koncu o to prosisz) i masz sporo wiecej, bo to assembler tworzacy pliki obiektowe, ktore pozniej sie linkuje, ustalajac adresy, w ktorych znajda sie "symbole".

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

42

@Fox
> "Widzę tylko narzekania w stylu "nie rozumiem X, pomyliłem się przy Y, więc to jest wina autora asemblera".

z wiedza to nie ma nic wspolnego. inx $00 to literowka inc $00. nie istnieje rozkaz inx z argumentem.

@jellonek zejdz ze slonca.

http://atari.pl/hsc/ad.php?i=1.

43

xxl: Skoro, jak sam napisałeś, "nie istnieje rozkaz inx z argumentem", to wynika z tego, że $00 nie jest argumentem inx. W kwestii wiedzy, zapoznaj się ze składnią QA oraz historią kompilatorów (ze szczególnym uwzględnieniem kompilatorów, które znajdowały literówki).

https://www.youtube.com/watch?v=jofNR_WkoCE

44

Błędy podczas programowania są nieuniknione i software używany przez programistów powinien jak najlepiej pomóc w ich wykrywaniu. Dokładnie dlatego powstał np. taki Clang uczulony na częste błędy i nawet potrafiący zaproponować poprawkę. Jeżeli asembler uważa, że nie ma nic złego w "inx $00" to dla mnie jest to błąd w asemblerze.
Dodatkowo: gdy czytam kod i widzę w nim coś dziwnego, to tracę zaufanie do programisty. Wspomniane "inx #0" bardzo wzmogłoby moją czujność, bo widząc coś takiego, nie wiem, czy programista nie potrafi programować i myśli, że istnieje rozkaz inx #, czy się pomylił i chodziło mu o coś innego, czy świadomie dodał komentarz w tylko jemu znanej notacji, co jest bardzo nieładne i sugeruje mi, że programista nie chce żeby ktokolwiek czytał ten kod. Tak czy inaczej wnioskuję, że z tym kodem jest coś nie tak.

45

laoo: Trafia do mnie Twoja argumentacja. O "inx #0" pisałem w czasie przeszłym i obecnie już bym tak nie napisał. Jest to głównie spowodowane odzwyczajeniem od kodu 6502 oraz stosowaniem edytorów z ograniczonymi możliwościami kolorowania składni.

https://www.youtube.com/watch?v=jofNR_WkoCE

46 Ostatnio edytowany przez laoo/ng (2012-05-01 12:09:02)

Dziękuję :)
Nie byłoby tej dyskusji, gdyby asembler bardziej trzymał nas w ryzach (dla naszego własnego dobra). Np. standard języka C++ pozwala na maksymalnie dużo. Ale nie więcej.

47

Oj, prze-kombi-nujecie zaraz.
Proszę wrócić do starych zasad, "LDX #0 cośtam"  bo mi wali błędami.


Inne:
Moja sugestia - plik *.lab generuje etykiety UPCASE - proszę zrobić jak w orginale *.ASM.

Czyli, piszę:

           ORG $1730
Etykieta LDX #

to plik LAB  robi
00    1730    ETYKIETA

a winien wypluć
00    1730    Etykieta

48 Ostatnio edytowany przez epi (2012-05-01 12:21:28)

Przywołanie standardu języka C++ w kontekście Madsa przywodzi na myśl pewne analogie.
Resztki kompatybilności z poprzednikiem; drobne, niepasujące do siebie i nie do końca przemyślane featury powrzucane naraz z powodu braku porozumienia wśród tych, którym na nich zależało; liczne zaskakujące i nieoczywiste szczególne przypadki na styku tychże featur, będące śladem nieskoordynowanego rozwoju, oraz milion odległych od siebie stylów pisania. Skąd my to znamy?

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

49

pajero napisał/a:

Etykieta LDX #

kompiluje sie rozkaz z zaznaczonym trybem adresowania (natychmiastowy) ale bez argumentu.
ciekawe czy kompiluje sie tez:
lda ,x      ; strony zerowej indeksowany x
lda (),y   ; strony zero postindeksowany

http://atari.pl/hsc/ad.php?i=1.

50

Fox napisał/a:

xxl..."nie istnieje rozkaz inx z argumentem", to wynika z tego, że $00 nie jest argumentem inx....

laoo/ng napisał/a:

...jeżeli asembler uważa, że nie ma nic złego w "inx $00" to dla mnie jest to błąd w asemblerze.
Dodatkowo: gdy czytam kod i widzę w nim coś dziwnego, to tracę zaufanie do programisty. Wspomniane "inx #0" bardzo wzmogłoby moją czujność, bo widząc coś takiego, nie wiem, czy programista nie potrafi programować i myśli, że istnieje rozkaz inx #, czy się pomylił i chodziło mu o coś innego

Wszystko "fajnie" o ile mówimy o takim znanym mniemoniku...wiem, wiem...powinno sie znać wszystkie mnemoniki...ale przecież równie dobrze to może być makro i wtedy trudniej rozpoznać czy to błędna konstrukcja czy też nie, a dla początkujących to spore ułatwienie.