Кодинг для Спектрум и 8бит

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Кодинг для Спектрум и 8бит » Программирование » Деление на 10


Деление на 10

Сообщений 1 страница 2 из 2

1

Как-то раз мне попался на глаза трэд

Код:
; HL dividend less then 1023d ( only need 0-799 )
; returns A quotient
; H remainder


Div10:
xor a
ld b,#7
ld de,#-640d
divloop:
add hl,de
jr c, div1
sbc hl,de
ora a ; not sure if this is needed here to clear carry
div1:
rl a
add hl,hl
djnz divloop
add hl,hl
ret


нифига не понятно(: я стал искать дальше. Ее один Unsigned Integer Division Routines для 6502:

Код:
;Divide by 10
;17 bytes, 30 cycles
  lsr
  sta  temp
  lsr
  adc  temp
  ror
  lsr
  lsr
  adc  temp
  ror
  adc  temp
  ror
  lsr
  lsr


Уф, мне стало легче. Подобный код можно переписать на z80:

Код:
;compile with sjasmplus
	device zxspectrum128
        ORG #6000
begin


	jr $
	ld a,34
;;;Divide by 10
;;;17 bytes, 30 cycles
;;  lsr
	srl a
;;  sta  temp
	ld c,a
;;  lsr 0->A->C
	srl a
;;  adc  temp
	adc a,c
;;  ror C<-7<-0<-C
	rr a
;;  lsr
	srl a
;;  lsr
	srl a
;;  adc  temp
	adc a,c
;;  ror
	rr a
;;  adc  temp
	adc a,c
;;  ror
	rr a
;;  lsr
	srl a
;;  lsr
	srl a
;A=N/10
	jr $
end
	display /d,end-begin
	savesna "!void.sna",begin

Это работает. Я решил испытать алгоритм на 16 бит:

Код:
	device zxspectrum128
        ORG #6000
begin
	jr $
	ld hl,1234

;  lsr
	srl h:rr l
;  sta  temp
	ld bc,hl
;  lsr
	srl h:rr l
;  adc  temp
	adc hl,bc
;  ror
	rr h:rr l
;  lsr
	srl h:rr l
;  lsr
	srl h:rr l
;  adc  temp
	adc hl,bc
;  ror
	rr h:rr l
;  adc  temp
	adc hl,bc
;  ror
	rr h:rr l
;  lsr
	srl h:rr l
;  lsr
	srl h:rr l
	
;HL=123
	jr $
end
	display /d,end-begin
	savesna "!void.sna",begin


И, кажется, что решение очень интересное, которое есть куда применить. Только я не врубаюсь, как это работает.

2

В школе должны были научить делить столбиком.
Без остатка бесполезно.
Разбираться в коде в котором чистится и так сброшенный флаг и используется rl a нельзя ни при каких условиях, слабоумие заразно.


Вы здесь » Кодинг для Спектрум и 8бит » Программирование » Деление на 10