НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 120121122123124125126 ... 159


mulwf

movf

PRODL, w

, Сохранение результата

movwf

Product

movf

PRODH, w

movwf

Product +

movf

Al w

, Выполнение I-умножения

mulwf

movf

PRODL w

, Сначала сохраняется старший ба

addwf

Product +

1, f

movf

PRODH, w

addwf

Product +

2, f

, Добавление к последнему

, результату

movf

Ah, w

; Выполнение О-умножения

mulwf

movf

PRODL, w

Затем добавляется младший байт

addwfс

Product +

2, f

btfsc

STATUS, С

, Добавление переноса

incf

Product +

3, f

movf

Ah 1 w

, Выполнение Р-умножения

mulwf

movf

PORDL w

addwf

Product +

2 f

movf

PRODH, w

addwfс

Product +

3, f

ДЕЛЕНИЕ

Представленная здесь программа деления сначала определяет, насколько далеко может быть сдвинут влево (в сторону старших разрядов) делитель, прежде чем сравнивать его с делимым. 16-разрядная переменная Count в этой программе используется для подсчета битов и добавления к частному, а переменная Temp - для временного хранения. После выполнения программы в регистрах делимого содержится остаток деления.

clrf

Quotient

clrf

Quotient + 1

movlw

, Инициализация счетчика

movwf

Count

clrf

Count + 1

StartLoop

, Определение разрядности

делителя

btfsc

Diviso r -H , 7

, Если «вершина»

goto

Loop

, то выполняется деление

STATUS С

, Модификация переменной

Count

, и сдвиг делителя влево

Count f

Count + 1 f



rlf rlf goto loop

movf

subwf

movwf

movf

subwf

btfss

decf

btfsc

goto

movwf

movf

movwf

movf

addwf movf addwf skip bcf rrf rrf rrf

btfss

goto

divisor, f divisor + 1, f sta rtloop

divisor +1, w

dividend +1, w temp

divisor, w dividend, w status, с temp, f temp, 7 skip

dividend temp, w dividend + 1 count, w

quotient + 1, f count, w quotient + 1, f,

status, с divisor + 1, f divisor, f count + 1, f

count, f status, с loop

вычитание делителя из делимого

если делитель меньше делимого вычитание не производится

если значение temp отрицательное, то делитель меньше делимого сохранение делимого

прибавление значения count к частному

сдвиг делителя/count вправо

если перенос установлен после сдвига переменной count, то операция завершается если перенос не установлен, обрабатывается следующий бит

Представленная программа деления предназначена только для работы с положительными числами. Общего алгоритма для положительных и отрицательных чисел, возвращающего частное и остаток правильного знака, не существует.

Общий вид программы деления для работы с положительными и отрицательными числами приведен ниже.

If (dividend < 0) {

dividend = о - dividend, dividendneg = 1, i else dividendneg = 0,

if (divisor < 0) {

если число отрицательное, то знак изменяется

знак сохраняется

повтор того же действия с делителем



Divisor = О - Divisor, dividendneg = 1, I else divisordneg = 0, Count = 0, Quotient = 0,

while ((Divisor & 0x0400) = 0) {

Count = Count + 1

Divisor = Divisor << 1, I

while (Count 1 = 0) { if (Dividend > = Divisor) {

Quotient = Quotient + 2 " Count, Dividend = Dividend - Divisor, }

Count = Count - 1 Divisor = Divisor >> 1 if (Dividendneg == 1) if (Divisorneg =- 1) { Quotient = Quotient, Remainder = 0 - Dividend, I else {

Quotient = 0 - Quotient, Remainder = 0-- Dividend, else

if (Divisorneg 1) { Quotient = 0 - Quotient, Remainder = Dividend, I else {

Quotient = Quotient, Remainder = Dividend, I

Начало деления

Выравнивание делителя

для начала деления

Инкрементирование

счетчика сдвигов

Выполнение деления Можно выполнить вычитание

Изменение значения

Делимое было попожительнйм



0 ... 120121122123124125126 ... 159