Oznámení

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

Assembler - všeobecná logika

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

    Assembler - všeobecná logika

    OK,

    dotaz, nějak mi nedává logiku to jak je zde něco vysvětleno. Použiji tedy svou zvrácenou logiku a omlouvám se, když napíšu pitomost, začínám a učím se!

    Článek Assembler a systém z Amiga Review 5:


    Citace z odstavce pro "Stavový registr SR"
    Nejlépe to ozřejmí příklad: Mějme BYTE SE ZNAMÉNKEM (A) a BYTE BEZ ZNAMÉNKA (B). Jak víte, rozsah (A) je od -128 do +127, rozsah (B) od 0 do 255. Jak (A) tak i (B) budou mít hodnotu 126 ($7E). Co se stane, když k (A) i (B) přičteme 3? V případě (A) dostaneme 126($7E)+3=129($81),což je mimo rozsah. Bude tedy nastaven příznak přenosu (overflow) a výsledná hodnota (A) bude po operaci -127($81). V případě (B) dostaneme 126($7E)+3 = 129($81), což je v platném rozsahu, takže příznak přenosu (carry) nastaven nebude. Všimněte si, že v obou případech je šestnáctková reprezentace čísel stejná, rozdíl je pouze ve způsobu, jakým tyto hodnoty interpretujeme.
    1) Citace: "V případě (A) dostaneme 126($7E)+3=129($81),což je mimo rozsah. Bude tedy nastaven příznak přenosu (overflow) a výsledná hodnota (A) bude po operaci -127($81)"
    Rozumím tomu, že jsme v prvním prípadě použili Byte se znaménkem (overflow). To "-" před 127 je tam kvůli tomu přetečení? Výslední hodnota "A" bude po operaci -127, proč je tedy zatím v závorce 129ka? (Hexa $81 = 129). Hodnota 129 bude ztracena?

    2) Citace: "V případě (B) dostaneme 126($7E)+3 = 129($81), což je v platném rozsahu, takže příznak přenosu (carry) nastaven nebude."
    Zde jsme použili Byte bez znaménka (příznak carry "C"). Proč se nám příznak přenosu změní z "C" na "V"? Jak se píše "takže příznak přenosu (carry) nastaven nebude."

    Dle mne ve 2) zůstane příznak přenosu "C". Jsme přeci pořád v rozsahu 1 Byte s příznakem "C" tedy v rozsahu 0-255 ne? Příznak "C" nebude nastaven, kdyby hodnota čísla přesáhla v případe 2) číslo 255 a pak by se změnil příznak z "C" na "V"? A pak by měla hodnota Bytu B číslo -255?
    Amiga - PMD 85

    #2
    O: Assembler - všeobecná logika

    Tak uz si sa dal na asm ? Si robis srandu, nie ?

    Scitanie aj odcitanie sa na 68k robi rovnako aj so znamienkom aj bez znamienka.

    Cize ked das 126+3, tak vysledok je stale 129 ($81).
    Zalezi na tebe s akymi hodnotami robis (ci so znamienkom=signed alebo bez znamienka=unsigned).
    V Cecku si si dal bud BYTE alebo UBYTE.
    V Asm, ak mas na mysli so znamienkom kontrolujes si V priznak. Ak mas na mysli bez znamienka kontrolujes si C priznak v SR.

    K tej 1) :
    Ked mas rozsah od -128 do +127, tak 126+3 = -127 preto lebo si presiahol hornu hranicu rozsahu (overflow) a zvysok priratavas od spodnej hranice rozsahu. Keby si mal 126+4, tak ti vyjde -126, 126+5=-125, atd...
    Keby si bol v rozsahu, napr 123+3=126, tak ti nenastavi priznak pretecenia (overflow = V)

    k tej 2):
    Priznak prenosu sa nemeni z C na V ! Len sa nastavuje priznak V (pretecenie) a N (negativne). Je to koli tomu ako som pisal na zaciatku, 68k procesor scita 126+3 a vysledok je 129 a nastavi priznaky. Zalezi na programatorovi ako s tym nalozi, ci to bude brat ako 129 alebo ako -127.
    Ked si das napr. 254+3, tak ti vyjde 1 a nastavi sa priznak C a priznak X, lebo si prekrocil rozsah 255.
    Neviem ako si dostal -255, ked robis v rozsahu od 0 do 255.

    Plati, co si sa docital aj v AR: Rozdiel je len ten, akym sposobom hodnoty INTERPRETUJEME !
    Zase ti mozem odporucit, ak uz mas nainstalovany AsmOne alebo AsmPro, sprav si jednoduchy program, skompiluj a spust ho a pozri si hodnoty v registroch a priznaky...
    Neviem naco ti to tu vlastne pisem, aj tak sa na to vyprdnes ako na C....

    Au revoir !

    PS: Mal si dat nadpis: "Assembler - Lisiakova logika"
    Naposledy upravil DJM; 31.10.2015, 18:30:19.
    Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
    Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

    Komentovat


      #3
      O: Assembler - všeobecná logika

      Tvojmu vysvetleniu rozumiem. Ja som neskoncil s C len idem do toho, comu najmenej rozumiem. C, C++ a Assembler mám v hladáčiku a plánujem sa s týmito jazykmi hrať. Takže podľa chuti se budem venovať jednému z týchto 3 programovacích jazykov. Keď teda nebudem mať chuť na Assembler, začnem so základmi C++, alebo budem pokračovať s C kde som skončil. To že som sem dlhšie ohľadom C nenapísal neznamená, že som sa mu vobec nevenoval. V rámci klasického C sa nemám čo pýtať, alebo si vážne myslíš, že sa musím vždy na všetko pýtať? .

      Keď skončím s C tak skončím so všetkým a nie len s C. To by som ale urobil radosť pár ľudom. Ale nemáš šainu, ako veľmi to chcem zvládnuť tak aký koniec doprdele!

      Veľmi si vážim tvojich rád. Máš horúcu krv, ale to je len dobre. To je veľmi dobre! Najlepší predpoklad k tomu aby si si išiel svoju cestu. Nejlepší predpoklad k tomu, aby si nám tu zostal čo najdlhšie.
      Amiga - PMD 85

      Komentovat


        #4
        O: Assembler - všeobecná logika

        Skus jednoduchy cyklus:

        moveq #$00,d0
        Loop:
        add.b #$01,d0
        bpl loop

        rts

        Tento cyklus bude trvat pokial v D0 nebude zaporne cislo.
        Spusti si debugger/trasovanie prikazom AD a sipkou dole krokujes.

        Klikni pro plné zobrazení obrázku

Jméno: Pic01.jpg
Počet zobrazení: 1
Velikost: 35,7 KB
ID: 108661
        A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

        Komentovat


          #5
          O: Assembler - všeobecná logika

          Dočítam si to čo je v Amiga Review a budem sa snáď hrať ďalej (a možno aj skor a nebudem čítať do konca). Ale neboj Obi, pokiaľ sa budem hrať ďalej k tomu tvojemu príkladu sa vrátim! Vďaka! Beriem to všetko, ako to príde a sa mi chce. Teraz už som kaput. Som chorý a mám migrénu už o moc viac nedám.
          Amiga - PMD 85

          Komentovat


            #6
            O: Assembler - všeobecná logika

            Jak donutím ten editor v Asm-Pro, aby mi psal zdrojový text, tedy text černým písmem, když nechci uvést návěstí? Mezery tabulátorem dělám. Ale bez návěstí mi vždy začne psát bílý text co je asi špatně. A po startu Asm-Pro musím pořád odkliknout rozlišení. To se nedá nějak obejít, aby jsem nemusel udělat ten 1 klik? Je to prkotina, ale ptám se.
            Amiga - PMD 85

            Komentovat


              #7
              O: Assembler - všeobecná logika

              Farby si nastavujes v Preferences/Syntax colors, mozno mas nastavene ine ako je na mojom obrazku. Preto ine farby.
              V zaklade:
              V prvom stlpci (celkom vlavo) pises navestia.
              Dalej ked stlacis TAB pises instrukcie, mozes pouzit aj 2xTAB alebo aj 3xTAB.
              Ja osobne pouzivam 2xTAB.

              Aj rozlisenie nastavujes v Preferences, ako aj typ CPU a dalsie veci.
              Ak chces potom zapisat nastavenie, kliknes na SAVE/USE alebo z príkazového riadku zadas WP (Write Preferences).
              A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

              Komentovat


                #8
                O: Assembler - všeobecná logika

                Ano všimol som si, že používaš 2 krát TAB, ale pletie ma, že keď začnem písať návestie ktoré je v bielej farbe ako u Teba a dám TAB, prejde sa v editore na čiernu farbu - tak ako u Teba. Ale keď nenapíšem návestie a dám TAB ostane mi farba písma biela, ako keby sa stále jednalo o návestie... .
                Amiga - PMD 85

                Komentovat


                  #9
                  O: Assembler - všeobecná logika

                  Pre spresneneie, najake moje nastavenia.


                  Klikni pro plné zobrazení obrázku

Jméno: Pic1.jpg
Počet zobrazení: 1
Velikost: 120,8 KB
ID: 108662

                  Klikni pro plné zobrazení obrázku

Jméno: Pic2.jpg
Počet zobrazení: 1
Velikost: 108,8 KB
ID: 108663

                  Klikni pro plné zobrazení obrázku

Jméno: Pic3.jpg
Počet zobrazení: 1
Velikost: 81,4 KB
ID: 108664
                  A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

                  Komentovat


                    #10
                    O: Assembler - všeobecná logika

                    Autorem citovaného textu je Lisiak4 Přejít na původní příspěvek
                    Ano všimol som si, že používaš 2 krát TAB, ale pletie ma, že keď začnem písať návestie ktoré je v bielej farbe ako u Teba a dám TAB, prejde sa v editore na čiernu farbu - tak ako u Teba. Ale keď nenapíšem návestie a dám TAB ostane mi farba písma biela, ako keby sa stále jednalo o návestie... .
                    Tomu nerozumiem, mne to po TAB zacne hned pisat Ciernou.
                    A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

                    Komentovat


                      #11
                      O: Assembler - všeobecná logika

                      Skontroluj nastavenie farieb. Alebo napis program a spusti kompilaciu.
                      Len pre kontrolu
                      A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

                      Komentovat


                        #12
                        O: Assembler - všeobecná logika

                        Bolo to v tom nastavení farieb, ale to chovanie miatlo... . Díky!
                        Amiga - PMD 85

                        Komentovat


                          #13
                          O: Assembler - všeobecná logika

                          Jen by mne něco zajímalo. Pokud pracujeme v rámci 1 byte se záporným číslem, máme k dispozici rozsah:
                          -128 až 127

                          Jeden datový registr je nám schopen uložit číslo maximálně o rozsahu 4 byte. To je když nepracujeme se záporným číslem:
                          0 až 4,294,967,295 (to je OK)

                          Pokud ale pracujeme se záporným číslem a tohle info je uvedeno v článku o Assembleru v Amiga Review tak pracujeme s maximálním rozsahem:
                          -2,147,483,647 až +2,147,483,647
                          tedy rozsah byl ukrácen o jedničku. Dle toho, jak se s záporným číslem pracuje v rozsahu 1 byte (tedy -128 až 127) by jsem čekal, že rozsah v rámci 4 byte bude:
                          -2,147,483,648 až +2,147,483,647

                          Né že by se v programování muselo pracovat zrovna s číslem -2,147,483,648 .
                          Je tahle info z Amiga Review v pořádku? Nejaký logický důvod, proč tomu tak je, proč je práce se záporným číslem v rozsahu 4 byte ponížena o 1, když tomu tak s prací v rozsahu 1 byte není?
                          Amiga - PMD 85

                          Komentovat


                            #14
                            O: Assembler - všeobecná logika

                            Je jedno co sa pise.

                            V assemblery chod do príkazového riadku a zadaj:

                            ? $7fffffff

                            Vypise ti výsledok vo formate -> HEX DEC ASCI BIN. A toto cislo je aj najvacsie kladne cislo. Bit 31 je 0.

                            Potom zadaj:
                            ? $80000000

                            a dostanes najmensie zaporne cislo, aj ked to vyzera na zapornu nulu.
                            A zistis ci je chyba v AR alebo nie.
                            Naposledy upravil ObiWanKen; 02.11.2015, 11:26:08.
                            A600 Furia020 | A1200 PiStorm32 Lite | A1200 ACA 1231 | Sharp MZ800 | ZX Spectrum | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2 | Nintendo DS | MiST

                            Komentovat


                              #15
                              O: Assembler - všeobecná logika

                              OK, je tam chyba. Najmenšie záporné číslo, ktoré sa nám vojde do datového registru je:
                              -2,147,483,648
                              Amiga - PMD 85

                              Komentovat

                              Zpracovávám...
                              X