Еще раз о signed / unsigned

Для своего проекта портирую кое-какой код из асма Motorola на си для PICа.
Так как при разборе кода трудно понять, что имелось в виду — знаковое или без знаковое, тупо объявлял все char, int и т.п.
И натолкнулся на такую проблему, когда значения индекса в переменной _D3 (имя взято по адресу в дизассемблируемом коде) переваливает с 0x80 на 0x7F, проверка начинает глючить и индексы перестают меняться. Счетчик зацикливается. Меняется только младший байт. Искал и вычленял 3 дня. Прога-то в контроллере выполняется, 30 мгц всего, да еще RISC…
Вот привожу то что было в исходном контроллере и оба варианта кода на Си, работающий так же, и работающий не совсем правильно (прога считала правильно около полутора часов, а потом зацикливалась).

Исходный код, на асме:

первый вариант на Си, который работал не правильно:

и второй, который заработал как надо:

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.