Z80 – Quadratwurzel aus 16-Bit-Zahl
Die hier vorgestellte kleine Routine errechnet die Integer-Quadratwurzel aus einer im Register HL gegebenen 16-Bit-Zahl. Das Ergebnis wird im Register DE gespeichert.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
; +++++++++++ ZUSATZ: CPC 7'87 ; DE=INT(SQR(HL)) ; Integer-Quadratwurzeln - voller Bereich sqr1: ld de,0 ld bc,-1 sqrlp1: and a add hl,bc ; BC<0 ret nc ; HL<=0 inc de dec bc dec bc jr sqrlp1 |
Und hier noch eine Variante, bei der das Ergebnis im Register A landet. Das Register HL nimmt wieder die Zahl auf, aus der die Quadratwurzel ermittelt werden soll.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
; A=INT(SQR(HL)) ; Integer-Quadratwurzeln ; AKKU Max ist 255 -> Max Zahl 65025 sqr: xor a ld bc,-1 sqrlp: add hl,bc ; BC<0 ret nc ; HL<=0 inc a dec bc dec bc jr sqrlp end |