Zdravím
v programu MPLAB IDE v8.50 jsem si vytvořil projekt pro 16F84A
a zjistil jsem, ze jde použít příkaz SUBLW 256
funguje pod simulátorem a jde dokonce i zkompilovat…
to nevadí, že je konstanta větší než 255?
a jak se to bude chovat po nahrání do pic?
Jde mi totiž o to, když odčítám například:
30 – 35 = -5
Ale v případě pod pic 16F84
Dostanu 251 a příznak podtečení…
A teď jak z toho co nejrychleji dostat 5?
Provedu test podtečení a pak
SUBLW .255
SUBLW .1
A jsem na pěti.
SUBLW .256 by bylo rychlejší.
Konstanta může nabývat hodnoty 0-255
Ještě jsem na to kouknul po zkompilování v programu PIC Simulator IDE
A zjistil jsem, že se příkaz SUBLW .256 po kompilaci změnil na SUBLW .0
a funguje správně vrací v mém případě 5
je toto řešení v reálu funkční?
Jste vtipálci! Pokud použijete sublw .256 je to totéž, jako sublw 0. Tak co vymýšlíte? Pokud je pro konstantu vyhrazeno 8 bitů, tak holt větší být nemůže a překladač to musí uříznout. Jak to uřízne, vám napíše ve varovném hlášení při překladu, stačí jen číst.
movlw .100
sublw .0
Taky je v WREG hodnota 156. Prostě jak říkám, pokud použijete parametr větší než 8 bitů, tak se vezme jen těch dolních 8 bitů.
Kdysi jsme si hráli s nedokumentovanými instrukcemi Ziloga, to bylo fajn. Ale tady filozofujete nad zjevným nesmyslem. Trochu si pohrajte s dvojkovou aritmetikou a uvědomte si, že do osmibitové konstanty 9 nebo více bitů nenacpete.
V simulátoru MPLABU si tyhle binární počty můžete snadno vyzkoušet. Ale i tužka a papír na to stačí víc než bohatě.