А заодно в виде упражнения и кубический 8)
использует умножение из той же книжкиКод:;======================================================================= ; E = CBRT(HL) ;----------------------------------------------------------------------- cbrt: ;----------------------------------------------------------------------- push h lxi d,16 shl 8 .loop: mov a,e add e mov e,a mov h,e inr h push d call umul88 pop d push h pop b dad h dad b inx h mov a,d dcr a jz .ok .shift: dad h jc .skip dcr a jnz .shift .ok: pop b mov a,c sub l mov l,a mov a,b sbb h jc .endif mov b,a mov c,l inr e .endif: push b .skip: mov a,d sui 3 mov d,a jp .loop pop b ret ;=======================================================================
Скрытый текст
Код:;----------------------------------------------------------------------- ; HL = H * E ; BС,E:CONST ;----------------------------------------------------------------------- umul88 equ gg_u88b1 ;----------------------------------------------------------------------- proc gg_u88b1 ; У88Б1 модифицированная ;----------------------------------------------------------------------- mvi d,0 mvi l,0 mvi a,8 .loop: dad h jnc .skip dad d .skip: dcr a jnz .loop ret ;----------------------------------------------------------------------- endp[свернуть]
без него не смог, так как портировал данный код из другой известной книжки:
Скрытый текст
Код:int icbrt(unsigned x){ int s; unsigned y,b; s=15; y=0; while (s>=0) { y = 2*y; b = (3*y*(y+1)+1)<<s; //b = b & 0xFFFF; if (x>=b) { x = x - b; y = y + 1; } s = s - 3; //printf("x=%6u, y=%6u, b=%6u, s=%2i\n",x,y,b,s); } return y; }[свернуть]![]()





Ответить с цитированием