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

    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.

    Vložit komentář:


  • Lisiak
    založil téma Assembler - všeobecná logika

    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?
Zpracovávám...
X