OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 18 čer 2018, 10:56

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 37 ]  Přejít na stránku Předchozí  1, 2, 3
Autor Zpráva
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 18 úno 2016, 13:23 
Offline
Pan Štábní

Registrován: 19 črc 2013, 14:54
Příspěvky: 1233
Has thanked: 52 times
Been thanked: 170 times
Kdyz vidim diskusi tak si myslim ze idelani je se podivat primo do navodu http://www.worldofspectrum.org/pub/sinc ... etheus.pdf

strana 17 cast "vyrazy" a strana 16 cast "DEFB"

Pak je jasne jak to ten system dela. Proste kdyz mu vyjde zaporne cislo ve vyrazu, tak z nej udela kladne prictenim 65536 a pak veme 8 nizsich bitu a ty ulozi do DEFB. Take jinak receno, kdyz mu vyjde vyraz v rozsahu -256 az -1 tak proste pripocte 256 a vysledek da do DEFB mista. On vlastne nic nepripocitava jen povoli zapis do DEFB.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 18 úno 2016, 13:32 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1761
Bydliště: Jesenice
Has thanked: 7 times
Been thanked: 104 times
A to je to o čem píšu :)
DB, DEFB - Define Byte dělá definici hodnoty jednoho Byte, tato definice by měla být jednoznačná, a pokud implementace hodnoty prochází nějakými nestandardními procedurami, tak by na to měl překladač minimálně upozornit.
Prostě to přetečení přes standardní rozsah by mělo být zřejmé v této fázi překladu a nemělo by se řešit zkoumáním nad vlastnostmi překladu nestandardních hodnot konkrétního překladače. Tečka.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 18 úno 2016, 20:09 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1857
Bydliště: Bratislava
Has thanked: 203 times
Been thanked: 342 times
danhard píše:
Ano, assembler strukturu proměnné neřeší, jenom jí přiřadí paměťový prostor v bajtech.
Ale když přiřazuje jednobajtovou hodnotu, tak tomu musí rozumět, aby přiřadil hodnotu jednoznačně.
A rozumí tomu dobře, když chci naplnit hodnotu do integer bez znaménka, dekadicky 0 až 255, integer se znaménkem, dek. hodnota -128 až 127, nebo string - tabulkovou hodnotu znaku, nebo přímo binárně.
Všechny ostatní implementace musím "nějak" osekat a to "nějak" není standardně definované a vždy způsobí ztrátu informace.
Ale v asembleri nemas standartne definovany ani rozsah -128 až 127, ale keby si aj mal, tak uz aj samotne ulozenie zaporneho cisla (-1..-128) sposobi stratu informacie.
danhard píše:
V r.82, když se u nás začínalo s mikroprocesory, jsem si napsal pod ADT4500 univerzální assembler, do kterého jsem si postupně doplňoval mikroprocesory, které jsem potřeboval oživit.
V tý době žádnej internet nebyl a vývojové prostředí stálo většinou pěkný prachy.
Nesnažte se starýho psa přesvědčit, že se mají překladače psát jinak :)
No pokial si si ty explicitne zadefinoval, ze jednobatove cisla budes pri kompilacii interpretovat bud ako hodnoty v rozsahu 0 až 255, alebo ako hodnoty v rozsahu -128 až 127, to je samozrejme tvoje rozhodnutie nad ramec asemblerovych principov ako takych. Jedine, o com som ta chcel ja presvedcit, je to ze vo vseobecnosti v asembleri neexistuju standartne rozsahy cisel tak ako ich pozname z vyssich programovacich jazykov. V asembleri si ja mozem bez problemov napisat napriklad LD A,-200 a (temer) vsetkym kompilerom bude uplne jasne ze do A sa dava hodnota #38, kdezto vo vyssom jazyku by nieco ako char a = -200; nepreslo pretoze -200 pretecie rozsah jednobajtoveho integeru a kompiler to uz nevie nacpat do jedneho bajtu.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 19 úno 2016, 01:17 
Offline
Pan Štábní

Registrován: 16 čer 2014, 11:23
Příspěvky: 1761
Bydliště: Jesenice
Has thanked: 7 times
Been thanked: 104 times
Busy píše:
V asembleri si ja mozem bez problemov napisat napriklad LD A,-200 a (temer) vsetkym kompilerom bude uplne jasne ze do A sa dava hodnota #38, kdezto vo vyssom jazyku by nieco ako char a = -200; nepreslo pretoze -200 pretecie rozsah jednobajtoveho integeru a kompiler to uz nevie nacpat do jedneho bajtu.

No a na co je to dobré, že to zpracuje číslo, které se do jednobajtového nevejde a uloží se tam jen spodní byte výsledku ? Tady je to protože si tvůrce assambleru zjednodušil práci a na převod na binární hodnotu používá stejnou rutinu i pro DEFW a nedělá žádnou kontrolu.
Ale jak sám píšeš (temer) spolehnout se na to nedá.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 19 úno 2016, 11:44 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1857
Bydliště: Bratislava
Has thanked: 203 times
Been thanked: 342 times
danhard píše:
Busy píše:
V asembleri si ja mozem bez problemov napisat napriklad LD A,-200 a (temer) vsetkym kompilerom bude uplne jasne ze do A sa dava hodnota #38, kdezto vo vyssom jazyku by nieco ako char a = -200; nepreslo pretoze -200 pretecie rozsah jednobajtoveho integeru a kompiler to uz nevie nacpat do jedneho bajtu.
No a na co je to dobré, že to zpracuje číslo, které se do jednobajtového nevejde a uloží se tam jen spodní byte výsledku ?
Z pohladu vyssich jazykov pouzivajucich signed / unsigned integer sa do bajtu nezmesti, ale asembler takymito predsudkami nastastie netrpi :) Cisto z pohladu kompilera, 200 je hodnota ktora sa do bajtu v pohode vojde a znamienko minus znamena, aby kompiler pri vypocte daneho bajtu tejto hodnote urobil dvojkovy doplnok (invertovanie vsetkych bitov + inkrementacia). Ja osobne v tom ziadny problem nevidim :)
A naco je to dobre ? Napriklad na to, ked potrebujem do daneho bajtu zakodovat iba zaporne hodnoty od -1 do -256, resp. ked viem, ze aplikacia s danym bajtom naraba vzdy ako so zapornou hodnotou (napr. nieco ine vzdy zmensi o hodnotu od 1 do 256, podla tohto bajtu).
danhard píše:
Tady je to protože si tvůrce assambleru zjednodušil práci a na převod na binární hodnotu používá stejnou rutinu i pro DEFW a nedělá žádnou kontrolu.
Ani nie tak zjednodusil, ako skor poskytol programatorovi viac volnosti ako narabat s hodnotou. Vo vyssich jazykoch tato sloboda nie je a tam kompiler musi vediet, akym sposbom ma dalej intepretovat ten bajt (signed ci unsigned), kdezto asemblerovy kompiler to vediet nemusi, cielom asembleroveho kompilera je iba vyprodukovat tento bajt, a preto nie je nutne programatora obmedzovat na dva konkretne (vo vyssich jazykoch obvykle pouzivane) rozsahy -128..+127 alebo 0..255
danhard píše:
Ale jak sám píšeš (temer) spolehnout se na to nedá.
"Temer" som napisal preto lebo (ako som pochopil) konkretne tvoj univerzalny assembler pre ADT4500 tuto slobodu programatorovi neposkytuje. Ale vsetky asemblery, s ktorymi som ja v zivote robil, ju poskytuju.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 19 úno 2016, 13:02 
Offline
Kecálek

Registrován: 07 kvě 2014, 11:10
Příspěvky: 107
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 20 times
Busy píše:
danhard píše:
Ale jak sám píšeš (temer) spolehnout se na to nedá.
"Temer" som napisal preto lebo (ako som pochopil) konkretne tvoj univerzalny assembler pre ADT4500 tuto slobodu programatorovi neposkytuje. Ale vsetky asemblery, s ktorymi som ja v zivote robil, ju poskytuju.

Podle mne jde vic o komfort: prekladac by mel naplnit spravne zadany byte - coz udela - a navic poskytnout informaci (warning) o tom, ze zadana hodnota je vetsi nez povoluje misto ulozeni. Pokud chci mit preklad bez warningu, tak vetsina prekladacu ma moznosti, jak zadavany rozsah omezit: treba funkce AND nebo funkce pro vlozeni nizsiho bytu konstanty apod.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Vianocny darcek pre ZX Spektrum
PříspěvekNapsal: 19 úno 2016, 13:23 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1857
Bydliště: Bratislava
Has thanked: 203 times
Been thanked: 342 times
hynek píše:
Podle mne jde vic o komfort: prekladac by mel naplnit spravne zadany byte - coz udela - a navic poskytnout informaci (warning) o tom, ze zadana hodnota je vetsi nez povoluje misto ulozeni. Pokud chci mit preklad bez warningu, tak vetsina prekladacu ma moznosti, jak zadavany rozsah omezit: treba funkce AND nebo funkce pro vlozeni nizsiho bytu konstanty apod.
To je absolutne v poriadku. Pokial napisem napr. ld a,-257 tak kompiler warninguje ze 257 sa do bajtu uz nevojde a hodnota bude osekana na spodnych osem bitov.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 37 ]  Přejít na stránku Předchozí  1, 2, 3

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz