NagarD
Участник
- Сообщения
- 411
- Реакции
- 184
Кто шарит Асм подскажите где ошибка.
Я знаю точно что она где то в самом начале, ибо прога с ошибкой в каждой строке и не компилируется)) Это алгоритм Юрова: поднесение числа в произвольную степень тупо переписан точ-в-точ с книги... в чём проблема я не шарю
Я знаю точно что она где то в самом начале, ибо прога с ошибкой в каждой строке и не компилируется)) Это алгоритм Юрова: поднесение числа в произвольную степень тупо переписан точ-в-точ с книги... в чём проблема я не шарю
C-подобный:
.586p
masm
model user16 small
.stack 100h
.data ;сегмент данных
flag db 0
p1 dd 0
y dt 2.0 ;основание степини
x dt -2.0 ;показатель степени
.code
main proc ;начало процедуры main
mov ax, @data
mov ds, ax
finit
fld y
fld x
ftst
fstsw ax
sahf
jnc m1 ;перход если х >=0
jnx flag ;взведем флаг, если х <0
fabs ; |x|
m1: fxch
fy12x
fst st(1)
fabs ;|z|
;сравним !z! с единицей
fld1
fcom
fstsw ax
sahf
jp exit ;операнды не сравнимы
jnc m2 ;если !Z!<1 то переходим на м2
jz m3 ;если !з!=1 то переходим на м3
;если "з">1 то приводим к формуле z=z1+z2 ,z1 - целое, z2 - дробное
or ecx,ecx ;счетчик вычитаний
m12:inc cx
fsub st(1), st(0)
fcom
fstsw ax
sahf
jp exit ;операнды не сравнимы
jz m12
jnc m2 ;если !z! <1, то переходим на m2
jmp m12 ;если !z! >1, то переходим на m12
m3:mov p1, ecx
jmp $+7
m2:mov p1, ecx
fxch
f2xm1
fadd ;компенсируем 1
fild p1 ;показатель степенидля fscale
fld1
fscale
fxch
fincstp
fmul
;проверка на отрицательную степень
cmp flag, 1
jnz exit
fld1
fxch
fdiv
exit:
mov ax, 4c00h
int 21h
main endp
end main
Последнее редактирование: