реклама на сайте
подробности

 
 
> Знаковое сравнение в PIC18, в PIC16 тоже интересно :)
s.qwertyuiop
сообщение Jun 17 2009, 07:13
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 17-06-09
Пользователь №: 50 370



Каким образом можно сравнить два знаковых числа и выполнить переход если одно из них больше? Хотя бы однобайтовые, хотя многобайтовые тоже интересны.

А также - как это сделать в PIC16 в котором нет даже бита переполнения, но это уже чисто из любопытства, надеюсь на нем работать не придется...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SKov
сообщение Jun 17 2009, 07:31
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(s.qwertyuiop @ Jun 17 2009, 11:13) *
Каким образом можно сравнить два знаковых числа и выполнить переход если одно из них больше? Хотя бы однобайтовые, хотя многобайтовые тоже интересны.

А также - как это сделать в PIC16 в котором нет даже бита переполнения, но это уже чисто из любопытства, надеюсь на нем работать не придется...


Самый простой ответ - пишите программу на Си, и компилятор все сам сделает wink.gif
Если все-таки интересно на ассемблере, то тоже очень просто. ПИК не знает , что такое знаковое число и что такое беззнаковое число.
У него есть две команды - сложить (тут все понятно, при переполнении взводится флаг С в регистре статуса) и вычитание.
С вычитанием есть маленькая хитрость. Флаг С взводится, если при вычитании НЕ произошел заем за границей разрядной сетки.
А вообще, смотрите описание ассемблерной команды вычитания - там все четко написано.
Так что бит переполнения есть - это флаг С.
Go to the top of the page
 
+Quote Post
s.qwertyuiop
сообщение Jun 17 2009, 07:48
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 17-06-09
Пользователь №: 50 370



Цитата(SKov @ Jun 17 2009, 11:31) *
Самый простой ответ - пишите программу на Си, и компилятор все сам сделает wink.gif

Интересный совет, осталось найти Си-компилятор...
Цитата(SKov @ Jun 17 2009, 11:31) *
Если все-таки интересно на ассемблере, то тоже очень просто. ПИК не знает , что такое знаковое число и что такое беззнаковое число.
У него есть две команды - сложить (тут все понятно, при переполнении взводится флаг С в регистре статуса) и вычитание.
С вычитанием есть маленькая хитрость. Флаг С взводится, если при вычитании НЕ произошел заем за границей разрядной сетки.

То есть при вычитании C инверсный? Спасибо, не знал.
Цитата(SKov @ Jun 17 2009, 11:31) *
А вообще, смотрите описание ассемблерной команды вычитания - там все четко написано.
Так что бит переполнения есть - это флаг С.

Спасибо, это все рассказывают в школе на уроках информатики. Флаг C устанавливается если произошел перенос из самого старшего бита, следовательно он является переполнением при беззнаковом сравнении. Для знакового же переполнением является перенос из предпоследнего разряда в последний, при этом устанавливается бит OV. Но признаком перехода по больше/меньше является не он, а "исключающее или" переполнения и знака. Обычно в процессорах есть либо такой флаг, либо команда перехода по значению этого "исключающего или". В пике я не нашел ни того, ни другого. Как же работать со знаковыми числами?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016