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


Деление N-разрядного беззнакового - часть 2


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

Упакованные BCD-числа

В отличие от неупакованных BCD-чисел, разработчики команд микропроцессора Intel весьма сдержанно отнеслись к проблеме обработки упакованных BCD-чисел. Существуют только две команды — DAA и DAS, которые поддерживают процесс сложения и вычитания упакованных BCD-чисел. Умножение и деление этих чисел не поддерживается вовсе. По этой причине при необходимости выполнения арифметических вычислений с упакованными BCD-числами есть смысл предварительно преобразовывать их в неупакованное представление, выполнять необходимые действия, результат которых конвертировать (если нужно) обратно в упакованный вид. Так как действия по преобразованию не являются основными в процессе вычислений, то желательно, чтобы они были максимально быстрыми. Можно предложить много вариантов подобного преобразования. Рассмотрим один из них.




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