Деление двоичных чисел
rep stosb ;m1 mov bx,j-1;j=0..m-1 mov cx,j m2: push cx;вложенные циклы cmp v[bx],0 je m6 ;m3 mov si,i-1;i=0..n-1 mov cx,i mov k,0 m4: mov al,u[si] mul byte ptr v[bx] xor dx,dx mov dl,w[bx+si+1] add ax,dx xor dx,dx mov dl,k add ax,dx;t=(ax)? временная переменная push dx xor dx,dx div b;t mod b mov ah,dl pop dx mov k,al mov w[bx+si+1],ah ;m5 dec si loop m4 mov al,k mov w[bx],al m6: dec bx pop cx loop m2 pop si endm sub_sign_N macro minuend,deduction,N local cycl,m1 ;старший байт по младшему адресу push si mov cl,N mov si,N-1 cycl: mov al,deduction[si] sbb minuend[si],al ; jnc m1 ; neg minuend[si] m1: dec si loop cycl pop si endm add_unsign_N macro carry,summand_1,summand_2,N local cycl,end_p mov cl,N mov si,N-1 cycl: mov al,summand_2[si] adc summand_1[si],al dec si loop cycl jnc end_p adc carry,0 end_p: nop endm div_sign_N macro u,N,v,w,r local m1 ;старший байт по младшему адресу mov r,0 lea si,u;j=0 xor di,di;j=0 mov cx,N xor dx,dx xor bx,bx m1: mov ax,256;основание с.с. mul word ptr r;результат в dx:ax mov bl,[si] add ax,bx div v ;сформировать результат: mov w[di],al;частное mov r,ah;остаток в r inc si inc di loop m1 ;если нужно – получим модуль (уберите знаки комментария) ; mov cx,N;длина операнда ; lea bx,w ; call calc_abs_r endm
