Stránka 3 z 18
Napsal: 07 lis 2025, 20:55
od tomasjedno
Jsou tam o dost podstatnější rozdíly

Napsal: 09 lis 2025, 19:14
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?
Napsal: 09 lis 2025, 19:25
od lesana87
Vydělením dvěma postupným odečítáním?
Napsal: 09 lis 2025, 19:31
od asdf
No.

Nebo nějakou tabulkou.

Napsal: 09 lis 2025, 19:59
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.
Napsal: 09 lis 2025, 20:29
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.
Napsal: 09 lis 2025, 20:38
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.
Napsal: 09 lis 2025, 22:22
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
Napsal: 09 lis 2025, 22:27
od lesana87
Já jsem reagovala na nibblera, ten má trochu jiné instrukce než Claudia Lite.
Napsal: 10 lis 2025, 01:21
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.
Napsal: 10 lis 2025, 11:20
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.

Napsal: 10 lis 2025, 12:29
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.
Napsal: 10 lis 2025, 12:41
od lesana87
Ten počáteční Carry se zahodí.
Edit: Vlastně nezahodí, ten bude na nejvyšším bitu.

Napsal: 10 lis 2025, 13:48
od asdf
Pěkné.
Napsal: 10 lis 2025, 14:17
od lesana87
Claudia Lite v.2 má AND.
