Анатоль (14.01.2005 16:26, просмотров: 914)
Корифанос! Ай нид хелп! Помогите с математикой в 51 проце, упарился, второй день туплю. Нужно пасти следующую ситуацию:
signed int Data;
signed int NData;
Data+=NData;
if (Data<-32768) Data=-32768;
else if (Data>32767) Data=32767;
или
Data-=NData;
if (Data<-32768) Data=-32768;
else if (Data>32767) Data=32767;
В следствие скудности ресурсов вынужден работать с int, а не с long переменными и все это дело писать в виде асмовских вставок в Си на Кейле. Понятно, что сравнивать именно с числами бесполезно. Нужно пасти переполнения.
Собственно вопрос:
- как правильно пасити флаги CY и OV если числа со знаком и операции сложение и вычитание и нужно ли их пасти. Сейчас я пасу знак полученного результата и знаки операндов в купе с типом операции :-)))
- если можно пример проги на асм.
- согласен на трех-байтовую математику вместо 4-х байтовой(long), пробовал но пока результат плачевный - сказываются бессонные ночи :-(
Чего-то я очень сильно туплю, сроки поджимают, а выцепить где ошибся не могу.
Не дайте пропасть убогому....