Алгоритм Юрова. Assembler.

Тема в разделе "Программирование / Скриптинг", создана пользователем NagarD, 8 дек 2011.

  1. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    Кто шарит Асм подскажите где ошибка.
    Я знаю точно что она где то в самом начале, ибо прога с ошибкой в каждой строке и не компилируется)) Это алгоритм Юрова: поднесение числа в произвольную степень тупо переписан точ-в-точ с книги... в чём проблема я не шарю

    Код:
    .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
    
     
    Последнее редактирование: 8 дек 2011
  2. Andrey

    Andrey Администратор

    Сообщения:
    3.234
    Симпатии:
    3.509
    Перепечатывая примеры из книг программировать не научишься.
     
  3. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    Оффтоп
     
  4. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    Да мне это раз в жизни надо, для курсовой, а тут такая засада - Юров прогу некорректно написал, или у меня большие проблемы со зрением!

    слабо сказано, тут без мата никак!)