Oznámení

Sbalit
Aktuálně žádná oznámení.

Assembler - všeobecná logika

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

  • DJM
    odpověděl
    O: Assembler - všeobecná logika

    Pamat si mozes alokovat pomocou sys funkcii este nez odstavis system...

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    Autorem citovaného textu je Lisiak4 Přejít na původní příspěvek
    ...a možem ísť nabudúce na alokáciu pamati .
    A, to je systémové prideľovanie pamati, ako to tak vyzerá, Amiga Review 8,9,10,11 možem zatiaľ preskočiť .

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    Super díky obom, Obi skúsim neskor. Už mi je to jasné. Najvačší problém bola pitomosť, že RTS na konci programu musí ukončovať celý program a tak som nezklamal a opat to vyriešil mojou zvrátenou logikou . Preto som si RTS pod BSR pridružil k BSR aj keď som si vravel, že by mal byť na konci celého podprogramu, ale tam bolo RTS pre mňa ukončujúce celý program a tak som to pochopil zle. To bola taká posledná vec ktorú som z tohoto príkladu chcel pochopiť. Príkladu teda rozumiem k mojej spokojnosti a možem ísť nabudúce na alokáciu pamati .

    Vložit komentář:


  • ObiWanKen
    odpověděl
    O: Assembler - všeobecná logika

    Ak velmi tuzis po .b .w tak si spusti optimalizaciu prikazom AO z prikazoveho riadku.

    Vložit komentář:


  • DJM
    odpověděl
    O: Assembler - všeobecná logika

    Ked si to odkrokujes, tak by si to mal zbadat.

    Tu mas priebeh toho programu:
    1. krok - do a0 sa nastavi adresa retazca1 (lea)
    2. skoci sa na podprogram NajdiA (bsr), z ktoreho sa vrati vdaka rts na konci tohto podprogramu
    3. program pokracuje dalej za bsr, co je v tomto pripade rts a teda ukonci program

    Cize odpoved na tvoju otazku je nie. RTS za BSR NajdiA sa vykona ako posledne v celom programe.

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    Code:
    ;=========================
    ;Tohle si taky odkrokujte v debuggeru 
    ;=========================
    
                  SECTION prg,CODE
    START         LEA retezec1(pc),a0
                  BSR NajdiA ;tím že neuvedu u bsr ".s" nebo ".w" nechám prostor assembleru aby to udělal sám (nebo mi vynadal)
                  RTS ;teď ve v D0 výsledek
    ;tady je testovací text ve kterém se hledá první "A" všimněte si že řetězce (stringy) se ukončují nulou
    retezec1      DC.b "To jsem zvedav jestli to tady"
                  DC.b " to A vubec najde!",0
                  CNOP 0,4 ;nezapomeňte udržovat začátky rutin aligned
    ;Tato rutinka chce jako parametr adresu stringu v A0 a vrátí v D0 adresu prvního znaku "A" (velké A) v tomto stringu nebo nulu pokud žádný nenajde.
    NajdiA          MOVE.l a0,-(sp) ;schovat původní A0
    .smycka       MOVE.b (a0)+,d0 ;načtu si znak, Z bude nastaven pokud načtu 0, která označuje konec stringu
                   BEQ .nenasel ;byla to nula - nenašel jsem A
                   CMP.b #"A",d0 ;bylo to "A"?
                   BNE .smycka ;nebylo-zkus další znak
                   SUBQ.l #1 ,a0 ;a0 teď ukazuje hned ZA A - spravit
                   MOVE.l a0,d0 ;do D0 adresu "A"
                   BRA.s .konec ;pokračuj ke konci
    .nenasel        MOVEQ #0,d0 ;nenašel - vracím nulu
    .konec          MOVE.l (sp)+,a0
                   RTS
    To RTS za BSR NajdiA se vykoná před RTS na konci programu?
    Naposledy upravil Lisiak; 25.02.2016, 19:43:33.

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    No, som detailista. V rámci asm okrem toho S je len zatiaľ 1 vec ktorej nerozumiem. Ale to beriem ako fakt, že tak tá vec funguje a nemám potrebu ju riešiť. Takže okrem toho S nemám čo riešiť. Ja si zatiaľ B,W,L budem určovať pevne, neviem, prečo by som asm mal dávať v tomto voľnú ruku. Pri relatívných skokoch to vobec neni treba.

    Som z programovaia v asm lamer. V rámci napríklad vás dvoch z asm najhorší a úplne na začiatku. Ale názor mať možem. Python ma dosť naučil. Programovanie je exaktná vec. Kompromisy možu byť pri zdokonaľovaní sa. Potom už píšeš veci buď najlepšie, alebo horšie. Tam neni niečo ako toto je blbosť a nemusíš to vedieť. Tam buď vieš, alebo nevieš. A ten kto vie je lepší. Sú to presne stanovené pravidlá. A všetky tieto pravidlá sú podriadené schopnostiam programátora. A presne to je vec, kvoli ktorej se progrmovaniu venujem aj naďalej. Mám rád presne stanovené veci. Samozrejme na tie presne stanoveneé veci je sa treba pozerať s nadhľadom. Može byť aj niekoľko veľmi dobrých riešení a každé z nich može mať svoje + a -. Ty si veberieš svoje riešenie a pokúsiš sa ho urobiť najlepšie ako vieš.

    Píšem veci tak ako ich vidím teraz. Zajtrajšok je pre mna budúcnosť. Neviem, ako dlho ma bude programovanie baviť. Motivácia tam ale stále jednozančne je.Jeden z faktorov motivácie je, že si určite niekto myslí, že na to nemám. No a ja to tiež chcem zistiť, či tento člověk má pravdu. Zatiaľ nemám chuť nechať niekoho takého vyhrať, lebo chuť po tom to dokázať je vačšia, ako chuť potom opustit bojisko . Týmto by som chcel poďakovať všetkým, čo mi neveria .

    Vložit komentář:


  • DJM
    odpověděl
    O: Assembler - všeobecná logika

    Ja som zas toho nazoru, ze bra.s znamena pre niektore (slabsie) kompilery, aby dal co najmensiu hodnotu (.b .w .l) podla potreby, lebo bez zadania dlzky sa da v kompileroch dlzka nastavit napr. aby tam daval word, cize ked napisem move d0,d1 tak to podla nastavenia kompilera prelozi ako move.w d0,d1. Pri takom nastaveni ked dam bra skok , tak by to kompiler mohol chapat ako bra.w skok a pre to sa tam pise .s. Ale slusny kompiler by to mal upravit. Moj nazor, kazdopadne som bra.s v zivote nepouzil a ani nepouzijem...

    PS: A zase tu riesime taku zbytocnost...
    Naposledy upravil DJM; 12.02.2016, 19:55:41.

    Vložit komentář:


  • ObiWanKen
    odpověděl
    O: Assembler - všeobecná logika

    Na riadky to prepocitavat nemozes, ak budes mat 15000 riadkov len instrukciu RTS ktora ma dva bytes, tak vtedy ano. Ale realita je ina, instrukcie maju rozne velkosti takze riadky ako "mernu" jednotku pouzivat nemozes.

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    Asi beru zpět ten dotaz, protože to asi nemáš vše v jedné SECTION...

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    Je to len uhol pohľadu, viem, že to asm nastavuje. ...Áno až 020ka. Však som na to zavtipkoval s tou A1200 . Asi aj pri tých 15 tisícich riadkoch by mohol stačit relatívny skok v rámci W... ?

    Vložit komentář:


  • ObiWanKen
    odpověděl
    O: Assembler - všeobecná logika

    No a toto riesi kompilator sam. Ked nestaci .B tak da .W ak ani to da .L

    Skoda sa trapit niecim takymto. Tusim Bxx.L ani 68000 nepodporuje. Az vyssia rada CPU.
    Naposledy upravil ObiWanKen; 11.02.2016, 23:27:21.

    Vložit komentář:


  • Lisiak
    odpověděl
    O: Assembler - všeobecná logika

    Tak pri týchto skúšobných programčekoch stačí snaď B, ale načo počítať, však dáš B a keď ťa asm prefacká, tak dáš W a nepredpokladám, že budem musieť dlhšiu dobu dávať L, čo ide v rámci PC relatívneho skusku len na 020ke. Načo by sme robili v rámci L absolutný skok na A600, keď A600 možeme dať do skrine a na stol položiť A1200 )
    Naposledy upravil Lisiak; 11.02.2016, 23:10:03.

    Vložit komentář:


  • ExiE
    odpověděl
    O: Assembler - všeobecná logika

    jasne vetsina kompilatoru na Amize to resi sama, nicmene jsou i takove, ktere to proste neumi a tam je to pak treba zadat rucne.

    Vložit komentář:


  • ObiWanKen
    odpověděl
    O: Assembler - všeobecná logika

    Pri skokoch Bxx vobec neries velkost, toto si obsluzi assembler/kompilator sam. Predsa nebudes pocitat ako "daleko" budes skakat a podla toho davat .b .w. priponu
    Naposledy upravil ObiWanKen; 11.02.2016, 22:20:46.

    Vložit komentář:

Zpracovávám...
X