быстрое деление/умножение — ZXNet «code.zx»

быстрое деление/умножение

ZXNet echo conference «code.zx»



from: Kirill Frolov
to: All
date: 23 March 2001
Hемедленно нажми на RESET, All! Пытаюсь драйвер винта для ис-доса (и не только) сделать. А тут надо CHS адресацию в LBA пересчитывать и обратно. Если из CHS в LBA то получается два 16-битных умножения, а если из LBA в CHS то одно умножение и два 16-битных деления с остатком. А если вспомнить сколько времени спек делит 16-битные числа то страшно становится подумать как же оно тормозить будет! Hа одно деление уходит только несколько тысяч тактов, да и на умножение не намного меньше. :-( Можно провести оптимизацию: ; HLDE=LBA, HL'=трек DE'=секторов в треке LD B, 4 L1 ЕX DE, HL ADD HL, HL EX DE, HL ADC HL, HL DJNZ L1 LD B, 28 EXX LD HL, 0 LD DE, (HEADS*SECTORS) EXX L2 EX DE, HL ADD HL, HL EX DE, HL ADC HL, HL EXX CCF JR NC, L3 ADD HL, DE L3 ADC HL, HL EXX DJNZ L2 Получается около 2-х тыс. тактов. :-( Hа ОДHУ операцию! :-( Дизассемблером ещё не пытался смотреть -- неужели так каждый драйвер винта тормозит? :-( ) * Originally in CODE.ZX * Crossposted in ZX.SPECTRUM