_RUNDUDE.ASM - Assembler
Формулировка задачи:
Всем привет! Нужна помощь с программой! Она запускается и сразу же вылетает. Естественно, я как ламер где-то наделал ошибок, НО ГДЕ?! Вот код программы:
P.S.:
И да, это тестовая версия программы, "чувак" пока может бегать только вверх и вниз
Листинг программы
- TITLE RUNDUDE_by_DedSec
- ;------------------------------------------------------
- .model small
- .stack 100h
- .386
- V_MOD = 0Dh
- ;------------------------------------------------------
- .data
- saveMode db ?
- currX dw 100
- currY dw 100
- color db 1
- ;------------------------------------------------------
- .code
- mov ax, @data
- mov ds, ax
- MAIN proc near
- mov ah, 0
- mov al, V_MOD
- int 10h
- call VID_REST
- mov ah, 0Ch
- mov al, color
- mov bh, 0
- mov cx, currX
- mov dx, currY
- int 10h
- call KEY_LIST
- MAIN endp
- VID_REST proc near
- mov saveMode, al
- ret
- VID_REST endp
- KEY_LIST proc near
- mov ah, 10h
- int 16h
- cmp ah, 50h
- je K10
- cmp ah, 48h
- je K20
- cmp al, 1Bh
- je EXT
- K10:
- dec currY
- call MAIN
- K20:
- inc currY
- call MAIN
- EXT:
- mov ax, 4c00h
- int 21h
- KEY_LIST endp
- end MAIN
Решение задачи: «_RUNDUDE.ASM»
textual
Листинг программы
- DECLARE FUNCTION ARCSIN! (x!)
- CLS
- CONST pi = 3.141593
- CONST k = pi / 180
- INPUT "A = "; a
- INPUT "N = "; n
- sinG = SIN(k * a) / n
- g = ARCSIN(sinG)
- SCREEN 11
- WINDOW (-40, 30)-(40, -30)
- yA = 30
- xA = -30 * TAN(k * a)
- yB = -30
- xB = 30 * TAN(g)
- FUNCTION ARCSIN (x)
- IF ABS(x) = 1 THEN
- ARCSIN = SGN(x) * pi / 2
- ELSE
- ARCSIN = ATN(x / SQR(1 - x ^ 2))
- END IF
- END FUNCTION
- LINE (-40, 0)-(40, 0)
- LINE (0, 0)-(xA, yA)
- LINE (0, 0)-(xB, yB)
- END
Объяснение кода листинга программы
- Объявляется функция ARCSIN!, которая принимает аргумент x и возвращает значение типа вещественного числа.
- Очищается экран командой CLS.
- Устанавливаются значения констант pi и k через оператор CONST. Значение pi равно 3.141593, а k равно pi / 180.
- С помощью команды INPUT запрашивается у пользователя значения переменных
A
иN
. Значения сохраняются в переменных a и n соответственно. - Вычисляется значение sinG путем нахождения синуса угла a в радианах, умноженного на k, и деления результата на n.
- Вычисляется значение g путем нахождения обратного синуса sinG с помощью функции ARCSIN.
- На экране выводится графика с помощью команды SCREEN 11, которая устанавливает графический режим, и команды WINDOW, которая определяет размеры окна для рисования.
- Задаются значения переменных yA, xA, yB и xB. Значение yA равно 30, xA равно -30 умноженное на тангенс угла a в радианах, yB равно -30, а xB равно 30 умноженное на тангенс угла g.
- Определяется функция ARCSIN, которая принимает аргумент x и возвращает значение. Если абсолютное значение x равно 1, ARCSIN присваивает значение pi / 2 с противоположным знаком от x. В противном случае ARCSIN вычисляет арктангенс отношения x к квадратному корню из разности 1 и x в квадрате.
- С помощью команды LINE рисуются линии на графике. Линиями соединяются точки (-40, 0) и (40, 0), (0, 0) и (xA, yA), а также (0, 0) и (xB, yB).
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д