ENTERPRISE KLUB
2021. november 6., 1055 Budapest, Nyugati tér 9. 14-19 óráig
Belépés kizárólag klubtagok részére! (Klubkártyával vagy előfizetéssel!)
Welcome, Guest. Please login or register.


Author Topic: Assembly programozás (Read 197136 times)

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #960 on: 2015.October.15. 20:56:09 »
Quote
a 3 pont csak a ... akart lenni :ds_icon_cheesygrin:

Nem geco, nem gondoltam, hogy a három egymás alá írt pontod jelent bármit is.

Értem, hogy mit mondtál a . -tal kapcsolatban,
és vagy nem igaz amit írok, vagy te nem értetted meg amit válaszként írtam.
Z80 System

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1065
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.3 Windows NT 6.3
  • Browser:
  • Firefox 41.0 Firefox 41.0
    • View Profile
Re: Assembly programozás
« Reply #961 on: 2015.October.15. 21:04:49 »
Egyszerűen keresném a megoldást a kényelmes névválasztásra. Szeretnék valami ilyet:



Function0:

    LoopExt:

        LoopInt:

            LoopIntInt:

            jr LoopIntInt

        jr LoopInt

    jr LoopExt

    ret



Function1:

    LoopExt:

        LoopInt:

            LoopIntInt:

            jr LoopIntInt

        jr LoopInt

    jr LoopExt

    ret
Ebben a konstrukcióban pontosan mi a probléma? Az hogy ütköznek a két függvényben a címkék nevei, vagy az hogy nem lehet rájuk pl.: Function0.LoopExt.LoopInt.LoopIntInt-ként hivatkozni?

Offline geco

  • EP addict
  • *
  • Posts: 6303
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 38.0 Firefox 38.0
    • View Profile
Re: Assembly programozás
« Reply #962 on: 2015.October.15. 21:08:29 »
Nem geco, nem gondoltam, hogy a három egymás alá írt pontod jelent bármit is.

Értem, hogy mit mondtál a . -tal kapcsolatban,
és vagy nem igaz amit írok, vagy te nem értetted meg amit válaszként írtam.
Bocs, nem vettem észre az egyik hozzászólásod, az miért fontos, hogy egy relatív címke az előtte lévő relatív címkéhez képest legyen relatív?
A példádból indultam ki, azt pedig jól lefedi a szimpla relatív címkés megoldás.

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #963 on: 2015.October.15. 21:21:27 »
Quote
Ebben a konstrukcióban pontosan mi a probléma? Az hogy ütköznek a két függvényben a címkék nevei, vagy az hogy nem lehet rájuk pl.: Function0.LoopExt.LoopInt.LoopIntInt-ként hivatkozni?

Quote
A példádból indultam ki, azt pedig jól lefedi a szimpla relatív címkés megoldás.

Az ütközés a baj. A példa meg simán lehet nem mutatta mit akarnék.

Ahogy beljebb taboltam a sorokat, azok akarnának lenni az elméleti címterek.
És mivel 4 mélységű, ezért ezt ha jól értam, akkor sjasm -al nem lehet kifejezni.

Tehát ha Function0 az egy sjasm module, és LoopExt az meg egy sjasm globális címke, akkor valójában LoopExt már nem lesz globális, hanem relatív lesz Function0 -hoz képest, vagyis LoopExt -et használhatom egy masik modulomban is (amely a Function1 lesz).

Eddig szupi.

Ha LoopInt -et pedig egy sjasm lokális címkének veszem fel (. -tal) akkor az lokális lesz az előtte álló globális címkéhez (LoopExt ugye), és akkor LoopInt nevet is használhatnám újra egy a pédában fel nem vett LoopExt2 globális címkéhez képest.

Eddig is szupi.

De itt elértük a hierarchiánk alját, mert a LoopIntInt név már megint csak egy sjasm lokális cimke lehet, mely ismét az előtte álló globális címkéhez képest lesz relatív. Ami még mindíg csak LoopExt.

És így hiába vennék fel egy LoopInt2 -t, a LoopIntInt név már el van sütve, LoopInt2 -n belül már nem lehetne újra LoopIntInt -em.
Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3555
  • Country: hu
  • æðsta yfirmaður
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 41.0 Firefox 41.0
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #964 on: 2015.October.15. 21:22:17 »
Egyszerűen keresném a megoldást a kényelmes névválasztásra. Szeretnék valami ilyet:



Function0:

    LoopExt:

        LoopInt:

            LoopIntInt:

            jr LoopIntInt

        jr LoopInt

    jr LoopExt

    ret



Function1:

    LoopExt:

        LoopInt:

            LoopIntInt:

            jr LoopIntInt

        jr LoopInt

    jr LoopExt

    ret

Ezt most nem ertem. Function0 es Function1 legyen ilyen label, a tobbi ponttal kezdodo. Peldadban utkozes a ket FunctionX "alatt" levo pl LoopExt-ek kozott van, ez megoldodik, ha .LoopExt lenne, es akkor nincs utkozes. Nem vilagos, hogy azzal a megoldassal mi a baj, ui a peldadhoz pont remekul illene. De amugy:

http://xl2s.eu.pn/sjasmman3.html

Lasd "Reusable labels" resz, ha az jobban tetszik. Pl engem idegesit, hogy neha a cel pl csak egy utasitas atugrasa pl, vagy ketto, hasonlo. Itt idegesito, hogy emiatt cimket kell bevezetni, ezek a "reusable labels" dolgok legalabb egyszerubbnek tunnek. Bar az optimalis megoldas az lenne (szamomra, szerintem) ha lenne olyan, hogy pl: "JR Z, +2" vagy "JR Z, -2" (nyilvan csak pelda, a megfelelo szintaxisra nem biztos, hogy pont ez jo, sot ..." ami azt jelentene, hogy "n" darab utasitast ugorjon at elore vagy hatra (fuggetlenul az adott utasitasok hosszatol). Nyilvan ez nagy szamnal mar igen fura (foleg, ha kozben modositani kell a kodot), de pl 1 v 2 eseten szerintem (nekem legalabbis) kenyelmesebb lenne. Meg lehet probalkozni persze pl a "JR Z, $+4" es hasonlo dolgokkal, ezzel az a baj, hogy akkor neked kell szamon tartani, hogy hany byte-nyi kodot kell atugrani, es nem utasitasszamrol van szo.

Pl ami tetsze, az a ca65-ben (de az 65xx assembler, nem Z80 ...) az "unnamed labels":

http://www.cc65.org/doc/ca65-6.html#ss6.5

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #965 on: 2015.October.15. 21:31:07 »
Quote
Ezt most nem ertem. Function0 es Function1 legyen ilyen label, a tobbi ponttal kezdodo.

A válasz egy hsz -al korábban vagyon, csak akkor még nem volt mikor te írtál.

Quote
Reusable labels

Nem akarok számokat használni, neveket akarok adni, valamint szabadon (is) akarok ugrálni, ez a reusable meg csak a közvetlen legközelebbiket keresi meg az ugrásnál.

Quote
Itt idegesito, hogy emiatt cimket kell bevezetni

Az szerintem pont azért idegesítő, mert egy globális nevet kell keresni, ami biztosan nem ütközik semmivel sehol az egész átkos programban (tiszta globális címkékben gondolkodva most), és még kifejezőnek is kell lennie. Ez valószínűleg egy 50 tagos, kilóméter hosszú címke lesz. Azt valóban idegesítő bevezetni egy arrébbugrásért ...
és pont erre keresném a megoldást.

De ha beírhatnád ott lokálisan 600adikra is hogy "loop:" meg "jumpto:" vagy akármi, az ott helyileg tök értelmes, kifejező és frappáns lenne ... csupán végtelenségig ágyazható relatív cimke névfeloldás kellene ... akár mint a C++ névterek ...
« Last Edit: 2015.October.15. 21:38:30 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #966 on: 2015.October.15. 21:35:10 »
sjasm terminológiában beszélve gyakorlatilag a lokális és globális cimke fogalma tök felesleges lenne,
annyi kéne hogy a module az LOKÁLIS legyen (nyilván az előtte álló module -hoz), ne pedig globalis.

ha a sjasm -ban leirod, hogy:

 module kutya
 module macska
 module kutya
 
akkor nem
kutya.macska.kutya
-ban vagy, hanem simán csak a globalis
kutya
- ban, újra, csak közben megjelent a globalis
macska
module is ...
Z80 System

Offline geco

  • EP addict
  • *
  • Posts: 6303
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 38.0 Firefox 38.0
    • View Profile
Re: Assembly programozás
« Reply #967 on: 2015.October.15. 21:41:12 »
De ha beírhatnád ott lokálisan 600adikra is hogy "loop:" meg "jumpto:" vagy akármi, az ott helyileg tök értelmes, kifejező és frappáns lenne ... csupán végtelenségig ágyazható relatív cimke névfeloldás kellene ... akár mint a C++ névterek ...
Akkor neked az LGB által említett "unnamed labels" lenne a megoldás, és láttam is ilyen megoldást egy z80 disassembly listában, úgyhogy biztos van assembler is ilyen.

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1065
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.3 Windows NT 6.3
  • Browser:
  • Firefox 41.0 Firefox 41.0
    • View Profile
Re: Assembly programozás
« Reply #968 on: 2015.October.15. 21:46:12 »
Jó, akkor mindkettő probléma. Az első megoldódott, a másodikat viszont nem teljesen értem. Mi az az elengedhetetlen fontosságú absztrakció, amit egy függvényen belül muszáj ebben a formában megvalósítani?

Egyébként - de lehet hogy félreértelmezem a leírást - a pont karakter lehet része címkének, kitüntetett funkciója csak akkor van, ha a címke első karaktere.

Ha viszont egy függvényen belül újra fel akarsz használni valamilyen címkéket, akkor lehet - bocsánatot kérek, nem akarok csúnyát mondani - hogy nem választasz jól címke neveket, vagy nem jól szervezed a programodat - még egyszer sűrű és zavart bocsánatkérésem.


Viszont az sjasm forrása szabadon hozzáférhető. Lehet hogy mások is örülnének ha fejlesztenél bele teljes értékű névtér kezelést.

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #969 on: 2015.October.15. 21:56:42 »
Quote
Akkor neked az LGB által említett "unnamed labels" lenne a megoldás,

Nem. Az egy maszat, még a link is azzal kezdi a magyarázatot.

Nekem az kéne, hogy akkor nyissak egy (beágyazott, hierarchikus) névteret, amikor akarok.

Tehát modjuk, képzeletben csak, mert a sjasm most nem ilyen:






 module func0

entry:   //func0.entry

 module loop   //func0.loop

loop:   //func0.loop.loop

 module loop   //func0.loop.loop

loop:   //func0.loop.loop.loop

 module loop   //func0.loop.loop.loop

loop: //etc

 module loop //etc

 jr loop

 endmodule

 jr loop

 endmodule

 jr loop

 endmodule

 jr loop

 endmodule

 ret

 endmodule





 module func1

entry:   //func1.entry

 module loop   //func1.loop

loop:   //func1.loop.loop

 module loop   //func1.loop.loop

loop:   //func1.loop.loop.loop

 module loop   //func1.loop.loop.loop

loop: //etc

 module loop //etc

 jr loop

 endmodule

 jr loop

 endmodule

 jr loop

 endmodule

 jr loop

 endmodule

 ret

 endmodule





És igen, a példáim nem foglalkoznak most a modulnév és a cimkenév ütközésével, de azt is fel lehetne oldani 50 féle képpen,
pédául úgy, hogy a module neve automatikusan egy cimke neve is lehetne, vagy úgy hogy simán csak nem szabadna azonos modul es cimkenévnek lennie
egy modulban, stb ...
« Last Edit: 2015.October.15. 22:00:06 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #970 on: 2015.October.15. 22:04:37 »
Mindennek szép formáját már említeni se merném :) :

Code: [Select]

module function0
{
entry:

module loop
{
loop:

module loop
{
loop:

module loop
{
loop:

jr loop
}

jr loop
}

jr loop
}

ret
}

module function1
{
entry:

module loop
{
loop:

module loop
{
loop:

module loop
{
loop:

jr loop
}

jr loop
}

jr loop
}

ret
}

Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3555
  • Country: hu
  • æðsta yfirmaður
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 41.0 Firefox 41.0
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #971 on: 2015.October.15. 22:08:17 »
Ehhez hasonlo cucc kene?

http://www.cc65.org/doc/ca65-11.html#ss11.86
http://www.cc65.org/doc/ca65-7.html#scopesyntax

A "module" szerintem nem illik ide, az nem erre valo mar "filozofiaban" sem igazan.

Offline lgb

  • EP addict
  • *
  • Posts: 3555
  • Country: hu
  • æðsta yfirmaður
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 41.0 Firefox 41.0
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #972 on: 2015.October.15. 22:11:35 »
Mindennek szép formáját már említeni se merném :) :

Code: [Select]
module function0
{
entry:

module loop
{
...

Ezzel szerintem az a baj, hogy ertelmet veszti a modul nev, a "module" utan. Hiszen pont az lenne a lenyege, hogy adott module-ba teszed a kodot, tehat uazt a modul nevet mondod, az nem lesz "kulon" itt meg minden module neve "loop". Ezert is mondtam, hogy ez nem erre valo. Amit te akarsz az tenyleg vmi scope, namespace, tudomisen.

Raadasul akkor a fenti szintaxis (ha letezne ilyen) egyszerusitheto, hogy pl:

module loop { ..... }

helyett egyszeruen csak:

{ ..... }
« Last Edit: 2015.October.15. 22:16:52 by lgb »

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1065
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.3 Windows NT 6.3
  • Browser:
  • Firefox 41.0 Firefox 41.0
    • View Profile
Re: Assembly programozás
« Reply #973 on: 2015.October.15. 22:15:00 »
Akkor neked inkább valami Z80-as C fordító kellene ami tud inline assembly-t fordítani.

Offline Z80System

  • EP addict
  • *
  • Posts: 3842
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 45.0.2454.101 Chrome 45.0.2454.101
    • View Profile
Re: Assembly programozás
« Reply #974 on: 2015.October.15. 22:15:25 »
Quote
Ehhez hasonlo cucc kene?

Pontyossan! Egymásba ágyazható névterek, szkópok, amik persze kedv szerint megcímezhetők felfele a hierarchia mentén ...

És ezt a sjasm -ban 3 szinten meg is oldották. Pontosabban lehetne úgy használni. De 3 szint az édeskevés a szabadsághoz.

Quote
A "module" szerintem nem illik ide, az nem erre valo mar "filozofiaban" sem igazan.

Na ha erről a filozófiáról (is) tudnál mondani pár szót azt én nagyon megköszönném,
mert az egész module dologról annyit találtam, hogy a "globális" cimkék a modulokra lokálisak ... :)

Mi a filozófiájuk egyébként ?



De mégegyszer visszatérve az igazi lényegre is: igen, ágyazott névterek kellenének a label nevekhez, "nested scope" -ok.
Z80 System