Доброе время суток!
Для цельночисельной арифметики нужно преобразовать формулу к одному делению:
Определяем общие фрагменты:
Считается в уме
17 и
8, но это нужно в коде.
Формула превращается в:
Нужно определится с используемыми регистрами, для хранения промежуточных данных(это больше к оптимизации кода, т.к. длина кода существенно уменьшается), а также последовальности операций(к примеру *2 = равносильно сдвигу влево на один бит) и учитывая, что
mul и
div меняют регистры
AX : DX, т.е. их использовать для хранения временных данных нельзя:
Сразу говорю, сейчас регистры использованы - навскидку.
Сам код:
[code lang=asm]model tiny
.code
org 100h
.186
begin: mov di,47
xor dx,dx
mov ax,5
shl ax,1
mov bx,3
mul bx
sub di,ax;А=47-5*2*3
mov ax,5
sub ax,3
shl ax,2
mov si,ax;В=4*(5-3)
mov ax,24
mul di
mov cx,ax;24*А
mov ax,14
mov bx,3
mul bx
mov bx,5
mul bx
mul si;14*3*5*a
sub ax,cx;14*3*5*В-24*А
mov cx,ax
mov ax,si
mul di;А*В
xor dx,dx;
mov di,ax
mov ax,cx
div di
push dx
mov bx,10
xor cx,cx
@@01: xor dx,dx
div bx
push dx
inc cx
or ax,ax
jnz @@01
@@02: pop ax
or al,'0'
int 29h
loop @@02
pop ax
@@03: or ax,ax
jz @@05
push ax
mov al,'.'
int 29h
mov cx,20
@@04: pop ax
xor dx,dx
mul bx
div di
push dx
or al,'0'
int 29h
loop @@04
pop ax
@@05: ret
end begin[/code]
и его работа + контроль на ЯВУ
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.