Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

ASM PIC18

Ср ноя 04, 2020 16:03:51

Добрый день, радиолюбители.
Есть маленькая проблемка. Код программы деления:

;=====деление======================
;==============
; ПОДПРОГРАММА ДЕЛЕНИЯ 5-РАЗРЯДНОГО СЛОВА (TEMP_1L1) НА 4-Х РАЗРЯДНОЕ (TEMP_1L)
; Результат - TEMP_1L1, остаток - TEMP_1L2
;=================
DIV_5_4 ;TEMP_1L1 / TEMP_1L = TEMP_1L1; TEMP_1L2 - остаток
;проверка делителя на 0


movf TEMP_2H,F,1 ;
btfss STATUS,Z,0 ;


movf TEMP_1H,F,1 ;
btfss STATUS,Z,0 ;
goto Div_5_4 ;
movf TEMP_1M,F,1 ;
btfss STATUS,Z,0 ;
goto Div_5_4 ;
movf TEMP_1L,F,1 ;
btfsc STATUS,Z,0 ;
retlw 0 ;
Div_5_4
call Setup40 ;перенос делимого во временный регистр
clrf TEMP_2H2 ;сброс остатка
clrf TEMP_1H2 ;сброс остатка
clrf TEMP_1M2 ;
clrf TEMP_1L2
Dloop40
bcf STATUS,C,0
rlcf TEMP_1L3,F,1 ;сдвиг влево младшего делимого
rlcf TEMP_1M3,F,1
rlcf TEMP_1H3,F,1 ;
rlcf TEMP_2H3,F,1 ;
rlcf TEMP_3H3,F,1 ;
rlcf TEMP_1L2,F,1 ;сдвиг влево младшего остатка
rlcf TEMP_1M2,F,1
rlcf TEMP_1H2,F,1
rlcf TEMP_2H2,F,1


movf TEMP_2H,W,1 ;проверяем, превышает старший остаток делитель
subwf TEMP_2H2,W,1 ; проверка
btfss STATUS,Z,0
goto Nochk40
movf TEMP_1H,W,1 ;
subwf TEMP_1H2,W,1 ; проверка
btfss STATUS,Z,0
goto Nochk40
movf TEMP_1M,W,1
subwf TEMP_1M2,W,1 ; проверка
btfss STATUS,Z,0
goto Nochk40
movf TEMP_1L,W,1 ;если равен, проверяем младший
subwf TEMP_1L2,W
Nochk40
btfss STATUS,C,0 ; перенос если
goto Nogo40 ; если остаток больше делителя
movf TEMP_1L,W,1 ;
subwf TEMP_1L2,F,1 ;
btfss STATUS,C,0
decf TEMP_1M2,F,1
movf TEMP_1M,W,1
subwf TEMP_1M2,F,1
btfss STATUS,C,0
decf TEMP_1H2,F,1
movf TEMP_1H,W,1
subwf TEMP_1H2,F,1
btfss STATUS,C,0
decf TEMP_2H2,F,1
movf TEMP_2H,W,1
subwf TEMP_2H2,F,1
bsf STATUS,C,0 ; переместить
Nogo40
rlcf TEMP_1L1,F,1
rlcf TEMP_1M1,F,1
rlcf TEMP_1H1,F,1
rlcf TEMP_2H1,F,1
rlcf TEMP_3H1,F,1 ;!!!!!!!!!!!!!!!
decfsz Temp,F,0 ; цикл пока все биты не проверим
goto Dloop40
retlw 0
Setup40
movlw .40 ; установки для 40 циклов
movwf Temp,0
movff TEMP_3H1,TEMP_3H3 ;
movff TEMP_2H1,TEMP_2H3 ;
movff TEMP_1H1,TEMP_1H3 ;
movff TEMP_1M1,TEMP_1M3 ;
movff TEMP_1L1,TEMP_1L3 ;
clrf TEMP_3H1,1
clrf TEMP_2H1,1
clrf TEMP_1H1,1
clrf TEMP_1M1,1
clrf TEMP_1L1,1
retlw 0
;=====деление======================

Вроде бы делит нормально. Но !!!!!!!!!!
Два числа 43024784875 / 100 000 делит неправильно. Должно быть 430 247 а получается 430 331 ???
Помогите найти ошибку.

Re: ASM PIC18

Сб ноя 07, 2020 06:09:18

Разрядность делимого и делителя по какому основанию считалась?
Во первых, код нужно оформлять в тегах кода. С положенным для кода форматированием.
Во вторых, у меня ощущение, что вы этот код не писали. Патамушта с именами регистров переменных какой то рандомный бред. Лично у меня разбираться в этой каше нет никакого желания.

Re: ASM PIC18

Вт ноя 10, 2020 07:26:52

Чтобы разбираться в этой каше надо соображать..!!! Кто не соображает, не пишите.

Re: ASM PIC18

Вт ноя 10, 2020 08:43:05

Вот и не пишет ни кто уже 6 дней.

Re: ASM PIC18

Вт ноя 10, 2020 11:35:17

Чтобы разбираться в этой каше надо соображать..!!!

Смешно. Вы пришли с вопросом ровно потому, что не понимаете как работает этот код. Вывалили код, в котором имена регистров выбраны так, чтобы максимально усложнить разбор кода. Мало этого, вы говорите о 4 и 5 разрядах операндов и не в состоянии ответить на вопрос об основании счисления. Можно только догадываться, что речь идет о шестнадцатиричном основании, то есть 16 и 20 бинарных разрядах, но тогда операнды выходят за диапазон...
Ну и нахрена мне тратить время на всю эту галиматью студня-недоучки?

Re: ASM PIC18

Вт ноя 10, 2020 14:46:07

Чтобы разбираться в этой каше надо соображать..!!!

Смешно. Вы пришли с вопросом ровно потому, что не понимаете как работает этот код. Вывалили код, в котором имена регистров выбраны так, чтобы максимально усложнить разбор кода. Мало этого, вы говорите о 4 и 5 разрядах операндов и не в состоянии ответить на вопрос об основании счисления. Можно только догадываться, что речь идет о шестнадцатиричном основании, то есть 16 и 20 бинарных разрядах, но тогда операнды выходят за диапазон...
Ну и нахрена мне тратить время на всю эту галиматью студня-недоучки?

Тему можно закрыть, надоело читать этот безграмотный бред с оскорблениями.

Re: ASM PIC18

Вт ноя 10, 2020 14:54:38

Вообще-то для подобной тестировки есть СИМУЛЯТОР -делаем пошаговое выполнение и анализируем результат.
8)

Re: ASM PIC18

Вт ноя 10, 2020 16:10:52

надоело читать

Феерично...
:))) :))) :)))
Мало того, что не в состоянии ответить ни на один вопрос, так еще и хамит...
:tea:

Добавлено after 1 minute 21 second:
СИМУЛЯТОР

Зато сильно "грамотный"... :roll:

Re: ASM PIC18

Вт ноя 10, 2020 20:41:28

Не судите строго...
Не всем же САМОСТОЯТЕЛЬНО пробиваться.
По своему опыту - иногда действительно на ошибочном решении можно зациклиться до "поцарапса" - тогда единственно разумное решение - начать всю прожку ЗАНОВО (через одну-две недельки).
:beer:
Ответить