А заодно в виде упражнения и кубический 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;
}
[свернуть]