Загрузка данных


dosseg
.model small
.stack 200h

.data
    msgX        db 'Enter X: $'
    msgY        db 'Enter Y: $'
    msgRes      db 0ah, 'Result: $'
    msgInside   db 'inside the shaded square$'
    msgOutside  db 'outside the shaded square$'
    cr equ 0dh
    lf equ 0ah
    string      db 255, 0, 255 dup(?)
    errmsg      db 'Invalid char, digits only', cr, lf, '$'
    negflag     dw ?

.code

;----------- IntegerIn -----------
IntegerIn proc
start:
    mov ah, 0ah
    lea dx, string
    int 21h
    xor ax, ax
    lea si, string+2
    mov negflag, ax
    cmp byte ptr [si], '-'
    jne m2
    not negflag
    inc si
    jmp m3
m2:
    cmp byte ptr [si], '+'
    jne m3
    inc si
m3:
    cmp byte ptr [si], cr
    je ex1
    cmp byte ptr [si], '0'
    jb err1
    cmp byte ptr [si], '9'
    ja err1
    mov bx, 10
    mul bx
    sub byte ptr [si], '0'
    add al, [si]
    adc ah, 0
    inc si
    jmp m3
err1:
    lea dx, errmsg
    mov ah, 9
    int 21h
    jmp start
ex1:
    cmp negflag, 0
    je ex
    neg ax
ex:
    ret
IntegerIn endp

;----------- IntegerOut -----------
IntegerOut proc
    xor cx, cx
    mov bx, 10
    cmp ax, 0
    jge m
    neg ax
    push ax
    mov ah, 2
    mov dl, '-'
    int 21h
    pop ax
m:
    inc cx
    xor dx, dx
    div bx
    push dx
    or ax, ax
    jnz m
m1:
    pop dx
    add dl, '0'
    mov ah, 2
    int 21h
    loop m1
    ret
IntegerOut endp

;----------- IsPointInSquare -----------
IsPointInSquare proc near
    push bp
    mov bp, sp
    mov ax, [bp+4]
    cmp ax, -10
    jl outside
    cmp ax, 10
    jg outside
    mov ax, [bp+6]
    cmp ax, -10
    jl outside
    cmp ax, 10
    jg outside
    mov ax, 1
    jmp finish
outside:
    xor ax, ax
finish:
    pop bp
    ret 4
IsPointInSquare endp

;----------- print_result -----------
print_result proc
    cmp ax, 1
    jne out_msg
    lea dx, msgInside
    jmp print
out_msg:
    lea dx, msgOutside
print:
    mov ah, 9
    int 21h
    ret
print_result endp

;----------- Main -----------
Begin:
    mov ax, @data
    mov ds, ax

    ; Input X
    mov ah, 9
    lea dx, msgX
    int 21h
    call IntegerIn
    push ax

    ; Input Y
    mov ah, 9
    lea dx, msgY
    int 21h
    call IntegerIn
    push ax

    ; Check point
    call IsPointInSquare
    push ax

    ; Output result
    mov ah, 9
    lea dx, msgRes
    int 21h
    pop ax
    call print_result

    mov ax, 4C00h
    int 21h
end Begin