Двоично-десятичные числа (BCD-числа). Неупакованные BCD-числа.
mul_bcd_r v.n.d.l.w eld push ds pop es lea si.w+1 lea di.v mov ex,n rep movsb:D2: mov si.O;n=0:D3: @@m7: moval.uO[si] emp v,al jne @@ml mov qq.9:qq=b-l jmp @@m2 (<t@ml: xor ax,ax mov al.uO[si] mul b xor dx.dx mov dl,uO[si+l] add ax.dx mov bl.v;v › bx divbl mov qq.al @@m2::проверим выполнение неравенства: @@m4: mul v+1 mov temp .ax: taiip=v2*qq xor ax.ax mov al,uO[si] mul b xor edx.edx mov dl.uO[si+l] add dx.ax mov al.qq mul v:eax=qq*vl sub dx,ax xchg dx.ax mul b xor bx.bx mov bl.uO[si+2] add ax.bx cmp temp,ax jna (a@m3 dec qq mov al.qq jmp @@m4 @@m3:: D4 mul_bcd_r v.n.qq.l.w mov bx.si push si sub_bcd_r uO[bx].<n+l>.w,<n+l>,uO[bx];v< › w jnc @@m5:переход, если нет заема (результат положительный) mov borrow.1;запоминаем факт заема, получаем дополнение pop si;D5 @@m5: moval.qq mov q[si].al cmp borrow.1:был заем на шаге D4?? jne @@m6:D6 – компенсирующее сложение mov borrow.0:сбросин факт заема dec q[si] mov bx.si push si add_bcd_r uO[bx].<n+l>.vO,<n+l>,uO;перенос не нужен:D7 @@m6: pop si inc si cmp si.mm jle @@m7:D8 – денормализация mov bx.si div_bcd_l_r uO[bx],N,d.r.temp_r ret div_bcd_NM_r endp * main: call div_bcd_NM_r end main
