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

 
 
> Проверьте
ILYAUL
сообщение Aug 3 2010, 16:51
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Всем привет.

Написал вот такой алгоритм деления. И вроде делит всё правильно и разрядность данных ее не пугает и остаток сохраняет , но чувство того , что чего-то упустил осталось.
А вот не пойму , что.
BeginDIV и ENDDIV - макросы для стека. ldwi - раскрывается в LDI. Retneg: - возврат к отрицательному числу , если делимое было отрицательное.

Код
;+ Подпрограмма деления 32/16.Все результаты сохраняются в SRAM
ValueX2:
        cli
        BeginDIV
        clr    Flags
        clr    count
        clr    mean1
        clr    mean0
        clr    minut
        ldwi    Z,(StartRAM085+MulMCH); загружаем адрес значения MC
        ld    temp,Z+
        ld    temp1,Z+
        ld    mean0,Z+
        ld    mean1,Z+        ; загружаем значение MC
        lds    rab,(StartRAM085+AddMCX1H); загружаем значение делителя
        lds    rab1,(StartRAM085+AddMCX1L)
Div:        
        sub    temp1,rab1
        sbc    temp,rab
        sbc    minut,zero
        brmi    TestNEG        ; Если 0 - загружаем среднее (младший) MC
        inc    count        ; Если не 0 - прибавляем счётчик результата
        sts    (StartRAM085+TailH),minut;+              
        sts    (StartRAM085+TailMH),temp;+              
        sts    (StartRAM085+TailML),temp1;+ Здесь  остаток
        sts    (StartRAM085+TailLH),mean0;+              
        sts    (StartRAM085+TailL),mean1;+              
        rjmp    DIV        ; Снова делим
TestNEG:        
        tst    count        ; Ноль после деления?
        brne    SaveX2        ; НЕТ - сохраняем значение старшее
        sbrc    Flags,fl_Shift
        rjmp    InitShift
        ldi    count,4
        clr    minut
        ldwi    Z,(StartRAM085+MulMCH); загружаем адрес MC        
        ld    temp,Z+
        ld    temp1,Z+
        rjmp    ShiftT    
InitShift:
        ldi    count,4
        ldwi    Z,(StartRAM085+MulMCH)
        ld    minut,Z+
        ld    temp,Z+
        ld    temp1,Z+
        ld    mean0,Z+
        ld    mean1,Z+
ShiftT:            
        lsl    mean1
        rol    mean0
        rol    temp1
        rol    temp
        rol    minut
        dec    count
        brne    ShiftT
        ldwi    Z,(StartRAM085+MulMCH)
        st    Z+,minut
        st    Z+,temp
        st    Z+,temp1
        st    Z+,mean0
        st    Z+,mean1
        sbr    Flags,1<<fl_Shift        
        rjmp    Div
;************************************************
SaveX2:
        sbrc    Flags,fl_ResultH
        rjmp    RESX2M    
        sts    (StartRAM085+X2H),count; Сохраняем сотые
        sbr    Flags,1<<fl_ResultH
        rjmp    Forward
RESX2M:
        sbrc    Flags,fl_ResultM
        rjmp    RESX2L    
        sts    (StartRAM085+X2M),count; Сохраняем  десятые
        sbr    Flags,1<<fl_ResultM
        rjmp    Forward
RESX2L:
        sts    (StartRAM085+X2L),count; Сохраняем единицы
        sbr    Flags,1<<fl_ResultL
        rjmp    ValDiv
Forward:
        clr    count
        ldwi    Z,(StartRAM085+TailH)
        ld    minut,Z+
        ld    temp,Z+
        ld    temp1,Z+
        ld    mean0,Z+
        ld    mean1,Z+
        ldi    count,4
        rjmp    ShiftT
ValDiv:
        lds    rab,(StartRAM085+dtMCH)
        sbrc    rab,MsbOne
        rjmp    RetNeg
RetNeg:
        lds    temp,(StartRAM085+X2H)
        lds    temp1,(StartRAM085+X2M)
        lds    rab,(StartRAM085+X2L)
        ldi    count,4
        swap    rab
Cycle:
        lsl    rab
        rol    temp1
        dec    count
        brne    Cycle
        mov    rab1,zero
        mov    rab,zero
        sub    rab1,temp1
        sbc    rab,temp
        sub    rab1,one
        sbc    rab,zero
        sts    (StartRAM085+X2H),rab
        sts    (StartRAM085+X2M),rab1
        EndDIV
        reti


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kurtis
сообщение Aug 4 2010, 11:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Интересно, а почему решили писать свою реализацию? Чем не устраивала уже существующая?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:23
Рейтинг@Mail.ru


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