ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
104140 Топик полностью
mse (02.11.2007 13:34, просмотров: 333) ответил Andreas на Вроде здесь проскакивала ссылка на несложный алгоритм вычисления квадратного корня, никто не помнит?
версия Ал.Труш. <asm> Программные трюки: вычисление квадратного корня ;**************************************************************************************************** ;* ;* Подпрограмма вычисления квадратного корня для 24-ти битного аргумента * ;* (c) 1998 Alexander Trush http://trush.da.ru trush@ropnet.ru 2:5020/392.40 ;* ; ; Вы можете свободно использовать, распространять, модифицировать этот ; код до тех пор, пока вы указываете моё авторство и распространяете ; это требование. Кроме того, я хотел бы получать уведомление о ; применении этого кода по e-mail (trush@kbotd.ru). sqrt24: ldi mask,1 ; Используем маску в регистре, т.к. команды EORI нет... ldi count,12 ; Последний бит значения корня не требует специального ; подхода - есть запас от потери битов аж 4 бита clr16 work_h, work_l clr16 dist_h, dist_l ; Очистка накопителя значения корня sqrt24_1: cpi src_h, 64 cpc work_l, dist_l cpc work_h, dist_h brcs sqrt24_2 subi src_h, 64 sbc work_l, dist_l sbc work_h, dist_h sqrt24_2: rol dist_l rol dist_h eor dist_l, mask ; Инверсия младшего бита значания корня, ; т.к. при заёме должны писать 0, и 1 при отсутствии lsl src_l ; Сдвиг аргумента на 2 бита rol src_m ; work_h:work_l:src_h:src_m:src_l <<= 2 rol src_h rol work_l rol work_h lsl src_l rol src_m rol src_h rol work_l rol work_h dec count ; Получили ли все биты значения корня кроме последнего?.. brne sqrt24_1 cp dist_l, work_l cpc dist_h, work_h adc dist_l, src_m ; Команды ADCI нет, а src_m точно здесь равен 0 adc dist_h, src_m ret ;****************************************************************************** Коментарии, предложения пишите на один из представленных адресов на {моей персональной странице}. </asm>