Re: AVR - celočíselné dělení 2 čísel

Jiří Reček recek.jiri@quick.cz
Úterý Duben 10 11:04:41 CEST 2007


Používám dělení 24bitových čísel, tak kdyžtak by se to dalo zkrátit.

Jirka

; *****************************************************************
; Dělení 3 byty / 3 byty = 3 byty
; Vstup:
; Delenec r16,r17,r18
; Dělitel r19,r20,r21
; Výstup:
; Výsledek r16,r17,r18
; Zbytek r19,r20,r21
; Zásobník: 8 úrovní
Div24:
  push r22
  push r23
  push r24
  push r25
  push r26
  push r27
  push r28
  push r29

  clr  r26   ; Dělitel
  clr  r27
  clr  r28

  mov  r22,r16  ; Dělenec
  mov  r23,r17
  mov  r24,r18
  clr  r25

  ; Vynulovat výsledek
  clr  r16
  clr  r17
  clr  r18

  ldi  r29,24  ; Počet bitů

Div24Loop:
  ; Posunutí dělitele
  lsr  r21
  ror  r20
  ror  r19
  ror  r28
  ror  r27
  ror  r26
  ; porovnání
  cp  r22,r26
  cpc  r23,r27
  cpc  r24,r28
  cpc  r25,r19
  cpc  r25,r20
  cpc  r25,r21
  clc
  brmi Div24NoSubst
  ; odečtení
  sub  r22,r26
  sbc  r23,r27
  sbc  r24,r28
  sec     ; nastavení přenosu
Div24NoSubst:
  ; posunutí výsledku
  rol  r16
  rol  r17
  rol  r18

  dec  r29    ; Další bitík
  brne Div24Loop

  ; Zbytek
  mov  r19,r22
  mov  r20,r23
  mov  r21,r24

  pop  r29
  pop  r28
  pop  r27
  pop  r26
  pop  r25
  pop  r24
  pop  r23
  pop  r22

  ret





Další informace o konferenci Hw-list