| OldComp.cz https://oldcomp.cz/ |
|
| Vianocny darcek pre ZX Spektrum https://oldcomp.cz/viewtopic.php?f=40&t=3492 |
Stránka 2 z 3 |
| Autor: | Busy [ 14.02.2016, 21:18 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Billy48 píše: Este doplnim, ze ked som pouzil PROMETHEUS, tak v nom treba vlozit jr nc,$+2 co mna prekvapilo. Tak to je fakt divne. Pretoze znak $ je vo vsetkych asembleroch co poznam (vratane MRS aj SjASM) definovany ako zaciatocna adresa riadku, na ktorom sa pouzije. Cize ak je na riadku jedna instrukcia, je to VZDY prvy bajt tejto instrukcie.#8000 jr $+3 #8002 inc l Znak $ ma v tomto pripade hodnotu #8000, takze jr $+3 znamena obskocenie instrukcie inc l. Pokial to ma Prometeus nejak inak, je to bug. Alebo nedodrzuje zauzivane standarty... |
|
| Autor: | rombor [ 14.02.2016, 21:54 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Nechcelo sa mi to veriť, tak som to v Prometheovi vyskúšal. A je to pravda. Ak sa $ objaví v inštrukcii, má hodnotu adresy až za kódom inštrukcie, nie pred, ako by sa očakávalo. Kód: #8000 LD HL,$ -> 21 01 80 #8003 LD IX,$ -> DD 21 05 80 Pri použití $ v DEFW si so správnosťou vyhodnotenia nie som istý. Mala by tam byť 3x rovnaká adresa, alebo je to takto správne? Kód: #8000 DEFW $,$,$ -> 00 80 02 80 04 80 Predsalen som ešte urobil pokus v Macro Assembler AS a ten vyhodnocuje $ za inštrukciou správne. Pri použití v DEFW $,$,$ sú všetky 3 hodnoty rovnaké. |
|
| Autor: | Billy48 [ 15.02.2016, 00:21 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Busy píše: Tak to je fakt divne. Pretoze znak $ je vo vsetkych asembleroch co poznam (vratane MRS aj SjASM) definovany ako zaciatocna adresa riadku, na ktorom sa pouzije. Presne tak som to aj pochopil a zdalo sa mi divne, ako to prometheus preklada, tak som to sem doplnil, aby sa o tom vedelo.rombor píše: Nechcelo sa mi to veriť, tak som to v Prometheovi vyskúšal. A je to pravda. Som rad ze si to vyskusal a potvrdil, mohol som sa zmylit. Takze pri skokoch treba pouzivat navestia a pri $ 3x merat a raz rezat A skusal som aj pod Linuxom assembler PASMO, ktory obcas pouzijem (castejsie sa hrajem s PROMETHEOM na DIDAKTIKU) a ten kompiluje tak ako sa patri. Kód: PASMO assembler pod Linuxom: -------------------------------------------------- #8000 ld hl,$ ;21 00 80 #8003 ld ix,$ ;DD 21 03 80 #8000 defw $,$,$ ;00 80 00 80 00 80 vsetko je OK. A este som skusil taku haluz: Kód: Kompilator pasmo: Takze zase v tomto pripade to ma prometheus osetrene a pasmo vlozi len jeden bajt z dvoch(ten menej vyznamny) co je podla mna chyba. Tiez by to malo vypisat chybu, ze nieje mozne vlozit dva bajty do jedneho.skompiloval bez problemov. defb $,$,$ ;00 00 00 ale PROMETHEUS pri defb $,$,$ ;vypisal - Big number A este dotaz poznate tu niekto nejaky free disassembler pre Z80? Ja obcas pouzijem z80dasm, ale ten nie je podla mojich predstav. |
|
| Autor: | Busy [ 15.02.2016, 12:43 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
rombor píše: Kód: #8000 DEFW $,$,$ -> 00 80 02 80 04 80 A najlepsie je, ze vsetky priklady pouzitia $ v manuali Prometea su iba s pseudoinstrukciami ktore negeneruju ziadny realny kod (ent, equ...) a pri ktorych sa tym padom chyba neprejavi. |
|
| Autor: | Busy [ 15.02.2016, 12:58 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Billy48 píše: A este som skusil taku haluz: Napis na zaciatok org mensi ako 250 a ani prometheus uz nebude protestovat Kód: Kompilator pasmo: Takze zase v tomto pripade to ma prometheus osetrene a pasmo vlozi len jeden bajt z dvoch(ten menej vyznamny) co je podla mna chyba. Tiez by to malo vypisat chybu, ze nieje mozne vlozit dva bajty do jedneho.skompiloval bez problemov. defb $,$,$ ;00 00 00 ale PROMETHEUS pri defb $,$,$ ;vypisal - Big number Ale k veci. Pokial uzivatel napise defb alebo db tak je jasne ze ide iba o jednobajtove hodnoty a pre viacbajtove hodnoty sa vyssie bajty urezu. Zase ale na druhej strane je od asemblera slusne ked upozorni na to ze cislo sa do bajtu nevlezie. Konkretne MRS to ma osetrene tak, ze ak je vyssi bajt hodnoty #00 alebo #FF tak do kodu vlozi nizsi bajt hodnoty, a az vyssi bajt hodnoty je od #01 do #FE tak az potom vypise chybu. Ta hodnota #FF vo vyssom bajte je interne povolena preto lebo to moze byt zaporna hodnota, napr. -1 znamena #FFFF a ked uzivatel napise ld a,-1 tak aby sa to spravne a bez chyby prelozilo. Billy48 píše: poznate tu niekto nejaky free disassembler pre Z80? Ja obcas pouzijem z80dasm, ale ten nie je podla mojich predstav. A ake su tvoje predstavy ?Ja osobne pouzivam priamo na speccy moje dva programy SMM05 a MRS09/2, a na PeCi nejaky DASMx stiahnuty z netu: Kód: DASMx object code disassembler a pokial potrebujem vygenerovat zdrojak aj s navestiami, tak potom pouzivam moje Mdisa2 http://busy.speccy.cz/tvorba/mdisa.htm
============================== (c) Copyright 1996-1999 Conquest Consultants Version 1.30 (Oct 6 1999) |
|
| Autor: | rombor [ 15.02.2016, 19:44 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Busy píše: Ale k veci. Pokial uzivatel napise defb alebo db tak je jasne ze ide iba o jednobajtove hodnoty a pre viacbajtove hodnoty sa vyssie bajty urezu. Zase ale na druhej strane je od asemblera slusne ked upozorni na to ze cislo sa do bajtu nevlezie. Konkretne MRS to ma osetrene tak, ze ak je vyssi bajt hodnoty #00 alebo #FF tak do kodu vlozi nizsi bajt hodnoty, a az vyssi bajt hodnoty je od #01 do #FE tak az potom vypise chybu. Ta hodnota #FF vo vyssom bajte je interne povolena preto lebo to moze byt zaporna hodnota, napr. -1 znamena #FFFF a ked uzivatel napise ld a,-1 tak aby sa to spravne a bez chyby prelozilo. Prometheus spracováva DEFB tak, ako si to popísal. Hodnota môže byť v intervale <-256, 255>.AS však dovoľuje hodnotu v DEFB iba v intervale <-128, 255>. Zvláštne... |
|
| Autor: | danhard [ 16.02.2016, 18:11 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Jak se implementuje hodnota -256 do jednoho bajtu ? |
|
| Autor: | rombor [ 16.02.2016, 18:39 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
danhard píše: Jak se implementuje hodnota -256 do jednoho bajtu ? Keďže -256 je #FF00, tak je to na základe vyššie popísaných pravidiel proste #00.
|
|
| Autor: | danhard [ 16.02.2016, 19:09 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Aby to mělo nějakou logiku Jeden Byte může být single integer unsigned, single integer signed, nebo string. Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255. Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat. |
|
| Autor: | rombor [ 16.02.2016, 19:33 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
danhard píše: Aby to mělo nějakou logiku To všetko je pravda. Ale tu už skôr išlo o to, ako "natívne" prekladače na ZX Spectre (MRS a Prometheus) vyhodnocujú výraz a ako výslednú hodnotu ukladajú do DEFB. Oba spomínané prekladače vyhodnocujú výraz 16-bitovo. A ak sa má vypočítaná hodnota uložiť do 1 bytu, tak sa za platnú hodnotu považuje taká, u ktorej je vyšší byte 0 alebo 255, čo zodpovedá mnou spomínaným intervalom. Nič viac, nič menej. Nevidím v tom žiadny závažný prehrešok.
Jeden Byte může být single integer unsigned, single integer signed, nebo string. Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255. Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat. |
|
| Autor: | Busy [ 16.02.2016, 20:16 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
danhard píše: Aby to mělo nějakou logiku Nezabudaj, ze sa bavime o asembleri, a nie o vyssich jazykoch s vopred zadefinovanymi udajovymi typmi. Pokial si ja vo svojom programe zadefinujem, ze cisla 255,254,...1,0 v bajte budu predstavovat hodnoty -1,-2,...,-255,-256 tak to tak bude a hotovo Jeden Byte může být single integer unsigned, single integer signed, nebo string. Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255. Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat. |
|
| Autor: | Billy48 [ 16.02.2016, 23:12 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
danhard píše: Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat. Do jedneho bajtu sa neda impelmentovat ani rozsah <-128, 255> na to uz treba o jeden bit viac a rozsah bude <-256,255> co je vlastne 512 moznych kombinacii 9-tych bitov. Pri 8-mych bitoch (jeden bajt) je moznych 256 kombinacii preto ten rozsah <-128,127>. A ako pise Busy vo vyssich jazykoch si musis zadefinovat typ, aby kompilator vedel ako chces s cislami pracovat. napr. v pocitaci ulozena hodnota 01000001 moze byt, cislo 65, 41h, pismeno A, alebo Z80 ho "vidi" ako instrukciu LD B,C proste vzdy ide o to ako sa na urcitu kombinaciu bitov pozera a preto sa vo vyssich jazykoch definuje typ. potom vie kompilator co s bajtmi robit. Ak mi bude vyhovovat rozsah <-40,215> napr. teplota niecoho tak si definujem tych 256 kombinacii takto.
|
|
| Autor: | danhard [ 17.02.2016, 13:16 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
Busy píše: danhard píše: Aby to mělo nějakou logiku Nezabudaj, ze sa bavime o asembleri, a nie o vyssich jazykoch s vopred zadefinovanymi udajovymi typmi. Pokial si ja vo svojom programe zadefinujem, ze cisla 255,254,...1,0 v bajte budu predstavovat hodnoty -1,-2,...,-255,-256 tak to tak bude a hotovo Jeden Byte může být single integer unsigned, single integer signed, nebo string. Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255. Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat. Píšu jak to vidí assembler a s jakým typem proměných při implementací hodnoty počítá. Přímý zápis binární hodnoty je jasný, ale většinou ho musíš v zápisu označit, třeba 0FFh, aby si ho odlišil od dekadické hodnoty. Jinak se snaží assembler naplnit hodnotu implementací toho, co je tam napsané. Co si vymyslím za proměnnou je problém programu, to základní implemetance assembleru neřeší. Assebler neumí diagnostikovat mentální stav pojídače koláčů, co sedí za klávesnicí |
|
| Autor: | Busy [ 18.02.2016, 13:37 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
danhard píše: Busy píše: danhard píše: Aby to mělo nějakou logiku Nezabudaj, ze sa bavime o asembleri, a nie o vyssich jazykoch s vopred zadefinovanymi udajovymi typmi. Pokial si ja vo svojom programe zadefinujem, ze cisla 255,254,...1,0 v bajte budu predstavovat hodnoty -1,-2,...,-255,-256 tak to tak bude a hotovo Jeden Byte může být single integer unsigned, single integer signed, nebo string. Vstupní dekadická hodnota je 0 až 255, -128 až +127, 0 až 255. Jiný rozsah vstupních hodnot, než <-128, 255> nemá smysl a nemůže se jednoznačně do jednoho Byte implementovat. |
|
| Autor: | danhard [ 18.02.2016, 14:11 ] |
| Předmět příspěvku: | Re: Vianocny darcek pre ZX Spektrum |
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. Záleží tedy na překladači, jestli tam něco "nějak" naplní, nebo jestli ohlásí chybu. 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 |
|
| Stránka 2 z 3 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
| Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |
|