User Tag List

Показано с 1 по 10 из 32

Тема: Квадратный корень на i8080

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #31

    Регистрация
    02.07.2010
    Адрес
    Запорожье
    Сообщений
    65
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тем временем реализовал деление на 10 сдвигами:
    Код:
    unsigned divu10(unsigned n) {
       unsigned q, r;
       q = (n >> 1) + (n >> 2);
       q = q + (q >> 4);
       q = q + (q >> 8);
       q = q + (q >> 16);
       q = q >> 3;
       r = n - q*10;
       return q + ((r + 6) >> 4);
    // return q + (r > 9);
    }
    -- отсюда

    Скрытый текст

    Код:
    ;=======================================================================
    ;   HL [A] = HL/10  
    ;-----------------------------------------------------------------------
    proc udiv10
    ;-----------------------------------------------------------------------
        ora  a
        mov  a,h
        rar   
        mov  b,a
        mov  a,l
        rar
        mov  c,a ; bc = n >> 1
        ora  a
        mov  a,b
        rar
        mov  d,a
        mov  a,c
        rar
        add  c
        mov  e,a
        mov  c,a
        mov  a,d
        adc  b
        mov  b,a
        mov  d,a       ; bc = de = (hl>>1)+(hl>>2) = q
        xchg           ; de = n ; bc = hl = q
        xra  a
        call shr_hl.s4 ; hl = q >> 4 
        dad  b         ; hl = q = q + (q>>4)
        mov  c,h
        mvi  b,0
        dad  b         ; hl = q = q + (q>>8)
        xra  a
        call shr_hl.s3 ; hl = q = q >> 3
        mov  b,h
        mov  c,l       ; bc = q
        dad  h
        dad  h
        dad  b
        dad  h         ; hl = q*10
        mov  a,e
        sub  l
        adi  6
        rar
        rar
        rar
        rar
        ani  15        ; a = (r+6)>>4
        add  c
        mov  l,a
        mov  a,b
        aci  0
        mov  h,a       ; hl = q + ((r+6)>>4) = n/10
        mov  a,l
        add  a
        add  a
        add  l
        add  a         ; a = l*10
        sub  e
        cma 
        inr  a         ; a = e - l*10 (remainder)
    	ret
    ;-----------------------------------------------------------------------
    .dummy = shr_hl	
    ;-----------------------------------------------------------------------
    endp    
    ;=======================================================================
    ;
    ;=======================================================================
    ;   FOR .s1-.s7 A MUST BE 0 !
    ;-----------------------------------------------------------------------
    proc shr_hl
    ;-----------------------------------------------------------------------
        xra  a
    .s1:    
        dad  h
        ral
    .s2:    
        dad  h
        ral
    .s3:    
        dad  h
        ral
    .s4:    
        dad  h
        ral
    .s5:    
        dad  h
        ral
    .s6:    
        dad  h
        ral
    .s7:    
        dad  h
        ral
        mov  l,h
        mov  h,a
    	ret
    ;-----------------------------------------------------------------------
    endp
    ;=======================================================================
    [свернуть]

    -- надо будет ускорить вывод чисел
    ++++++++++++++++++++++++++
    оказалось, что исходный вариант делит хорошо, но остаток у него левый причем не всегда, а когда аргумент равен 10*х и 10*х+1
    поэтому доточил в конце вычисление правильного остатка уж даже не знаю, но надеюсь, что быстрее, чем просто деление на 10
    (уже влом такты считать)
    Последний раз редактировалось shoorick; 29.08.2016 в 09:56. Причина: исправление

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. PMI-80 - одноплатник на i8080
    от rw6hrm в разделе Разное
    Ответов: 72
    Последнее: 02.09.2022, 12:27
  2. Совместимость Z80 и i8080 (580ВМ80)
    от Dmitry Dubrovenko в разделе Для начинающих
    Ответов: 50
    Последнее: 08.05.2016, 09:54
  3. Код эмуляции i8080 на С
    от medvdv в разделе Эмуляторы отечественных компьютеров
    Ответов: 15
    Последнее: 27.03.2015, 03:43
  4. Квадратный корень
    от Destr в разделе Программирование
    Ответов: 29
    Последнее: 25.03.2012, 11:14
  5. Эмулятор i8080
    от Higgins в разделе Разное
    Ответов: 2
    Последнее: 20.05.2011, 11:43

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •