_RUNDUDE.ASM - Assembler

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

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

Всем привет! Нужна помощь с программой! Она запускается и сразу же вылетает. Естественно, я как ламер где-то наделал ошибок, НО ГДЕ?! Вот код программы:

P.S.:

И да, это тестовая версия программы, "чувак" пока может бегать только вверх и вниз
Листинг программы
  1. TITLE RUNDUDE_by_DedSec
  2. ;------------------------------------------------------
  3. .model small
  4. .stack 100h
  5. .386
  6. V_MOD = 0Dh
  7. ;------------------------------------------------------
  8. .data
  9. saveMode db ?
  10. currX dw 100
  11. currY dw 100
  12. color db 1
  13. ;------------------------------------------------------
  14. .code
  15. mov ax, @data
  16. mov ds, ax
  17. MAIN proc near
  18. mov ah, 0
  19. mov al, V_MOD
  20. int 10h
  21. call VID_REST
  22. mov ah, 0Ch
  23. mov al, color
  24. mov bh, 0
  25. mov cx, currX
  26. mov dx, currY
  27. int 10h
  28. call KEY_LIST
  29. MAIN endp
  30. VID_REST proc near
  31. mov saveMode, al
  32. ret
  33. VID_REST endp
  34. KEY_LIST proc near
  35. mov ah, 10h
  36. int 16h
  37. cmp ah, 50h
  38. je K10
  39. cmp ah, 48h
  40. je K20
  41. cmp al, 1Bh
  42. je EXT
  43. K10:
  44. dec currY
  45. call MAIN
  46. K20:
  47. inc currY
  48. call MAIN
  49. EXT:
  50. mov ax, 4c00h
  51. int 21h
  52. KEY_LIST endp
  53. end MAIN

Решение задачи: «_RUNDUDE.ASM»

textual
Листинг программы
  1. DECLARE FUNCTION ARCSIN! (x!)
  2.  
  3. CLS
  4. CONST pi = 3.141593
  5. CONST k = pi / 180
  6.  
  7. INPUT "A = "; a
  8. INPUT "N = "; n
  9.  
  10. sinG = SIN(k * a) / n
  11. g = ARCSIN(sinG)
  12.  
  13. SCREEN 11
  14. WINDOW (-40, 30)-(40, -30)
  15.  
  16. yA = 30
  17. xA = -30 * TAN(k * a)
  18. yB = -30
  19. xB = 30 * TAN(g)
  20. FUNCTION ARCSIN (x)
  21.    IF ABS(x) = 1 THEN
  22.       ARCSIN = SGN(x) * pi / 2
  23.    ELSE
  24.       ARCSIN = ATN(x / SQR(1 - x ^ 2))
  25.    END IF
  26. END FUNCTION
  27. LINE (-40, 0)-(40, 0)
  28. LINE (0, 0)-(xA, yA)
  29. LINE (0, 0)-(xB, yB)
  30. END

Объяснение кода листинга программы

  1. Объявляется функция ARCSIN!, которая принимает аргумент x и возвращает значение типа вещественного числа.
  2. Очищается экран командой CLS.
  3. Устанавливаются значения констант pi и k через оператор CONST. Значение pi равно 3.141593, а k равно pi / 180.
  4. С помощью команды INPUT запрашивается у пользователя значения переменных A и N. Значения сохраняются в переменных a и n соответственно.
  5. Вычисляется значение sinG путем нахождения синуса угла a в радианах, умноженного на k, и деления результата на n.
  6. Вычисляется значение g путем нахождения обратного синуса sinG с помощью функции ARCSIN.
  7. На экране выводится графика с помощью команды SCREEN 11, которая устанавливает графический режим, и команды WINDOW, которая определяет размеры окна для рисования.
  8. Задаются значения переменных yA, xA, yB и xB. Значение yA равно 30, xA равно -30 умноженное на тангенс угла a в радианах, yB равно -30, а xB равно 30 умноженное на тангенс угла g.
  9. Определяется функция ARCSIN, которая принимает аргумент x и возвращает значение. Если абсолютное значение x равно 1, ARCSIN присваивает значение pi / 2 с противоположным знаком от x. В противном случае ARCSIN вычисляет арктангенс отношения x к квадратному корню из разности 1 и x в квадрате.
  10. С помощью команды LINE рисуются линии на графике. Линиями соединяются точки (-40, 0) и (40, 0), (0, 0) и (xA, yA), а также (0, 0) и (xB, yB).
  11. Код завершается.

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


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

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

10   голосов , оценка 4 из 5

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

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

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