ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
381303 Топик полностью
koyodza (17.01.2013 17:28 - 18:11, просмотров: 337) ответил AD на Какие-то проблемы? Повторяю, напишите проще или хотя бы так же
попробую. Для деления с округлением к нулю отрицательного 16-разрядного числа на 2 на AVR получается всего 4 команды. Дополнил для чисел большей разрядности и арифметического округления к ближайшему целому  Число в Rhigh Rlow ASR Rhigh ROR Rlow BRCC m1 ADIW Rlow, 1 m1: Здесь при разрядности больше 16 вместо ADIW, а также на МК без такой команды (8080, 51 и т.п.) может использоваться последовательность типа такой: ADD Rlow, 1 ADC Rhigh, 0 Деление на 4 и больше: EOR Rtmp,Rtmp ; XOR ASR Rhigh ROR Rlow ROR Rtmp ... ASR Rhigh ROR Rlow ROR Rtmp BREQ m1 ADIW Rlow, 1 m1: Деление на 2 в степени, задаваемой регистром Rs EOR Rtmp,Rtmp ; XOR m2: ASR Rhigh ROR Rlow ROR Rtmp DEC Rs BRNE m2 TST Rtmp BREQ m1 ADIW Rlow, 1 m1: Для деления с арифметическим округлением (т.е. к ближайшему целому) http://caxapa.ru/381304.html получается ещё проще, и работает независимо от знака исходного числа, а также без условного перехода: ; повторять нужное число раз ASR Rhigh ROR Rlow ; этот фрагмент EOR Rtmp,Rtmp ADC Rlow, Rtmp ADC Rhigh, Rtmp То же самое для 32-разрядного числа в регистрах Ra Rb Rc Rd, где Ra младший: ; повторять нужное число раз ASR Rd ROR Rc ROR Rb ROR Ra ; этот фрагмент EOR Rtmp,Rtmp ADC Ra, Rtmp ADC Rb, Rtmp ADC Rc, Rtmp ADC Rd, Rtmp Деление на 2 в степени, задаваемой регистром Rs m2: ASR Rd ROR Rc ROR Rb ROR Ra DEC Rs ; флаг С не изменяется BRNE m2 ; флаг С не изменяется EOR Rtmp,Rtmp ; флаг С не изменяется ADC Ra, Rtmp ADC Rb, Rtmp ADC Rc, Rtmp ADC Rd, Rtmp Могу развить тему для некоторых других архитектур, только не вижу смысла