aritmetikai műveletek
Néha, amikor írásban programok végrehajtásához szükséges egyszerű számtani műveletek több byte-os szám. Az egyetlen bájtos szám, egyszerű összeadás és kivonás végzik standard parancsok addwf, addlw, subwf, sublw, a multi-byte számokat írni, kis rutin. Fogok beszélni csak a integer műveletek nélkül tört részek.
A szöveg a cikk és a kód azt fogja használni a konzolt, hogy regisztrálja a nevét, hogy könnyebb szétszedni nagyobb és kisebb számban a nyilvántartások. Összpontosítok négy bájtos szám megfelelő előtagot idősebb, fiatalabb regiszter: HH, HL, LH, LL.
Tekintsük a legegyszerűbb megvalósítási módja szerint a két byte-os és hozzá egy egybájtos szám. Dupla bájtos szám képviseli regiszterek varLH (high byte) és varLL (low byte), egy bájtos szám regisztrációhoz tmpLL. Először szor kisebb regiszterek mindkét számok varLL tmpLL nyilvántartást, és csak abban az esetben egy bájtos szám. Ezután ellenőrizzük, az esetleges túlfolyó regisztrációhoz varLL eredményeként kívül (az átadás MSB) -C STATUS regiszter bitek. Ha volt egy túlfolyó (C = 1), vezető növekmény regisztrálja varLH, különben (C = 0) nem csinál semmit. Abban az esetben, trehbaytnogo (varHL, varLH, varLL), miután a növekmény terül varLH is ellenőrizni kell a túlcsordul keresztül incfsz parancsot. Abban az esetben, túlfolyó, növekmény legrégibb, illetve regisztrálni varHL.
Ezen túlmenően a több-bájtos szám, például kettő-bájtos (varLH, varLL) + (tmpLH, tmpLL), mint az említett első szer alacsonyabb regiszterek és varLL tmpLL, varLL regisztrálja és túlfolyó van jelölve eredményeként kívül, amelynek jelenléte növekszik vezető regisztrálja varLH. Adunk, és az idősebb nyilvántartások varLH tmpLH, itt ellenőrzését nem hajtja végre, ha ismert, hogy a túl eredmény nem haladja meg a számot két bájtos érték (65535). VarLH túlcsordulás ellenőrzés nyilvántartást kell kiállítani, ha az első szám trehbaytnoe (varHL, varLH, varLL) és az eredmény hozzáadás száma meghaladja a 65535-Elvben minden valamint a tizedes mellett egy oszlop a papíron.
Az alábbiakban különböző alprogramok kódok ezt hozzá. A számok először be kell tölteni a megfelelő nyilvántartások, mielőtt hívja a szubrutinok is meg kell jegyezni, hogy a túl eredmény nem haladja meg a maximális értéket a legnagyobb távon, különben kap egy téves eredményt. Például, ha hozzáadjuk a két byte-os és egy byte-os számot, az eredmény nem haladhatja meg a maximális érték két bájtos szám - 65535:
hmm. Emellett az AVR-bájtos számok praktikus parancsot - ADC - hozzátéve két szám a carry flag. Ha az előző adagolás befejezése túlcsordulás, akkor az átutalás automatikusan hozzáadódik a két fogalmat.
Például, négy-bájtos kiegészítés:
add tempLL, varLL
adc tempLH, varLH
adc tempHL, varHL
adc tempHH, varHH
De azzal a kiegészítéssel, a számok a különböző méretű, hogy nem gurul, és meg kell csinálni ugyanazt, mint a csúcs))
Az én AVR lehet hajtani a számos különböző méretben a transzfer, például, a mellett a négy byte-os és a kétbájtos számok:
add varLL, tmpLL
adc varLH, tmpLH
adc var HL, nol
adc varHH, nol
ahol Nol - lajstromszáma 0 amelyet előzőleg rögzített
Amellett, hogy a csúcsok már csak 2 csapat: addwf - kiegészítve a tartalmát az akkumulátor minden nyilvántartás és addlw - kiegészítve a tartalmát az akkumulátort egy állandó, ugyanez vonatkozik a kivonás.
Ne felejtsük el, hogy a csúcs 35 utasítások helyett több száz csapat AVR)
Tehát amit tehetünk, ha nem bánod, hogy fordítsanak egy extra nyilvántartást tárolására nulla. Minden attól függ, a program bonyolultsága, és néha minden nyilvántartás a fiókban.
Entourage matematikai applet hűlni saját használatra, amire szükségünk van, köszönöm a jobb Old.