Сопроцессор, возведение в степень - Assembler

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. mov ax, @data
  2. mov ds, ax
  3. lea dx, m1
  4. mov ah, 09 ; на ввод n
  5. int 21h
  6. mov ah, 10
  7. lea dx, bf
  8. int 21h
  9. xor cx, cx ; очищаем результат
  10. lea bx, bf+2 ; BX <- адрес начала строки
  11. in_lp:
  12. xor ah, ah ; AH <- 0;
  13. mov al, [bx] ; AL <- код символа
  14. sub al, '0' ; переводим код символа в цифру
  15. jc ex_in ; если код не цирфра - конец перевода
  16. cmp al, 10
  17. jnc ex_in
  18. xchg cx, ax
  19. mov dx, 10 ; умножаем на 10 текущее
  20. mul dx ; значение
  21. add cx, ax ; и прибавляем цифру
  22. inc bx ; переход к след. символу
  23. jmp in_lp ; повторям перевод
  24. ex_in:
  25. cmp cx, 2 ; если n < 2 вычислять нечего
  26. jl Exit ; переход к выходу
  27. go:
  28. dec cx ; уменьшаем счетчик на 1, т.к. счет начинается с 2
  29. finit ; инициализация сопроцессора
  30. fld1 ;
  31. fstp f ; f = 1 - начальное значение произведения
  32. mov x, 2 ; x = 2 - первый множитель
  33. mn_lp:
  34. call powx ; вызов подпрограммы вычисления степени
  35. randk t, e ; округляем с заданной точностью
  36. cmp word ptr t+6, 0 ; проверяем на 0
  37. je exit ; если равно 0 - выход
  38. test x, 1 ; проверка на четность
  39. jnz no_xs ; если не четное смена знака не нужна
  40. or byte ptr t+7, 80h ; иначе меняем знак числа
  41. no_xs:
  42. fld1
  43. fadd t ; 1+t
  44. fmul f ; f*(1+t)
  45. fstp f ; f = f*(1+t)
  46. randk f, e ; округляем с заданной точностью
  47. inc x ; x = x + 1
  48. loop mn_lp ; цикл вычисления пока CX>0
  49. exit:
  50. fld f ; перевод
  51. fild e ; дробной части
  52. fmul ; в целое представление
  53. fistp rs
  54. mov cx, 5 ; перевод 5 цифр
  55. lea bx, m3+4
  56. mov dx, word ptr rs+2 ; загрузка числа в
  57. mov ax, word ptr rs ; DX:AX
  58. mov di, 10
  59. out_lp:
  60. div di ; получаем цифру
  61. add dl, '0' ; переводим ее в символ
  62. mov [bx], dl ; сохраняем в буфер
  63. xor dx, dx ; обнуляем dx
  64. dec bx ; переход к предыдущ. позиции
  65. loop out_lp ; и повторяем 5 раз
  66. lea dx, m2 ; вывод результата
  67. mov ah, 09
  68. int 21h
  69. xor ax, ax
  70. int 16h
  71. mov ax, 4c00h
  72. int 21h
Где в этом куске кода чередование знаков + и - Подскажите пожалуйста.

Решение задачи: «Сопроцессор, возведение в степень»

textual
Листинг программы
  1. or byte ptr t+7, 80h    ; иначе меняем знак числа

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут