
- •Обучение : Программирование на Ассемблере для pic
- •Команды сложения и вычитания регистров
- •Команды определения бита
- •Команды взаимодействия c аккумулятором w
- •Команды сложения и вычитания констант
- •Команды очистки регистров f и w (обнуления)
- •Пустышки и метки
- •Команды переходов
- •Вопросы для самопроверки
- •Команды счётчики
- •Переход по событиям в счётчиках
- •Переход по результатам бит-проверки
- •Флаги как индикаторы событий
- •Команды сравнения
- •Команды сдвига битов в регистре
- •Сдвиг вправо битов в регистре rrf f, d сдвиг влево битов в регистре rlf f, d
Вопросы для самопроверки
Надеюсь, что суть усвоена. К этому моменту должны появиться обоснованные вопросы. Если вопросы не появились, то мы их сформулируем. Далее короткие вопросы-ответы для общего развития и стимула познать больше.
Где в МК расположены строчки с командами?
В памяти программ. Пустые строки без команд не в счёт.
Для чего нужны переходы в программе?
Для организации цикличности программы (о цикличности позже).
Регистр-счётчик вмещает 255 значений, а команд может быть больше, например 1024. Как в этом случае работает счётчик?
Реально счётчик двухбайтный, т.е. используется два регистра. PCL (адрес h2) – младший байт и PCLATH (адрес hA) – старший. Можем менять только младший байт и этого нам достаточно; посчитайте в BinHexDec.
Как работать с отрицательными числами и с числами более 255?
Для работы с такими числами задействуются дополнительные регистры.
Сложение и вычитание мы разобрали, а где умножение деление?
Слишком много вопросов – невозможное возможно.
Команды счётчики
Команды счётчиков используются для упорядоченного увеличения или уменьшения содержимого регистров.
Следует заметить, что рассмотренный нами в вычисляемом переходе регистр PCL – это тоже своеобразный счётчик, но не программный, а аппаратный, тем не менее, значение его регистра можно использовать.
Итак, мы рассмотрим два примера организации счетчиков: первый – конструкция с использованием уже рассмотренных нами команд, а второй – с использованием новых команд.
metka1 MOVLW .1 ; записываем в аккумулятор единицу
ADDWF KLON,F ; увеличиваем (складываем) на единицу
GOTO metka1 ; переход на метку1
Проанализируйте эту конструкцию, она может быть полезна, т.к. увеличивать можно не на единицу, а на любое другое число; уменьшать тоже можно, используя в конструкции команду SUBWF.
В командах счетчиках используют два термина:
– инкрементирование (инкремент), т.е. увеличение регистра на единицу;
– декрементирование (декремент), т.е. уменьшение регистра на единицу.
УВЕЛИЧЕНИЕ НА ЕДИНИЦУ в общем виде выглядит как INCF F,D
УМЕНЬШЕНИЕ НА ЕДИНИЦУ в общем виде выглядит как DECF F,D
INCF CLON,F ; регистр CLON становится равен CLON+1
DECF CLOP,W ; регистр W = CLOP–1 , регистр CLOP не изменился
При выполнении команды инкрементирования (или декрементирования) с указанием сохранения в аккумулятор, исходные значения регистров после завершения выполнения операций не меняются.
Размер регистра равен 255 – прибавим к 255 единицу и что дальше?
Регистр станет равным нулю – это называется ПЕРЕНОСОМ.
А если сложить регистр X равный 250 и регистр Y равный 10?
Регистр станет равным (X+Y)–255 = 5. Это тоже перенос.
А если из регистра равным нулю вычесть единицу?
Регистр станет равным 255 – это называется ЗАЁМ.
А если из регистра Y равным 10 вычесть регистр X равный 250?
Регистр станет равным 255–(X–Y) = 15. Это тоже заём.
Рекомендуем вспомнить школьную арифметику и счет столбиком – похожая аналогия.