[an error occurred while processing this directive]
8 на 4 пойдет?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Al Volovich 04 августа 2005 г. 07:57
В ответ на: Я шоколядный заяц, ембедер поделись с ембедером куском кода. деление 2х байтовых чисел. помогу с пивом отправлено Nikolayus 04 августа 2005 г. 02:33

С для 51


void Div8on4(ubyte data* num, ubyte data* div)
//Производит целочисленное деление 8 байт на 4 байта num = num/div
//num - MSB first, старший бит = 0; старший бит div = 0
//остаток - в div MSB first
{
ubyte idata res[8];
ubyte iii,kkk;

for(iii=0;iii
kkk=31;
while(((*div)&0x40)==0){
roleft((ubyte idata*)div,4);
kkk--;
}
for(iii=0;iii if(*(ulong data*)num>=*(ulong data*)div){//Если частный остаток больше - задвигаем 1
*(ulong data*)num -=*(ulong data*)div;
CY = 1;
}else CY = 0;
roleft(res,8);
CY = 0;
roleft((ubyte idata*)num,8);
};

//Помещаем остаток в div
for(iii=0;iii CY=0;
roright((ubyte idata*)num,8);
}
*(ulong data*)div = *(ulong data*)(num+4);//помещаем в div

for(iii=0;iii}

void roleft(ubyte idata* arr, ubyte cnt)
//Сдвигает массив arr из cnt байт на 1 разряд влево. Задвигает С в младший разряд
//arr передается в R7, cnt - в R5
{
#pragma asm
mov A,R5
push ACC
push PSW
mov A,R7
add A,R5
pop PSW
xch A,R0
rol1: dec R0
mov A,@R0
rlc A
mov @R0,A
djnz R5,rol1
pop ACC
mov R5,A
#pragma endasm
}

void roright(ubyte idata* arr, ubyte cnt)
//Сдвигает массив arr из cnt байт на 1 разряд вправо. Задвигает С в младший разряд
//arr передается в R7, cnt - в R5
{
#pragma asm
mov A,R5
push ACC
mov AR0,R7
ror1: mov A,@R0
rrc A
mov @R0,A
inc R0
djnz R5,ror1
pop ACC
mov R5,A
#pragma endasm
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru