Сопроцессор, возведение в степень - Assembler
Формулировка задачи:
Листинг программы
- mov ax, @data
- mov ds, ax
- lea dx, m1
- mov ah, 09 ; на ввод n
- int 21h
- mov ah, 10
- lea dx, bf
- int 21h
- xor cx, cx ; очищаем результат
- lea bx, bf+2 ; BX <- адрес начала строки
- in_lp:
- xor ah, ah ; AH <- 0;
- mov al, [bx] ; AL <- код символа
- sub al, '0' ; переводим код символа в цифру
- jc ex_in ; если код не цирфра - конец перевода
- cmp al, 10
- jnc ex_in
- xchg cx, ax
- mov dx, 10 ; умножаем на 10 текущее
- mul dx ; значение
- add cx, ax ; и прибавляем цифру
- inc bx ; переход к след. символу
- jmp in_lp ; повторям перевод
- ex_in:
- cmp cx, 2 ; если n < 2 вычислять нечего
- jl Exit ; переход к выходу
- go:
- dec cx ; уменьшаем счетчик на 1, т.к. счет начинается с 2
- finit ; инициализация сопроцессора
- fld1 ;
- fstp f ; f = 1 - начальное значение произведения
- mov x, 2 ; x = 2 - первый множитель
- mn_lp:
- call powx ; вызов подпрограммы вычисления степени
- randk t, e ; округляем с заданной точностью
- cmp word ptr t+6, 0 ; проверяем на 0
- je exit ; если равно 0 - выход
- test x, 1 ; проверка на четность
- jnz no_xs ; если не четное смена знака не нужна
- or byte ptr t+7, 80h ; иначе меняем знак числа
- no_xs:
- fld1
- fadd t ; 1+t
- fmul f ; f*(1+t)
- fstp f ; f = f*(1+t)
- randk f, e ; округляем с заданной точностью
- inc x ; x = x + 1
- loop mn_lp ; цикл вычисления пока CX>0
- exit:
- fld f ; перевод
- fild e ; дробной части
- fmul ; в целое представление
- fistp rs
- mov cx, 5 ; перевод 5 цифр
- lea bx, m3+4
- mov dx, word ptr rs+2 ; загрузка числа в
- mov ax, word ptr rs ; DX:AX
- mov di, 10
- out_lp:
- div di ; получаем цифру
- add dl, '0' ; переводим ее в символ
- mov [bx], dl ; сохраняем в буфер
- xor dx, dx ; обнуляем dx
- dec bx ; переход к предыдущ. позиции
- loop out_lp ; и повторяем 5 раз
- lea dx, m2 ; вывод результата
- mov ah, 09
- int 21h
- xor ax, ax
- int 16h
- mov ax, 4c00h
- int 21h
Решение задачи: «Сопроцессор, возведение в степень»
textual
Листинг программы
- or byte ptr t+7, 80h ; иначе меняем знак числа
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д