

Возникают в изобилии коротенькие логически законченные куски для перевода в asm. Например
Код
signed long int S = 0;
float s = 0, ds = 0;
signed char P = 0;
......
s = s + ds;
if (s < 0) {
s = 1 - s;
S = S - 1;
P = P - 1;
if (P < 0) {P = 3}
}
elseif (s >= 1) {
s = s - 1;
S = S + 1;
P = P + 1;
if (P > 3) {P = 0}
}
float s = 0, ds = 0;
signed char P = 0;
......
s = s + ds;
if (s < 0) {
s = 1 - s;
S = S - 1;
P = P - 1;
if (P < 0) {P = 3}
}
elseif (s >= 1) {
s = s - 1;
S = S + 1;
P = P + 1;
if (P > 3) {P = 0}
}
В asm s и ds будут в формате с плавающей запятой. Думаю что буду использовать sbrc/sbrs их старшего бита - знака мантиссы. Позже напишу код который придумаю - покритикуете помидорами. А вот насчет
Код
P = P - 1;
if (P < 0) {P = 3}
..........
P = P + 1;
if (P > 3) {P = 0}
}
if (P < 0) {P = 3}
..........
P = P + 1;
if (P > 3) {P = 0}
}
придумал - я просто делаю inc/dec rP а потом мне надо найти красивую команду чтобы просто занулить его старшие 6 разрядов - пока точно не знаю какую - and или lsl rP, 6 + lsr rP, 6
Или еще пример
Код
float s, ds;
unsigned char m;
......
if (ds < 1/128) m = 128
elseif (ds < 1/64) m = 64
elseif (ds < 1/32) m = 32
elseif (ds < 1/16) m = 16
elseif (ds < 1/8) m = 8
elseif (ds < 1/4) m = 4
elseif (ds < 1/2) m = 2
else m = 1
unsigned char m;
......
if (ds < 1/128) m = 128
elseif (ds < 1/64) m = 64
elseif (ds < 1/32) m = 32
elseif (ds < 1/16) m = 16
elseif (ds < 1/8) m = 8
elseif (ds < 1/4) m = 4
elseif (ds < 1/2) m = 2
else m = 1
Написано коряво, только суть. Теперь буду думать как это красиво на asm написать...
Если есть что сказать - почитаю
