А действительно.
Код:
0001 0000 ; вход: HL - квадрат числа
0002 0000 ; выход: B - число
0003 0000 ; DE - разница между исходным числом и квадратом
0004 0000 01 08 00 SQRT: LXI B,8
0005 0003 11 00 00 LXI D,0
0006 0006 CD 22 00 SQRT1: CALL SHFT
0007 0009 CD 22 00 CALL SHFT
0008 000C E5 PUSH H
0009 000D 78 MOV A,B
0010 000E 87 ADD A
0011 000F 47 MOV B,A
0012 0010 2F CMA
0013 0011 6F MOV L,A
0014 0012 26 FF MVI H,0FFh
0015 0014 29 DAD H
0016 0015 23 INX H
0017 0016 19 DAD D
0018 0017 D2 1C 00 JNC SQRT2
0019 001A 04 INR B
0020 001B EB XCHG
0021 001C E1 SQRT2: POP H
0022 001D 0D DCR C
0023 001E C2 06 00 JNZ SQRT1
0024 0021 C9 RET
0025 0022 ;
0026 0022 EB SHFT: XCHG
0027 0023 29 DAD H
0028 0024 EB XCHG
0029 0025 29 DAD H
0030 0026 D0 RNC
0031 0027 13 INX D
0032 0028 C9 RET
Против:
Код:
0001 0000 ; вход: HL - квадрат числа
0002 0000 ; выход: B - число
0003 0000 ; DE - разница между исходным числом и квадратом
0004 0000 01 08 00 SQRT: LXI B,8
0005 0003 11 00 00 LXI D,0
0006 0006 EB SQRT1: XCHG
0007 0007 29 DAD H
0008 0008 EB XCHG
0009 0009 29 DAD H
0010 000A D2 0E 00 JNC SQRT11
0011 000D 13 INX D
0012 000E EB SQRT11: XCHG
0013 000F 29 DAD H
0014 0010 EB XCHG
0015 0011 29 DAD H
0016 0012 D2 16 00 JNC SQRT12
0017 0015 13 INX D
0018 0016 E5 SQRT12: PUSH H
0019 0017 78 MOV A,B
0020 0018 87 ADD A
0021 0019 47 MOV B,A
0022 001A 2F CMA
0023 001B 6F MOV L,A
0024 001C 26 FF MVI H,0FFh
0025 001E 29 DAD H
0026 001F 23 INX H
0027 0020 19 DAD D
0028 0021 D2 26 00 JNC SQRT2
0029 0024 04 INR B
0030 0025 EB XCHG
0031 0026 E1 SQRT2: POP H
0032 0027 0D DCR C
0033 0028 C2 06 00 JNZ SQRT1
0034 002B C9 RET