Stránka 3 z 18

Napsal: 07 lis 2025, 20:55
od tomasjedno
Jsou tam o dost podstatnější rozdíly :D

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. :D 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. :oops:

Napsal: 10 lis 2025, 13:48
od asdf
Pěkné.

Napsal: 10 lis 2025, 14:17
od lesana87
Claudia Lite v.2 má AND. :)