ENTERPRISE KLUB
2019. szeptember 7., 1055 Budapest, Nyugati tér 9. 14-19 óráig
Részletek
Welcome, Guest. Please login or register.


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

Offline hsoft

  • EP fan
  • *
  • Posts: 113
    • View Profile
Re: Assembly programozás
« Reply #15 on: 2006.April.25. 08:27:05 »
Quote from: "Povi"
Hogyan lehet azt megoldani, hogy saját programból, ha kiadom az exdos parancsot, és abból esc-kel visszatérek, ne tûnjöm el a fél képernyõ (amit az exdos kitakart).
Konkrétabban: az atomixben csináltam egy olyat, hogy ha megnyomom a kettõspontot, elõugorjon az exdos. Ha kilépek, tök jól folytatódik minden ott, ahol abbamaradt, leszámítva azt, hogy üres a képernyõ.

Az Exdos parancs egyszerüsítve a következõ lépéseket végzi: Nyit egy videó csatornát, display utasítással kiteszi, ez EXOS hivással történik és a videó sorokat az lpt-ben átcímzi. Kilépésnél bezárja a videó csatornát.
Tehát a képernyõ helyreállítás egyik módja, hogy végrehajtunk egy display hívást. Amikor nem használjuk az operációs rendszer videó csatornáját, vagyis valami direkt video memória kezelést alkalmazunk, akkor két lehetõség van. Ha tudjuk a videó soraink címeit, csak vissza cimezzük az lpt-sorokat. Amikor virtuális, tehát pl. görgetés miatt kiszámíthatatlanná vált a videócím, akkor célszerû lementeni az exdos parancs elötti lpt-t, és visszatéréskor vissza lehet irni.

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #16 on: 2006.June.14. 09:17:47 »
Hello! Sajat feljleszteseimet a cc65 (www.cc65.org) stuffokkal szoktam csinalni PC-n, ez 65xx cpu-khoz C fordito, assembler, linker, ennek assembler-et (ca65) szoktam hasznalni, mivel olyan dolgokat tud amit semmilyen mas stuff nem.
Persze, Z80-at nem ismer, ezert meg regebben elkezdtem csinalni egy olyan "pre assemblert" ami Z80 asm forrast megeszi, es kikop magabol olyan asm forrasat, amit a ca65 megeszik :) Ez ugy muxik gyakorlatilag, hogy .BYTE szekvenciakat hoz letre igy persze a ca65-nek onnantol mindegy hogy az milyen CPU-n ertelmezett vagy nem ... Elonye ennek, hogy ca65 meg az ld65 (a linker) minden jo tulajdonsaga igy rendelkezesre all Z80-as fejlesztesekhez is, ami mas altalam ismert eszkozzel nem lehetne biztositani.

Nos ezen projectem kapcsan utkoztem abba a kerdesbe, hogy milyen Z80 syntaxist szokas hasznalni assemblerekben, ugyis tobb fele is van ... Peldaul az sdcc (sdcc.sf.net) olyasmiket hasznal hogy:

ADC A,#12
LD L,12(IX)

Ahol az ADC-nel eleve az "A" el is hagyhato ugye, a # az viszont nem, mert az jelzi hogy nem memoriara hivatkozil (
lasd: LD A,2 - LD A,(2), ami sdcc assemberenel helyesen: LD A,#2 es LD A,(2) ha jol remlik), mig a "12(IX)" az
Offset(IX) formatumban van, de ugye mashol inkabb az (IX+12) a "normalis" jeloles.

Szoval eleg nagy a kavar, sajnos ninvs olyan nagy foku egyettertes mint pl 65xx asm syntax eseten. Ezert szeretnem osszeszedni az osszes koztudatban levo szintaxist, hogy minnel tobb dologgal elboldoguljon. Ha valakinek ez ugyben van tehat megjegyzese, akkor irjon :)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13431
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #17 on: 2006.June.14. 09:24:18 »
Quote from: "lgb"
Peldaul az sdcc (sdcc.sf.net) olyasmiket hasznal hogy:

ADC A,#12
LD L,12(IX)

Ilyet most látok életemben elöször!

Quote
Szoval eleg nagy a kavar, sajnos ninvs olyan nagy foku egyettertes mint pl 65xx asm syntax eseten. Ezert szeretnem osszeszedni az osszes koztudatban levo szintaxist, hogy minnel tobb dologgal elboldoguljon. Ha valakinek ez ugyben van tehat megjegyzese, akkor irjon :)

Szerintem egyetértés van, legalábbis én EP-n meg egyébként is csak egyfajtát láttam, azt amit a hivatalos Zilog leírásokban is látni. Éppen ezért döbbentem meg az extrém elvadult példádon, hogy ki lehet olyan örült, hogy ilyet kitalál :-)

Offline tigrian

  • EP user
  • *
  • Posts: 401
  • Country: hu
    • View Profile
Re: Assembly programozás
« Reply #18 on: 2006.June.14. 12:51:30 »
Quote from: "lgb"
...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 :D
http://www.zilog.com/docs/z80/um0080.pdf
re' mi' do' do sol

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #19 on: 2006.June.15. 08:31:12 »
Quote from: "Zozosoft"
Quote from: "lgb"
Peldaul az sdcc (sdcc.sf.net) olyasmiket hasznal hogy:

ADC A,#12
LD L,12(IX)

Ilyet most látok életemben elöször!

Quote
Szoval eleg nagy a kavar, sajnos ninvs olyan nagy foku egyettertes mint pl 65xx asm syntax eseten. Ezert szeretnem osszeszedni az osszes koztudatban levo szintaxist, hogy minnel tobb dologgal elboldoguljon. Ha valakinek ez ugyben van tehat megjegyzese, akkor irjon :)

Szerintem egyetértés van, legalábbis én EP-n meg egyébként is csak egyfajtát láttam, azt amit a hivatalos Zilog leírásokban is látni. Éppen ezért döbbentem meg az extrém elvadult példádon, hogy ki lehet olyan örült, hogy ilyet kitalál :-)


Naja. De ha pl vki C nyelven akar fejleszteni, akkor Z80 eseten az sdcc az jo valasztas lehet, ami viszont ilyen asm output-ot keszit, tehat attol hogy neked (nekem se amugy!) nem tetszik ezzel is foglalkozni kell ;-( Legalabbis en igy erzem.

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #20 on: 2006.June.15. 08:32:20 »
Quote from: "tigrian"
Quote from: "lgb"
...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 :D
http://www.zilog.com/docs/z80/um0080.pdf


Amugy, a Z80-at egyebkent ismerem (nem dokumentalt dolgait is) a kerdesem nem is erre vonatkozott, hanem arra, hogy tobbfele syntaxis is hasznalatos assembly forrasokban mint a mellekelt abra mutatja ...

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #21 on: 2006.June.15. 08:53:32 »
Quote from: "tigrian"
Quote from: "lgb"
...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 :D
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).

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13431
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #22 on: 2006.June.15. 08:58:16 »
Quote from: "lgb"

Persze ez elvileg Z80 eseten is megvan, ahol ugye ilyesmire szokas hasznalni a (...) jeleket, viszont pl ezt se erzem mindenhol logikusnak.

Hol nem logikus szerinted?

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
    • View Profile
    • http://lgb.hu/
Re: Assembly programozás
« Reply #23 on: 2006.June.15. 09:44:07 »
Quote from: "Zozosoft"
Quote from: "lgb"

Persze ez elvileg Z80 eseten is megvan, ahol ugye ilyesmire szokas hasznalni a (...) jeleket, viszont pl ezt se erzem mindenhol logikusnak.

Hol nem logikus szerinted?


Globalisan pl. Hogy minden CPU-nak miert kell tok mas asm syntaxis, marmint nyilvan az opcode-ok jeloleset leszamitva? Pl az AT&T syntaxis egyik erdekessege hogy ugyanugy jeloli a cimzesmodokat kulonbozo CPU-n is, meg az egyes CPU gyartok altalaban valami sajat format talalnak ki tok hasonlo dolgokra is, pl MOS 65xx esten LDA #1, mig x86 eseten mov ax,1, az hagyjan hogy LDA !=MOV (mert eleve nem lehet egy cpu-n olyan opcode aminek nincs is kozvetlen megfeleltetese) de a cimzesmod jeloles stb is tok mas. Ezert szoktal valasztani hogy valami konnyebben parse-olhato es egysegsebb format hasznaljanak, hogy ne kelljen az embernek 1234943947db syntaxist megjegyeznie ha mondjuk tobb cpu-ra is programozik assembly-ben (a mar soXor emlitett AT&T szintaxis pl pont ezt akarja behozni, hogy nagyjabol hasonlo legyen meg teljesen kulonbozo CPU-k eseten is, es ne legyen tok mas assember/cpu fuggo).

Na ezzel _NEM_ azt akarom mondani hogy a Zilog altal specifikalt formatum ne lenne jo nekem, csak azt akartam bemutatni, hogy milyen indittatasbol vannak esetleg mas formatumok is, amit en azert akarok tamogatni, hogy mas tool-okkal egyutt tudjak mukodni :) Pont ezert kerdeztem, hogy talalkozott-e valaki mas "extrem" vagy kevesbe kozismert synataxisokkal amit esetleg megfontolas targyava lehetne tenni hogy tudjak "konvertalni" a mar vazolt modszerrel.

Igazabol a konkret esetre valo logikussag kerdese azert jott elo itt nalam, mert a Zilog prezentalt formatum kozel konzisztens, de ha tobb formatumot pl keverni akarod akkor nem az, ami problemakat vet fel, ha mindegyiket tamogatni akarom :) Ez persze nem a Zilog hibaja, nyilvan. Viszont az teny, hogy nekem valahogy meg kell kuzdenem vele, ami egy csomo heurisztikat igenyel emiatt a konverterem reszerol, tehat nem egy egyszeru nota ...

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13431
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #24 on: 2006.September.07. 09:59:26 »
Quote from: "Spidermans Friend"
Én sem értem a hívás mûködését, pl. honna tudja a visszatérési címet, meg ilyesmi.

A visszatérési címet a HL tartalmazza, amelyet a hívás elött a hívó JP utánra állítunk be.
Macró nélkül:
Code: [Select]

      LD HL,RETC
      JP rutin
RETC  ...


rutin ...


      JP (HL)


A macro miatt nem lehet cimkét használni, így a fordítási címszámláló segítségével van megadva a visszatérési cím, mivel az LD HL és a JP is 3 bájtos utasítások, így lett az LD HL,$+6 forma. Illetve a másik makroban van még egy JP, így ott $+9

Quote from: "Spidermans Friend"
De úgy általában is érdekelne a Z80 gépi kód, azon belül az EP programozás. PC-n már assemblyztem, utoljára kb. 10 éve... Ha valakinek van türelme válaszolgatni, az Assembly topikban alkalomadtán kérdezgetnék, vagy ajánlhatnátok valami okítóanyagot.

Tessék lehet kérdezgetni :-)

Irodalomból ajánlott a Gépi Kódú Programozás, meg az Enterpress cikksorozatai.

Offline Spidermans Friend

  • EP fan
  • *
  • Posts: 128
    • View Profile
Re: Assembly programozás
« Reply #25 on: 2006.September.07. 12:51:59 »
Köszi, sejtettem, hogy a dollárjel a fõszereplõ. Még egy kicsit így is magas, de ha átnézem, biztos megértem. Most viszont munka...

Offline hsoft

  • EP fan
  • *
  • Posts: 113
    • View Profile
Re: Assembly programozás
« Reply #26 on: 2006.September.08. 10:13:44 »
Quote from: "Zozosoft"

A macro miatt nem lehet cimkét használni,

Én úgy emléxem, hogy volt rá valami megoldás...

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13431
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #27 on: 2006.September.08. 10:24:51 »
Quote from: "hsoft"
Én úgy emléxem, hogy volt rá valami megoldás...

Az jó lenne!
Itt a Heass leírásban nincs szó ilyenrõl :-(
A második használatánál a macronak már azt írja ki, hogy a szimbólum már létezik.

Offline hsoft

  • EP fan
  • *
  • Posts: 113
    • View Profile
Re: Assembly programozás
« Reply #28 on: 2006.September.08. 19:07:37 »
Sajnos én sem találtam benne, tehát marad a dolláros kifejezés. Viszont akkor a GEN-bõl emlékeztem ilyenre.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13431
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #29 on: 2006.September.09. 20:43:28 »
Quote from: "hsoft"
Sajnos én sem találtam benne, tehát marad a dolláros kifejezés. Viszont akkor a GEN-bõl emlékeztem ilyenre.

És a Heass 1.1.-ben benne lesz? :-)