_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).
- Код завершается.