4 bitový počítač

Klasické bastlení z domácích zásob

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#31 Příspěvek od tomasjedno »

Jsou tam o dost podstatnější rozdíly :D
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#32 Příspěvek od asdf »

Teď koukám na tu instrukční sadu a nějak mi tam chybí spousta instrukcí. Jak se třeba udělá posun doprava?
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#33 Příspěvek od lesana87 »

Vydělením dvěma postupným odečítáním?
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#34 Příspěvek od asdf »

No. :D Nebo nějakou tabulkou. :(
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#35 Příspěvek od asdf »

Nebo: Rotace doleva by asi šla udělat jako addc a samo se sebou. A rotaci doprava jako 4x rotace doleva. Ale nic moc.
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#36 Příspěvek od tomasjedno »

asdf píše:Teď koukám na tu instrukční sadu a nějak mi tam chybí spousta instrukcí. Jak se třeba udělá posun doprava?
Jestli máš na mysli F#, tak potřebný operátor (tj. >>>) najdeš třeba tady.

Půvab F# ale netkví v takovýchhle primitivitách. Tkví v nadstavbě nad tím, kombinuje procedurální a funkcionální programování. Samozřejmě, pro člověka, jenž se nejlíp cítí v assembleru, je to fuj.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#37 Příspěvek od asdf »

Ne ne, s tím F# jsme byli poněkud off-topic. Mám na mysli ten procesor odkazovaný danhardem v prvním příspěvku.
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#38 Příspěvek od tomasjedno »

Posun doleva je easy - sečíst.
S tím posunem doprava je problém. Nevymyslel jsem pro posun doprava o 1 jiný způsob, než cyklickou rotaci doleva 3x a pak vynulovat nejvyšší bit, a to mi vychází na 32 slov (16 zaberou ty 3 rotace a 16 to vynulování nejvyššího bitu) - a stroj má jen 16 slov programové RAM. Potíž je v tom, že jsou jen 2 registry, takže není kam si ukládat mezivýsledky ani kde počítat opakování sekvence kroků.

P.S. Ta cyklická rotace doleva o 1 je
CLF (pouze před první rotací)
MOV BA
ADDC AB
LDB 0
ADDC AB
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#39 Příspěvek od lesana87 »

Já jsem reagovala na nibblera, ten má trochu jiné instrukce než Claudia Lite.
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#40 Příspěvek od tomasjedno »

lesana87 píše:Vydělením dvěma postupným odečítáním?
Tak tady je pro posun doprava možností hafo. Testovat postupně 3 bity (instrukce ANDI) a podle toho nastavit bity výsledku. Vynulovat nejnižší bit a pak po jedné odečítat, současně v druhém registru v RAM přičítat, dokud nejsou shodné (tos zřejmě měla na mysli). Nebo vynulovat nejnižší bit, odečítat 2 až do 0 a počítat iterace (možnás myslela tohle). Anebo vynulovat nejnižší bit a pak provést 3x cyklickou rotaci doleva jako u té Claudie.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#41 Příspěvek od asdf »

lesana87 píše:Já jsem reagovala na nibblera, ten má trochu jiné instrukce než Claudia Lite.
Aha, toho jsem přehlíd.

Tak pro rotaci přes carry doprava se mi líbí nejvíc asi:

Kód: Vybrat vše

mov ba
addc ab
mov ba
addc ab
mov ba
addc ab
mov ba
addc ab
Ale jak udělat třeba and? Posouvat doleva a zpracovávat po bitech pomocí JC? Člověk by si na to udělal podprogram, ale JSR tam taky není. Leda si udělat podprogram na to JSR a RET. :)
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#42 Příspěvek od tomasjedno »

Hezké (a chytré, teprv teď mi došlo, proč jsou ty rotace doleva 4), chybí ti tam jen CLF na začátku.

AND: udělat (REG A) AND (constant abcd) mě nenapadá jinak, než
CLF
MOV BA
ADDC AB
NOP/CLF (NOP if a=1, CLF if a=0)
MOV BA
ADDC AB
NOP/CLF (NOP if b=1, CLF if b=0)
MOV BA
ADDC AB
NOP/CLF (NOP if c=1, CLF if c=0)
MOV BA
ADDC AB
NOP/CLF (NOP if d=1, CLF if d=0)
MOV BA
ADDC AB
tj. 15 slov. Kdyby nevadilo, že na konci nesouhlasí CY, tak se dá úvodní CLF vypustit a přidat na začátek IN A a na konec OUT A.

(REG A) AND (REG B) podle mne nejde udělat vůbec, chtělo by to třetí registr.
Naposledy upravil(a) tomasjedno dne 10 lis 2025, 13:29, celkem upraveno 2 x.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#43 Příspěvek od lesana87 »

Ten počáteční Carry se zahodí.
Edit: Vlastně nezahodí, ten bude na nejvyšším bitu. :oops:
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#44 Příspěvek od asdf »

Pěkné.
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#45 Příspěvek od lesana87 »

Claudia Lite v.2 má AND. :)
Odpovědět

Zpět na „Zapojení ze šuplíku“