On varmasti mahdollista työskennellä erittäin suurilla numeroilla jopa 8- tai 4-bittisissä tietokoneissa. Se ei ole kovin tehokas, mutta se on mahdollista. Tämä tehdään tekemällä numeroita palasina erityisten prosessoriohjeiden tuella.
Yleinen 8-bittinen mikrokontrolleri on Atmel AVR -sarja. 8-bittisten numeroiden lisäämiseksi se käyttää käskyä nimeltä ADD. Tätä ohjetta käytetään lisäämään kaksi rekisteriarvoa yhteen. Voit esimerkiksi tehdä
LDI R16, 5LDI R17, 10ADD R16, R17; R16 = 15
lisätä R16 ja R17 ja lisätä tulos R16: een. Jos haluat lisätä 16-bittisiä numeroita, teet tämän periaatteessa vain useita kertoja. Siellä on kuitenkin salpa: kantokärki. Toinen AVR-käsky on ADC, ADd: lle ja Carrylle. Tämä tekee täsmälleen saman asian kuin ADD, mutta se lisää myös carry-lipun. Sekä ADD että ADC asettavat kantolipun, jos lisäystoiminto ylittää. Oletetaan, että jos lisäät 128-128, saat 0 tuloksena kantolipun asetuksella. Jos soitat ADC: lle kantolipun ollessa asetettu, se lisää tulokseen 1. Tässä on esimerkki 16-bittisestä lisäyksestä:
LDI R16, 232LDI R17, 3; R17: R16 = 1000LDI R18, 208LDI R19, 7; R19: R18 = 2000ADD R16, R18ADC R17, R19; R16 = 184; R17 = 11; R17: R16 = 3000
Tämä voidaan toistaa niin monta kertaa kuin on tarpeen suurten numeroiden lisäämiseksi. Huomaa, että tämän tukemiseksi tarvitaan pieni määrä logiikkaa: kyky syöttää kantolippu summaimen kuljettamiseen.
Vastaavaa prosessia voidaan käyttää numeroiden kertomiseen. 16-bittisten kertolaskujen suorittaminen 8-bittisessä prosessorissa vaatii 4 8-bittistä kertomista ja useita lisäyksiä. Menettely on täsmälleen sama kuin numeroiden kertominen käsin yksi numero kerrallaan, paitsi että käytät tavuja numeroiden sijaan. Sinun on kerrottava kaikki neljä mahdollista tavupareja ja lisättävä ne sitten niiden paikkojen arvojen mukaan. Esimerkki AVR ASM: ssä:
LDI R16, 232LDI R17, 3; R17: R16 = 1000LDI R18, 208LDI R19, 7; R19: R18 = 2000MUL R16, R18
; R1: R0 = R16 * R18 (1-paikkainen tuote) MOVW R3: R2, R1: R0; R3: R2 = R16 * R18MUL R16, R19; R1: R0 = R16 * R19 (256 paikan tuote # 1) CLR R4ADD R3, R0ADC R4, R1; R4: R3: R2 = R16 * R18 + 256 * R16 * R19MUL R17, R18; R1: R0 = R17 * R18 (256 paikan tuote # 2) LISÄÄ R3, R0ADC R4, R1; R4: R3: R2 = R16 * R18 + 256 * (R16 * R19 + R17 * R18) MUL R17, R19; R1: R0 = R17 * R19 (65536 paikan tuote) CLR R5ADD R4, R0ADC R5, R1; R5: R4: R3: R2 = R16 * R18 + 256 * (R16 * R19 + R17 * R18) + 65536 * R17 * R19; R5: R4: R3: R2 = 2000000
Huomaat, että juuri näin työskentelet numeroiden kanssa käsin paperilla, mutta sen sijaan, että työskentelisit 10 perusnumeron kanssa, CPU sanakokoisilla bittilohkoilla - tässä tapauksessa 8 bittiä.
Jos käytät CPU: ta, joka voi toimia useammalla bitillä kerrallaan, työskentely suurten numeroiden kanssa on helpompaa, koska se vaatii vähemmän ohjeita. Voit kuitenkin käyttää samoja tekniikoita työskennellessäsi suurempien numeroiden kanssa kuin komentosarja tukee suoraan.