| OldComp.cz https://oldcomp.cz/ |
|
| Vianocny darcek pre ZX Spektrum https://oldcomp.cz/viewtopic.php?f=40&t=3492 |
Stránka 3 z 3 |
| Autor: | suksoft [ 18.02.2016, 14:23 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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. |
|
| Autor: | danhard [ 18.02.2016, 14:32 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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. |
|
| Autor: | Busy [ 18.02.2016, 21:09 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
danhard píše: Ano, assembler strukturu proměnné neřeší, jenom jí přiřadí paměťový prostor v bajtech. 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.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. 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. 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.
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 |
|
| Autor: | danhard [ 19.02.2016, 02:17 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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á. |
|
| Autor: | Busy [ 19.02.2016, 12:44 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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 ?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..255danhard 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.
|
|
| Autor: | hynek [ 19.02.2016, 14:02 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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. |
|
| Autor: | Busy [ 19.02.2016, 14:23 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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.
|
|
| Stránka 3 z 3 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
| Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |
|