4 bitový počítač
Moderátor: Moderátoři
- tomasjedno
- Příspěvky: 6547
- Registrován: 11 říj 2008, 00:00
- Bydliště: ZZ9 Plural Z Alpha
- tomasjedno
- Příspěvky: 6547
- Registrován: 11 říj 2008, 00:00
- Bydliště: ZZ9 Plural Z Alpha
Jestli máš na mysli F#, tak potřebný operátor (tj. >>>) najdeš třeba tady.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?
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.
- tomasjedno
- Příspěvky: 6547
- Registrován: 11 říj 2008, 00:00
- Bydliště: ZZ9 Plural Z Alpha
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
- tomasjedno
- Příspěvky: 6547
- Registrován: 11 říj 2008, 00:00
- Bydliště: ZZ9 Plural Z Alpha
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.lesana87 píše:Vydělením dvěma postupným odečítáním?
Aha, toho jsem přehlíd.lesana87 píše:Já jsem reagovala na nibblera, ten má trochu jiné instrukce než Claudia Lite.
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- tomasjedno
- Příspěvky: 6547
- Registrován: 11 říj 2008, 00:00
- Bydliště: ZZ9 Plural Z Alpha
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.