Автор: Sana - 15 Декабря 2004, 13:20 |
КОД mpy clrf byte0 //очищаем регистры отведенные под резултьтат, первый clrf byte1 //очищаем регистры отведенные под резултьтат, второй clrf byte2 //очищаем регистры отведенные под резултьтат, третий clrf byte3 //очищаем регистры отведенные под резултьтат, четвертый (результат 32 разряда) movlw 16 //загружаем в регистр w константу 16 (столько будет проходов цикла, для умножения 2х 16 разрядных чисел) movwf count,W //выгружаем регистр w в регситр count (в нем и будет вестись счетчик проходов цикла) bcf STATUS,C //сбрасываем флаг переноса loop rrf mulplr_H,F //начинаем цикл,двигаем вправо старшие разряды множителя через флаг перноса rrf mulplr_L,F //двигаем вправо младшие разряды множителя //резултат - имеем сдвинутое на разряд вправо 16-ричное число в расположенное в 2 х регистрах btfsc STSTUS,C //проверяем флаг переноса call summ //если он равен 1 то вызываем процедуру суммирования rrf byte3,F //сдвигаем вправо разряды резултата через флаг переноса, аналогично множителю - сначала старшие (четвертый байт) rrf byte2,F //сдвигаем третий байт rrf byte1,F //сдвигаем второй байт rrf byte0,F //ну и первый. результат - двигаем вправо на разряд всё 32 разрядное число расположенное в 4-х регистрах decfsz count,F //декремент (вычитаем единицу) из регистра count и проверяем не равен ли регистр нулю goto loop //если count не равен нулю (пока не равен) повторяем цикл c метки loop retlw 0 //выходим из процедуры... summ bcf STATUS,DC //процедура суммирования, cбрасываем флаг переноса разряда movf mulcnd_L,W //загружаем младшие разряды множимого в W addwf byte2, F //cуммируем младший байт множителя, с первым (младшим) байтом результата (byte0) //-------------------------------------------------------------------------------------------------- //Из документации не понятно, учитывает ли команда addwf флаг переноса разряда автоматически, //тоесть учитывается ли в суммировании перенесенный разряд, из предудущей операции, //если нет, то тут надо вписать следующий кусок: btfsc STATUS,DC incf byte3,F //-------------------------------------------------------------------------------------------------- movf mulcnd_H,W //загружаем старшие разряды множимого в W addwf byte3,F //cуммируем старший байт множителя, с четвертым байтом результата (byte3) retlw 0 //выход из процедуры суммирования... Правда я абcолютно не уверен, что она правильная, и что она будет работать... но попытаться можно... Комментарии: mulplr_L - младший байт множителя mulplr_H - старший байт множителя mulcnd_L - младший байт множителя mulcnd_H - старший байт множителя byte0-byte3 - четыре байта результата summ - процедура суммирования 16 разрядных чисел... Вот в общем то и всё... - сдеално по аналогии с исходным кодом, возможно где то ошибся... ![]() |
Автор: natinn - 15 Декабря 2004, 13:24 |
Sana , спасибки те большое!!!! |
Автор: Kodo - 15 Декабря 2004, 16:54 |
natinn С тебя ящик пива ![]() ![]() |
Автор: natinn - 15 Декабря 2004, 19:46 |
Kodo , ну я уж сама разберусь, что мне Sana поставить!!! |
Автор: Kodo - 16 Декабря 2004, 09:05 |
natinn Ладно, не обижайся... Это я так... |