я использовал алгоритм:
1)1/n ----->si
2)di=si
3) цикл
si/n
di=di+si
Код: Выделить всё
model tiny
masm
.386
.data
s db 42 dup(?) ;определение временного массива
a db 42 dup(?) ;результат
long dd 1 ; делимое
.code
assume cs:@code,ds:@code,es:@code,ss:@code
org 100h
begin:
mov cx,42
mov si,offset s ; результат
mov di,offset a ; временный массив
; dx=0001h, старшая часть
mov dx, word ptr long ; делимого
; ax=0000h , младшая часть
mov bx,2 ; делимого
push ds
pop es
divide: ; заполнение начального значения суммы
div bx ;s=s/n
mov [si],ax ;s---->()()()()
inc si
inc si
mov ax,[si]
loop divide
;==============================================================
;---------------
;--------------
mov si,offset s
mov di,offset a
push di
cld
mov cx,21
rep movsw
pop si
mov cx,1
tell:
push cx
mov edx,0 ;!!!!!!!!!!!!!!!!!!!!!! добавить ноль в начале!!!!!!!!!!!!!
mov cx,42
double:
push cx
mov ax, [si] ; s1:=s1\n
div bx
mov [si],ax
inc si
inc si
pop cx
loop double
stc
dec si
dec si
mov di,offset a
;mov si,offset s
add di,cx
add di,cx
;dec di
;dec di
mov cx,42
@label:
push cx
pushf
mov ax,[si]
adc [di],ax
popf
inc si
inc si
inc di
inc di
pop cx
loop @label
pop cx
loop tell
end begin