Определить, попадает ли точка М(с коорд. Х и У) в квадрат, заданный своей верхней левой вершиной и стороной - Assembler
Формулировка задачи:
Здравствуйте. Для ТАСМ необходимо написать код следующей задачи-
Определить, попадает ли точка М(с координатами Х и Y) в квадрат, заданный своей верхней левой вершиной и стороной. Стороны квадрата параллельны координатным осям.
До этого делал решение простенького квадратного уравненения, но тут просто лес((( Помогите пожалуйста((
сделал так, но что то неработает:
%nolist Include mac.lib %list Data segment para coordx dw 5 coordy dw 5 lenght dw 5 X dw ? Y dw ? Mess1 db 10,13, 'Popadaet v Kvadrat$' Mess2 db 10,13,'Ne Popadaet v Kvadrat$' Messx db 10,13, 'X= $' MessY db 10,13, 'Y= $' Data ends Stk segment para Db 256 dup (?) Stk ends Code segment para Assume ds:data, ss:stk, cs:code Begin: mov ax, data Mov ds,ax ;Ввод данных Message messx Key_$2bin; Ввод числа X с клавиатуры в регистр AX Mov x,ax Message messy Key_$2bin; Ввод числа Y с клавиатуры в регистр AX Mov y,ax ; Ввод завершен ;if ((X-X1)<=L) and ((X-X1)>0) and ((Y-Y1)<=L) and ((Y-Y1)>0) then ; writeln('точка попадает в квадрат') mov ax, x cmp ax, coordx jl nepopadaet ;x<coordx mov ax, y cmp ax, coordy ;y>coordy jg nepopadaet mov ax, coordx add ax, lenght cmp ax, x ;x>coordx+lenght jg nepopadaet mov ax, coordy sub ax, lenght cmp ax, y ; y < coordy-lenght jl nepopadaet message mess1 jmp exit nepopadaet: message mess2 exit: inkey mov ah, 4ch int 21h Code ends End begin
Решение задачи: «Определить, попадает ли точка М(с коорд. Х и У) в квадрат, заданный своей верхней левой вершиной и стороной»
textual
Листинг программы
seg000:0100 ; Base Address: 1000h Range: 10100h-101CDh Loaded length: CDh seg000:0100 ; Segment type: Pure code seg000:0100 seg000 segment byte public 'CODE' seg000:0100 assume cs:seg000 seg000:0100 org 100h seg000:0100 assume es:nothing, ss:nothing, ds:seg000 seg000:0100 public start seg000:0100 start proc near seg000:0100 mov bx, 1C1h seg000:0103 push bx seg000:0104 call sub_10147 seg000:0107 add sp, 2 seg000:010A mov word_10190, ax seg000:010D mov bx, 1C7h seg000:0110 push bx seg000:0111 call sub_10147 seg000:0114 add sp, 2 seg000:0117 mov bx, 1A9h seg000:011A mov word_10192, ax seg000:011D sub ax, word_1018C seg000:0121 js loc_1013B seg000:0123 cmp ax, word_1018E seg000:0127 ja loc_1013B seg000:0129 mov ax, word_10190 seg000:012C sub ax, word_1018A seg000:0130 js loc_1013B seg000:0132 cmp ax, word_1018E seg000:0136 ja loc_1013B seg000:0138 mov bx, 194h seg000:013B loc_1013B: seg000:013B push bx seg000:013C call sub_1017E seg000:013F add sp, 2 seg000:0142 xor ax, ax seg000:0144 int 16h seg000:0146 retn seg000:0146 start endp seg000:0147 sub_10147 proc near seg000:0147 arg_0 = word ptr 4 seg000:0147 push bp seg000:0148 mov bp, sp seg000:014A push [bp+arg_0] seg000:014D call sub_1017E seg000:0150 add sp, 2 seg000:0153 xor di, di seg000:0155 mov bx, 0Ah seg000:0158 loc_10158: seg000:0158 xor ax, ax seg000:015A int 16h seg000:015C cmp al, 0Dh seg000:015E jz loc_1017A seg000:0160 cmp al, 30h seg000:0162 jb loc_10158 seg000:0164 cmp al, 39h seg000:0166 ja loc_10158 seg000:0168 xor dx, dx seg000:016A push ax seg000:016B and ax, 0Fh seg000:016E xchg ax, di seg000:016F xor dx, dx seg000:0171 mul bx seg000:0173 add di, ax seg000:0175 pop ax seg000:0176 int 29h seg000:0178 jmp short loc_10158 seg000:017A loc_1017A: seg000:017A mov ax, di seg000:017C pop bp seg000:017D retn seg000:017D sub_10147 endp seg000:017E sub_1017E proc near seg000:017E arg_0 = word ptr 4 seg000:017E push bp seg000:017F mov bp, sp seg000:0181 mov ah, 9 seg000:0183 mov dx, [bp+arg_0] seg000:0186 int 21h seg000:0188 pop bp seg000:0189 retn seg000:0189 sub_1017E endp seg000:018A word_1018A dw 5 seg000:018C word_1018C dw 5 seg000:018E word_1018E dw 5 seg000:0190 word_10190 dw 0 seg000:0192 word_10192 dw 0 seg000:0194 aPopadaetVKvadr db 0Ah seg000:0194 db 0Dh,'Popadaet v Kvadrat$' seg000:01A9 aNePopadaetVKva db 0Ah seg000:01A9 db 0Dh,'Ne Popadaet v Kvadrat$' seg000:01C1 db 0Ah seg000:01C1 db 0Dh,'X= $' seg000:01C7 aY db 0Ah seg000:01C7 db 0Dh,'Y= $' seg000:01C7 seg000 ends seg000:01C7 end start