Попадание точки в область ограниченную квадратом и вписанной в него окружностью в Tasm - Assembler

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

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

Доброго времени суток Необходимо написать программу определяющую попадает ли точка в область ограниченную квадратом и вписанной в него окружностью в Tasm. Изучать ассемблер начал недавно, всем кто откликнется буду признателен)

Решение задачи: «Попадание точки в область ограниченную квадратом и вписанной в него окружностью в Tasm»

textual
Листинг программы
org 100h
mov ax, 3 ;координата х
mov bx, 3 ;координата у
 
mov cx, 5 ;половина стороны квадрата  при х и у >0
mov dx, -5; половина стороны квадрата при х и у <0
 
cmp ax, dx ; если равно
je m1
cmp ax, dx ; если меньше
jl m1
cmp ax, dx ; если больше
jg m3
 
cmp bx, dx ; если равно
je m2
cmp bx, dx ; если меньше
jl m2
cmp bx, dx ; если больше
jg m5
 
;=========  блок принадлежности точки к окружности
 
mov ax, 3 ;координата х
mul ax  
mov bx, 3 ;координата у
mul bx  
add bx, ax
mov ax,5  ; радиус окружности
cmp bx,ax
je m1
cmp bx,ax
jl m1
cmp bx,ax
jg m6 
;==========
 
 
m1:
mov ax, 0 
jmp exe
 
m2:
mov bx, 0
jmp exe
 
m3:
cmp ax, cx
je m1
cmp ax, cx
jl m4
cmp ax, cx
jg m1
 
m5:
cmp bx, cx
je m2
cmp bx, cx
jl m4
cmp bx, cx
jg m2
 
m4:
mov ax, 1
mov bx, 1
cmp ax, bx
je m6
cmp ax, bx
jl m1
cmp ax, bx
jg m1
 
m6:
mov ax,1
mov bx,1
cmp ax,bx
je m7
cmp ax,bx
jl m1
cmp ax,bx
jg m1
 
m7:
mov ax, 1
jmp exe
 
 
 exe:
        push    -1      ;Сохраним признак конца числа
        mov     cx,10   ;Делим на 10
l:      mov     dx,0    ;Очистим регистр dx (xor dx,dx - оптимальнее)
        div     cx      ;Делим 
        push    dx      ;Сохраним цифру
        cmp     ax,0    ;Остался 0? (оптимальнее or ax,ax)
        jne     l       ;нет -> продолжим
        mov     ah,2h
l2:     pop     dx      ;Восстановим цифру
        cmp     dx,-1   ;Дошли до конца -> выход {оптимальнее: or dx,dx jl ex}
        je      ex
        add     dl,'0'  ;Преобразуем число в цифру
        int     21h     ;Выведем цифру на экран
        jmp     l2      ;И продолжим
ex:     mov     ax,4c00h;Выход
       ; int     21h
 
mov ah,1 ;задержка
int 21h  ;на экране

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

Код написан на ассемблере для операционной системы DOS. Он проверяет, принадлежит ли точка в двумерном пространстве координат (x, y) квадрату со стороной 5 и вписанной в него окружности радиусом 5. Список действий:

  1. Органы управления переменной ax и bx используются для хранения и обработки координат x и y соответственно.
  2. Переменная cx используется для хранения половины стороны квадрата. Если оба x и y положительны, то половина стороны квадрата равна 5, если оба отрицательны -5, если x положительный или ноль -3, если x отрицательный -7.
  3. Переменная dx используется для хранения другой половины стороны квадрата.
  4. Код проверяет, принадлежит ли точка квадрату, сравнивая ax и dx. Если они равны, то точка принадлежит квадрату, и выполняется переход к метке m2. Если ax меньше dx, то переход к метке m1. Если ax больше dx, то переход к метке m3.
  5. Затем код проверяет, принадлежит ли точка окружности, сравнивая bx и ax. Если они равны, то точка принадлежит окружности, и выполняется переход к метке m6. Если bx меньше ax, то переход к метке m1. Если bx больше ax, то переход к метке m2.
  6. Если точка принадлежит и квадрату, и окружности, то выполняется переход к метке m7.
  7. Код выводит цифру 1, задерживает выполнение на 1 секунду и выводит символ новой строки. Стоит отметить, что этот код не оптимизирован и может быть улучшен. Например, можно использовать более эффективные алгоритмы для проверки принадлежности точки к окружности и квадрату. Также в коде нет обработки ошибок, поэтому он может работать некорректно при некорректных входных данных.

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

15   голосов , оценка 4.2 из 5
Похожие ответы