помогите срочно задание такое нарисовать яхту по координатам вот мой код но там ошибки помогите исправить сдавать уже завтра работу
Код:
.MODEL SMALL
.STACK 100h
.DATA
; Инициализация цветовых констант
BLACK equ 0
WHITE equ 15
BLUE equ 9
.CODE
MOV AX, @DATA
MOV DS, AX
; Рисуем корпус яхты
MOV AX, 0A000h
MOV ES, AX
MOV AX, 20
MOV BX, 40
MOV CX, 60
MOV DX, 20
MOV BL, BLUE
CALL draw_rect
; Рисуем мачту
MOV AX, 0A000h
MOV ES, AX
MOV AX, 40
MOV BX, 20
MOV CX, 10
MOV DX, 40
MOV BL, WHITE
CALL draw_rect
; Рисуем парус
MOV AX, 0A000h
MOV ES, AX
MOV AX, 50
MOV BX, 20
MOV CX, 30
MOV DX, 20
MOV BL, BLUE
CALL draw_triangle
; Задержка
MOV CX, 0FFFFh
MOV DX, 0FFFFh
MOV AH, 86h
INT 15h
; Выход из программы
MOV AH, 4Ch
INT 21h
; Процедура для рисования прямоугольника
draw_rect PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV BX, AX ; Сохраняем цвет
MOV AX, DI ; Вычисляем начальный адрес
MOV DI, AX
XOR AX, AX ; Очищаем AX для подсчета пикселей
; Рисуем прямоугольник
draw_row:
PUSH CX ; Сохраняем CX в стеке
MOV CX, DX ; Загружаем DX в CX
draw_pixel:
MOV [ES:DI], BL ; Рисуем пиксель
INC DI ; Переходим к следующему пикселю
INC AX ; Увеличиваем счетчик пикселей
LOOP draw_pixel ; Повторяем для всех пикселей строки
POP CX ; Восстанавливаем CX из стека
ADD DI, 320 - AX ; Переходим на следующую строку
XOR AX, AX ; Обнуляем счетчик пикселей
DEC DX ; Уменьшаем количество строк
JNZ draw_row ; Повторяем для всех строк
POP DI
POP DX
POP CX
POP BX
POP AX
RET
draw_rect ENDP
; Процедура для рисования треугольника
draw_triangle PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV BX, AX ; Сохраняем цвет
MOV AX, 0 ; Сохраняем начальное
; положение X и Y
MOV CX, AX ; Сохраняем X
MOV DX, BX ; Сохраняем Y
; Рисуем треугольник
draw_row:
CMP DX, BX ; Проверяем, достигли ли мы конечной позиции по Y
JZ end_draw_triangle ; Если да, то заканчиваем рисование
MOV AX, CX ; Загружаем X в AX
MOV DI, DX ; Загружаем Y в DI
MOV [ES:DI * 320 + AX], BL ; Рисуем пиксель
INC CX ; Увеличиваем X
CMP CX, AX ; Проверяем, достигли ли мы конечной позиции по X
JZ end_draw_triangle ; Если да, то заканчиваем рисование
CMP CX, AX ; Проверяем, находимся ли мы на правой стороне треугольника
JA draw_right_side ; Если да, то переходим к рисованию правой стороны
INC DX ; Увеличиваем Y
JMP draw_row ; Переходим к следующей строке
draw_right_side:
DEC DX ; Уменьшаем Y
JMP draw_row ; Переходим к следующей строке
end_draw_triangle:
POP DI
POP DX
POP CX
POP BX
POP AX
RET
draw_triangle ENDP
; Начало программы
START:
MOV AX, @DATA
MOV DS, AX
; Рисуем яхту
MOV AX, BLUE
CALL draw_yacht
; Задержка
MOV CX, 0FFFFh
MOV DX, 0FFFFh
MOV AH, 86h
INT 15h
; Выход из программы
MOV AH, 4Ch
INT 21h
END START