Сборник по задачам и примерам Assembler


Деление N-разрядного беззнакового



Деление N-разрядного беззнакового целого BCD-числа на одноразрядное BCD-число размером 1 байт (макрокоманда)

div_bcd_l_r macro u.N.v.w.r local ml

:div_bcd_l_r u.N.v.w.r - деление N-разрядного беззнакового целого BCD-числа

;на одноразрядное BCD-число размером 1 байт. :Вход: и - делимое; N - длина делимого, v - делитель. :Выход: w - частное, г - остаток. :Порядок следования байтов - старший байт по младшему адресу (не Intel) (!).

mov г.О

lea si.u ;j=0

хог di.di :j=0

mov cx.N

xor dx.dx

xor bx.bx

ml: mov ah,г

mov al.[si]

aaJ

div v сформировать результат:

mov w[di].al ;частное

mov r.ah .-остаток в г

inc si

inc di

loop ml

:если нужно - получим модуль (уберите знаки комментария)

: mov cx.N ;длина операнда

: lea bx.w

; call calc_abs_r

endm

Деление неупакованных BCD-чисел

:div_bcd_NM_r.asm - деление неупакованных BCD-чисел и и v размером n+m и п байт.

;Вход: и-и^гиз-.и,^,, - делимое: v=v1v2...vn - делитель. Ь=25б - основание системы счисления.

;Выход: q™q1q2-.qm - частное. r=rir2...rn - остаток,

:Порядок следования байт - старший байт по младшему адресу (не Intel) (!).

.data значения в и и v нужно внести

uO db 0 дополнительный байт для нормализации

u db 1,0.3.5,9,4,6 :делимое

m=$-u :длина в байтах значения и

vO db 0 :для сложения OvjV2..vn

v do 5.9.1 :делитель

n=$-v :длина в байтах значения v

ГПП1=П1-П

w db m+1 ctup (0) :для промежуточных вычислений q db mm dup (0) :частное qq db 0

г db n dup (0) :остаток

b dw 10 юснование системы счисления

d db 0

temp dw 0

temp_r db n dup (0)

borrow db 0 :факт заема на шаге D4

k db 0 ;перенос 0 =< k < 255

carry db 0

.code

:вставить описание макрокоманд calc_complement_r. mul_bcd_r. sub_bcd_r. add_bcd_r. :div_bcd_l_r

div_bcd_NM_r proc ;D1 - нормализация

xor ax.ax

mov dl.v

inc dl :vl+l

mov ax.b

div dl

mov d.al :d=b/(v1+l)

mul_bcd_r u.m.d.l.w

eld

push ds

pop es

lea si.w

lea di.uO

mov cx.m+1 rep movsb

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:




- Начало -  - Назад -  - Вперед -