C64Power Forum
Software => Programowanie => Wątek zaczęty przez: Slay_ w 22 Sierpnia 2002, 01:51
-
jesli w basicu napisze
X = -3.14159
to gdzie zostanie umieszczona liczba po znaku rownosci???
w jakim formacie sa zapisywane liczby calkowite, a w jakim rzeczywiste???
-
>:to gdzie zostanie umieszczona liczba po znaku rownosci???
W pamieci oczywiscie. Dokladnie rzecz ujmujac w C64 jest wydzielony obszar pamieci dla Basica. W tym obszarze znajduje sie zarowno tresc programu w Basic\'u jak i wszelkie zmienne. Zorganizowane jest to tak, ze od adresu $0801 lezy program w Basic\'u a zaraz za nim nazwy zmiennych i przypisane im wartosci. Zeby bylo weselej liczby rzeczywiste zajmuja 5 bajtow a zapisane sa w postaci cechy i mantysy logarytmu. Liczby calkowite zajmuja 2 bajty ale nalezy pamietac, ze liczby calkowite przynaleza tylko do zmiennych procentowych czyli np. x%=4 , przyporzadkowanie x=4 przypisze zmiennej x wartosc 4 ale w postaci rzeczywistej a nie calkowitej.
-
no dobra. dziekuje. ale konkretniej prosze
konkretniej
na przyklad liczba calkowita 2114 ($0842) ma byc zapisana od adresu $2000
jak to bedzie wygladac???
$2000 ?
$2001 ?
a jesli bedzie to liczba o przeciwnym do tej znaku (ujemna) -2114
jak ona zostanie rospisana???
teraz rzeczywiste
powiedzmy -340.223
jak taka liczba bedzie wygladac ":w pamieci": (dajmy na to tez od adresu $2000)
o takie cus mi chodzi
-
Konkretniej to proponuje odpalic C64, przypisac zmiennej np. x jakas wartosc i sprawdzic monitorem pamieci jak to interpreter zapisal. Ja podalem dosc danych zeby samemu przeanalizowac cala sprawe i odczytac wlasciwe komorki pamieci. Sprawy dalej nie wyjasniam bo bylaby to juz lopatologia stosowana. Moge podpowiedziec, ze sprawe ujemnosci liczby zalatwia sie jednym bitem zwykle najstarszym.
Cwiczenie czyni mistrza.
-
wrrr no niech tam
>:Cwiczenie czyni mistrza.
swieta prawda
-
kurcze, ale bede uparty i poprosze chociaz o wytlumaczenie mi zapisu liczb rzeczywistych, bo calkowite to ja juz wiem
wiec jak to sie dzieje, ze interpreter napotykajac na taka rzeczywista liczbe w pamieci wie, jak ja potem ":ladnie": wyswietlic???
probowalem w monitorze podpatrzec kilka przykladowych, ale nic z wyswietlonych mi wartosci nie pojmuje
no bo tak
robie cos takiego
a=1
b=2
c=4
a w monitorze mam
$0800 00 00 00 41 00 81 00 00 00 00 42 00 82 00 00 00 00 43 00 83 00 00 00 00
a=1 b=2 c=4
o co tu chodzi???
a=1 41 00 81 00 00 00 00
^^^^^^^^^^^^
ktore z tych pieciu bajtow jest cecha, a ktore mantysa???
-
Poniewaz nigdy nie interesowal mnie specjalnie zapis liczb rzeczywistych przez interpreter Basica ,gdyz nigdy w zyciu nie bylo mi to do niczego potrzebne, cale to dociekanie uwazam za rzezbe w gownie i zachodze w glowe do czego Ci to potrzebne ale wyjasniam co nastepuje:
w C64 przyjeto nastepujacy zapis liczb rzeczywistych
liczba= ((-1)^b)*(1+c)*2^(a-129)
np. liczba 1.32 ma postac 81 28 F5 C2 8F
co reprezentuje kolejno zapisane wartosci a=129 b=0 c=0.32
Zycze milej rzezby.
-
>:Poniewaz nigdy nie interesowal mnie specjalnie zapis liczb rzeczywistych przez interpreter Basica ,gdyz nigdy w zyciu nie bylo mi to do niczego potrzebne, cale to dociekanie uwazam za rzezbe w gownie i zachodze w glowe do czego Ci to potrzebne ale wyjasniam co nastepuje:
>:
>:w C64 przyjeto nastepujacy zapis liczb rzeczywistych
>:
>:liczba= ((-1)^b)*(1+c)*2^(a-129)
>:
>:np. liczba 1.32 ma postac 81 28 F5 C2 8F
>:
>:co reprezentuje kolejno zapisane wartosci a=129 b=0 c=0.32
>:
>:Zycze milej rzezby. 
podumam nad tym. choc na pierwszy rzut oka nie kumam za bardzo o co tu biega. nie, nie jestem tepy
na pewno dojde o co tu chodzi 
do czego mi to potrzebne? ee tego no, kompilator pisze (wlasnego jezyka). pomyslalem sobie wiec, ze warto bedzie zobaczyc jak omawiana kwestia prezentuje sie w przypadku basica
wlasciwie, to na razie bedzie to interpreter. maly zreszta. z czasem go rozbuduje i bede udoskonalac. 
no i dziekuje kulturalnie na zakonczenie
za cenna informacje i zyczenia
-
Powaznie piszesz kompilator? To mnie strasznie zaciekawiles. Sam swego czasu nosilem sie z zamiarem stworzenia jakiegos jezyka tak prostego jak Basic ale z mozliwoscia takiej kompilacji, zeby kompilat mial niesamowitego kopa. Zagadnienie dosc ciekawe przyznam. Jak patrze na skladnie jezyka C to zachodze w glowe jak mozna bylo proste rzeczy tak sobie skomplikowac, ale do wszystkiego mozna sie przyzwyczaic. C++ natomiast jest wielkim dowcipem pewnego pana, ktory go wymyslil a inni nie skumali zartu i zaczeli w tym lajnie masowo pisac programy ocierajac pot z czola i polewajac przegrzane mozgi piwem.
-
phihihi, jakem rzekl: interpreter na poczatek. potem kompilator.
co do ":sie noszenia":, to ja sie z tym nosze juz chyba trzeci rok!!! 
czytalem kiedys taka ksiazke po angielsku. o pisaniu wlasnie kompilatorow traktowala. stara to ksiazka z biblioteki (notabene w naszej bibliotece duzo jest takich wlasnie starych, nawet o komodore, atari czy spektrum jest)
i tam w tej ksiazce autor zauwazyl, zreszta bardzo slusznie (tak sadze), ze jednym z najwiekszych problemow podczas pisania programow kompilujacych jest to, iz nastepuje w ktoryms ze wczesnych etapow programowania.. zaraz jak on to nazwal... ":fascynacja": - tak pisal. nastepuje ":fascynacja jezykiem": - tym do ktorego sie ten kompilator tworzy. i ja to 3 lata mialem kuzwa
ale tydzien temu postanowilem (nie pierwszy juz, ale mam ktorys tak samo raz nadzieje, ze ostatni raz), iz wreszcie powaznie potraktuje ten temat, ze kurde wreszcie napisze ten kompilator. i wiecie co? nigdy jeszcze przed tem nie zabrnalem w tym tak daleko. programu pisac wprawdzie jeszcze nie zaczalem, ale raczej wszystkie ku temu sposobnosci juz posiadam. skompletowalem najwazniejsze do tego informacje: o typach danych wlasnie, strukturze samego jezyka, skladni, slowem o wygladzie. koncze teraz tylko prace nad tym wlasnie co sie dziac bedzie w pamieci komputera, co mniemam, ze sie bedzie dziac, bo czy dziac sie bedzie, to sie w praktyce okaze. oj rozpisalem sie. wystarczy
-
>:w C64 przyjeto nastepujacy zapis liczb rzeczywistych
>:liczba= ((-1)^b)*(1+c)*2^(a-129)
no kolego Slayer, piwo Jemasoftowi sie nalezy
-
>: no kolego Slayer, piwo Jemasoftowi sie nalezy

emajla mu przesle
-
>:Poniewaz nigdy nie interesowal mnie specjalnie zapis liczb rzeczywistych przez interpreter Basica ,gdyz nigdy w zyciu nie bylo mi to do niczego potrzebne, cale to dociekanie uwazam za rzezbe w gownie i zachodze w glowe do czego Ci to potrzebne ale wyjasniam co nastepuje:
>:
>:w C64 przyjeto nastepujacy zapis liczb rzeczywistych
>:
>:liczba= ((-1)^b)*(1+c)*2^(a-129)
>:
>:np. liczba 1.32 ma postac 81 28 F5 C2 8F
>:
>:co reprezentuje kolejno zapisane wartosci a=129 b=0 c=0.32
>:
>:Zycze milej rzezby. 
albo tepy jestem albo jestem glupi
o co tu q2 chodzi??? 
przepraszam, ale nie bardzo rozumiem. czym sa te a,b i c???
-
a, b, c to sa liczby faktycznie przechowywane w pamieci na podstawie ktorych interpreter Basica tworzy liczbe wyswietlana wg wzoru ktory podalem.
W tych pieciu bajtach jest zawarte kolejno a b c.
-
>:W tych pieciu bajtach jest zawarte kolejno a b c.
aha troche juz czaje
tylko, ze bajtow jest 5 a liczb 3
roznica 2
-
O ja pierdziele.

Kombinuj. Ta kulka na koncu szyi nie tylko do noszenia czapki sluzy.
-
no fakt, znajduje sie tam otwor gebowy przez ktory wprowadzamy chipsy i piwo
-
>:O ja pierdziele.

>:
>:Kombinuj. Ta kulka na koncu szyi nie tylko do noszenia czapki sluzy.
hehe
dobra, ma Pan racje
nie mozna byc az tak leniwym
tylko, ze jak bede sie tak nad wszystkim zastanawial i kombinowal
to znowu stace ochote na programowanie
-
To jest wlasnie ten subtelny smaczek. Jak sam dojdziesz to bedziesz mial radoche. Jak sie zniechecisz to znaczy, ze sie nie nadajesz do tego a myslec trzeba niestety przez cale zycie a moze i jeszcze dluzej.
-
>:To jest wlasnie ten subtelny smaczek. Jak sam dojdziesz to bedziesz mial radoche. Jak sie zniechecisz to znaczy, ze sie nie nadajesz do tego a myslec trzeba niestety przez cale zycie a moze i jeszcze dluzej.

wrrrr racyje kumie rzeczecie
bede kombinowal az do skutku, tylko moze nie dzis juz. tzn dzis ale nie teraz - pozniej, bo... pora na dobranoc, bo juz ksiezyc...
dobranoc Panu zycze
-
Niech Basic bedzie z Toba. Fractalowych snow zycze.
-
>:Niech Basic bedzie z Toba.
wolalbym Asembler, bo w tym teraz robie
-
a niech diabli wezma te basicowskie liczby. tfuuu!
sam se swoje wymysle
-
>:a niech diabli wezma te basicowskie liczby. tfuuu!
>:sam se swoje wymysle
Zerknij sobie najpier na ponizsza stronke...
http://www.astro.amu.edu.pl/Staff/Tkastr/Infor/infor25/node14.html
--------------------------------------------------------------------------------
Kodowanie informacji
--------------------------------------------------------------------------------
Podrozdzialy:
- Kodowanie tekstu
- Kodowanie liczb calkowitych
- Kodowanie liczb rzeczywistych
- Bledy zaokraglen
- Kodowanie informacji z nadmiarem
- Reprezentacja kolorow
- Kodowanie grafiki 2D
- Kodowanie dzwieku
- Szyfrowanie informacji
- Po co szyfrowac?
- Jak szyfrowac?
- Szyfrowanie z kluczem publicznym
- Podpis cyfrowy
- Odwrocenie sytuacji szyfrowania z kluczem publicznym
- Jednostronna funkcja znacznikowa (hash function)
- Zastosowania podpisu cyfrowego
Milego wymyslania...
-
W liczbach calkowitych, c64 zapisuje najpierw mlodszy bajt, a potem starszy, adres ostatniej zmiennej jest zapisany w komorkach 71-72 ($47-$48), czyli, jezeli chcesz uzyskac dostep bezposredni do ostatniej zmiennej to:
Mozna zrobic tak:
10 a=[ilestam]
....
430 a=a [zeby uzyc zmiennej]
440 x= peek(71)+peek(72)*256
I w zmiennej x mamy adres ostatniej zmiennej
Zminne rzeczywiste sa zapisywane w 7 bajtach:
2 pierwsze to nazwa zmiennej
a 5 nastepnych to liczba
z ktorych 1 bajt to wykladnik, a 4 nastepny, to znak i mantysa
W c64 przyjeto reprezentacje liczb rzeczywistych:
(-1)^b*(1+c)*2^(a-129), gdzie |c|<:+1
w pamieci wyglada to tak:
x:=1.27
0047 03 08 - wiec skaczemy do $0803
0803 58 00 81 22 8f 3c 29
X 1.27 ( a=129, b=0, c=0.27 )
Zmienna calkowita:
2 pierwsze bajty to nazwa (bajty zwiekszone o $80), 2 nastepne to liczba w kodzie uzupelnien do 2, a 3 nastepne sa zerowe
czyli:
XY%=17
0047 0a 08 (skaczemy...)
080a d8 d9 ff ef 00 00 00
X Y 17
od pierwszych 2 nalezy odjac $80, natomiast 2 nastepne to liczba.
Jezeli wartosc tych nastepnych jest wieksza niz 32767 ($7fff), to wtedy liczbe liczy sie od tylu, i jest ujemna (pierwszy bit oznacza znak) czyli:
$ffff =-1
$fffe = -2
itd...
czyli jezeli liczba jest wieksza od 32767 to nalezy przeliczyc ja przez wzor
XY% = [liczba w pamieci] - 65535
Lancuchy:
2 pierwsze bajty to nazwa (drugi zwiekszony o $80) nastepny to dlugosc lancucha, a 2 nastepne to adres (lancuchy sa przechowywane na koncu pamieci Basic od 9ffff w dol), a 2 nastepne sa zerowe, czyli:
AB$=":TEST":
0047 11 08
0811 41 c2 04 fc 9f 00 00
A B 4 adres
czyli mamy 4 znakowy lancuch zaczynajacy sie w $9ffc, czyli:
9ffc 54 45 53 54
T E S T
I to by bylo na tyle (chociaz zapisu zmiennych rzeczywistych sam do koncz nie rozumie)....
-
dzinx! wreszcie ktos konkretny
dzienki chopce - po tysiackroc!
pozdro fur alle!
-
mala sugestia.. czarna robote z liczbami calkowitymi i rzeczywistymi zostaw basicowi zawartemu w romie... (przestudiuj procedury od $a000).. a jesli chcesz pisac swoje.. to opieraj sie czesciowo na tych z romu.. sa to jedne z najszybszych procedor matematycznych (szybszych w 8 bitach nie ma:P) a skup sie przedewszystkim na procedurach wyswietlania, formatowania i obslugi ( to skolei comcio ma najwolniejsze:P widzialem kilka roznych wersji kernela, ktore biegaly 30% szybciej niz oryginalny)