Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Индивидуалка / Отчет по индивидуальной работе.docx
Скачиваний:
17
Добавлен:
11.02.2015
Размер:
52.48 Кб
Скачать

Алгоритм программы

Сначала пользователь попадает в тестовый режим, где расшифрованы главные кнопки. Далее он нажимает Enter, чтобы начать работу. Попадает в графический режим. Для работы с мышью используется прерывание 33h, где в ax записывается условие вызова, в bx – состояние кнопок, cx – координата курсора x, dx – координата курсора y. В окне уже отрисовались 5 блоков. Появился курсор мыши. Чтобы начать вводить числа, пользователь должен направить курсор мыши на первый блок и нажать на него – появится сообщение «Input the first number». Пользователь вводит число, курсор мыши в этот момент скрыт. Как только число введено, следует нажать на Enter. Курсор мыши появляется, можно выбирать блоки дальше. С блоками операции и второго числа поступаем аналогично. Когда все числа введены, операция задана, нужно нажать на блок «=». В последний блок будет выведен ответ.

Esc – выход из программы, видеорежим изменяется на текстовый, далее используется функция возврат в операционную систему 4C00h.

Текст программы

data_seg segment

x dw ? ;координаты мышки

y dw ?

a dw ? ;первое число

op dw ? ;операция

b dw ? ;второе число

sum dw ? ;сумма

razn dw ? ;разность

pr dw ? ;произведение

del dw ? ;деление

ost dw ? ;остаток

x_n dw ? ;вспомогательные координаты для рисования

y_n dw ?

x_n1 dw ?

y_n1 dw ?

color db ? ;цвет рамки блока

color_f db ? ;цвет фона

stroka db " Enter - start, Esc - exit $"

stroka1 db " Input the first number $"

stroka2 db " Input the second number $"

stroka_op db " Input the operation $"

stroka3 db " $"

blok db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

ravno db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,8,8

db 8,8,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,8,8

db 8,8,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,8

db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

db 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

data_seg ends

stack_seg segment para stack 'stack'

dw 100 dup (?)

stack_seg ends

cod_seg segment

ASSUME cs:cod_seg, ds:data_seg, ss:stack_seg

start:

mov ax,data_seg

mov ds,ax

mov ah,09h

lea dx,stroka

int 21h

mov ah,01h

int 21h

cmp al,0dh

je @@2

cmp al,1bh

je @@1

@@1: call exit

@@2: call work

mov ah,08h

int 21h

color_fon proc ;отрисовка фона

push cx

push dx

mov ah,0bh

mov bh,00

mov bl,color_f

int 10h

pop dx

pop cx

ret

color_fon endp

draw1 proc ;рисуем первый блок

push cx

push dx

lea si,blok

mov cx,0 ;откуда рисовать

mov dx,0

mov x_n1,cx

mov y_n1,dx

mov x_n,cx

mov y_n,dx

mov cx,24h ;строки

d@@1: push cx

mov cx,2Dh ;столбцы

push cx

mov dx,y_n

inc dx

mov y_n,dx

mov cx,x_n1

mov x_n,cx

pop cx

d@@2: push cx

mov cx,x_n

mov dx,y_n

mov ah,0ch

mov bh,00

mov al,[si]

cmp al,03

je d@@3

add al,color

jmp d@@4

d@@3: mov al,color_f

d@@4: int 10h

inc si

inc cx

mov x_n,cx

pop cx

loop d@@2

pop cx

loop d@@1

pop dx

pop cx

ret

draw1 endp

draw_op proc

push cx

push dx

lea si,blok

mov cx,37h ;откуда рисовать

mov dx,0

mov x_n1,cx

mov y_n1,dx

mov x_n,cx

mov y_n,dx

mov cx,24h ;строки

d@@5: push cx

mov cx,2dh ;столбцы

push cx

mov dx,y_n

inc dx

mov y_n,dx

mov cx,x_n1

mov x_n,cx

pop cx

d@@6: push cx

mov cx,x_n

mov dx,y_n

mov ah,0ch

mov bh,00

mov al,[si]

cmp al,03

je d@@7

add al,color

jmp d@@8

d@@7: mov al,color_f

d@@8: int 10h

inc si

inc cx

mov x_n,cx

pop cx

loop d@@6

pop cx

loop d@@5

pop dx

pop cx

ret

draw_op endp

draw2 proc

push cx

push dx

lea si,blok

mov cx,6eh ;откуда рисовать

mov dx,0

mov x_n1,cx

mov y_n1,dx

mov x_n,cx

mov y_n,dx

mov cx,24h ;строки

d@@9: push cx

mov cx,2dh ;столбцы

push cx

mov dx,y_n

inc dx

mov y_n,dx

mov cx,x_n1

mov x_n,cx

pop cx

d@@10: push cx

mov cx,x_n

mov dx,y_n

mov ah,0ch

mov bh,00

mov al,[si]

cmp al,03

je d@@11

add al,color

jmp d@@12

d@@11: mov al,color_f

d@@12: int 10h

inc si

inc cx

mov x_n,cx

pop cx

loop d@@10

pop cx

loop d@@9

pop dx

pop cx

ret

draw2 endp

draw_ravno proc

push cx

push dx

lea si,ravno

mov cx,0a5h ;откуда рисовать

mov dx,0

mov x_n1,cx

mov y_n1,dx

mov x_n,cx

mov y_n,dx

mov cx,24h ;строки

d@@13: push cx

mov cx,28h ;столбцы

push cx

mov dx,y_n

inc dx

mov y_n,dx

mov cx,x_n1

mov x_n,cx

pop cx

d@@14: push cx

mov cx,x_n

mov dx,y_n

mov ah,0ch

mov bh,00

mov al,[si]

cmp al,03

je d@@15

add al,color

jmp d@@16

d@@15: mov al,color_f

d@@16: int 10h

inc si

inc cx

mov x_n,cx

pop cx

loop d@@14

pop cx

loop d@@13

pop dx

pop cx

ret

draw_ravno endp

draw_rez proc

push cx

push dx

lea si,blok

mov cx,0dch ;откуда рисовать

mov dx,0

mov x_n1,cx

mov y_n1,dx

mov x_n,cx

mov y_n,dx

mov cx,24h ;строки

d@@17: push cx

mov cx,2dh ;столбцы

push cx

mov dx,y_n

inc dx

mov y_n,dx

mov cx,x_n1

mov x_n,cx

pop cx

d@@18: push cx

mov cx,x_n

mov dx,y_n

mov ah,0ch

mov bh,00

mov al,[si]

cmp al,03

je d@@19

add al,color

jmp d@@20

d@@19: mov al,color_f

d@@20: int 10h

inc si

inc cx

mov x_n,cx

pop cx

loop d@@18

pop cx

loop d@@17

pop dx

pop cx

ret

draw_rez endp

mouse_visible proc ;функция, которая показывает курсор мышки в указанных координатах

mov ax,00h

int 33h

mov ax,01h

mov cx,100

mov dx,100

int 33h

ret

mouse_visible endp

coord proc

xor bx,bx

mov ax,03h ;считываем состояние мышки, координаты

int 33h

cmp dx,24h

jb @1

jmp @0

@1: cmp cx,2dh

jb @w1; если это первый блок, то выполняем ввод числа в первый блок

cmp cx,37h

ja @2

@2: cmp cx,64h

jb @w2; если это второй блок, то выполняем ввод операции

cmp cx,6eh

ja @3

@3: cmp cx,9bh

jb @w3; если это третий блок, то выполняем ввод второго числа

cmp cx,0a5h

ja @4

@4: cmp cx,0d2h

jb @w4; если это четвертый блок, то выполняем операции

@w1: call curs ;выполняется работа для первого блока – ввод первого числа

mov ah,09h

lea dx,stroka1

int 21h

mov ax,02h

int 33h

mov ah,02h

mov bh,00

mov dh,01

mov dl,01

int 10h

call input ;считываем число и заносим его в ах

mov a, ax

mov ax,01h

int 33h

jmp @0

@w2: call curs ;выполняется работа для второго блока – вводим операцию

mov ah,09h

lea dx,stroka_op

int 21h

mov ax,02h

int 33h

mov ah,02h

mov bh,00

mov dh,01

mov dl,09

int 10h

call input_op ;считываем и заносим в переменную ор соответствующее число

mov ax,01h

int 33h

jmp @0

@w3: call curs ;выполняется ввод второго числа

mov ah,09h

lea dx,stroka2

int 21h

mov ax,02h

int 33h

mov ah,02h

mov bh,00

mov dh,01

mov dl,015

int 10h

call input ;считываем и заносим число в ах

mov b,ax

mov ax,01h

int 33h

jmp @0

@w4: mov cx,op ; проверяем какая операция была введена

call curs

mov ah,09h

lea dx,stroka3

int 21h

cmp cx,1 ; 1 - сумма

je @@op1

cmp cx,2 ; 2 - разность

je @@op2

cmp cx,3 ; 3 - произведение

je @@op3

cmp cx,4 ; 4 - деление

je @@op4

@@op1: mov sum,0 ; считаем сумму

mov ax,a

add sum,ax

mov ax,b

add sum,ax

mov ah,02h

mov bh,00

mov dh,01

mov dl,030

int 10h

mov dx,sum

call write_10

jmp @0

@@op2: mov razn,0 ;считаем разность

mov ax,a

add razn,ax

mov ax,b

sub razn,ax

mov ah,02h

mov bh,00

mov dh,01

mov dl,030

int 10h

mov dx,razn

call write_10

jmp @0

@@op3: mov ax,a ; считаем произведение

mov bx,b

mul bx

mov pr, ax

mov pr+2, dx

mov ah,02h

mov bh,00

mov dh,01

mov dl,030

int 10h

mov dx, pr

call write_10

jmp @0

@@op4: mov ax,a ; считаем деление

xor dx,dx

div b

mov ost, dx

mov del, ax

mov ah,02h

mov bh,00

mov dh,01

mov dl,030

int 10h

mov dx, del

call write_10

mov ah,02h

;вывод символа на экран

mov dl, '.'

int 21h

mov ax, ost ; вычисляем остаток

mov cx, 10

xor dx,dx

mul cx

xor dx,dx

div b

mov ost, dx

mov dx, ax

call write_10

jmp @0

@0: ret

coord endp

work proc

mov ah,00 ; установка графического режима

mov al,12h

int 10h

mov color,04 ; задаем цвета

mov color_f,00

call color_fon ; рисуем все объекты

call draw1

call draw_op

call draw2

call draw_ravno

call draw_rez

call mouse_visible ; показываем курсор мышки

@@@1: mov ah,06h ; функция для консольного ввода

mov dl,0ffh

int 21h

cmp al,1bh ;если нажата Esc – выход

je @@@2

mov ax,03h

int 33h

cmp bx,00000001b ; если нажата левая клавиша мышки, то выполняется функция coord

jne @@@1

call coord

jmp @@@1

@@@2: call exit

@@@3: ret

work endp

input proc

push cx

push dx

push bx

push si

; в BX - число, CX - цифры.

xor bx, bx

xor cx, cx

xor si,si

; Введём первый символ.

@ii0:

mov ah, 08h ;ввод без отображения на экран

int 21h

@ii1:

cmp si, 3 ;если введено три числа, то конец ввода

je @ii3

cmp al, 0dh

je @ii3

cmp al, '0'

jb @ii0

cmp al, '9'

ja @ii0

;да это символ из ['0'..'9']

mov ah,02h ;вывод символа на экран

mov dl, al

int 21h

inc si

; Переводим символ в число.

sub al, '0'

; В AL цифра, которую нужно приписать справа к уже имеющемуся в BX числу

; Поместим цифру из AL в CX. Именно для этого он обнулялся.

mov cl, al

; Умножим текущий результат на 10.

shl bx, 1 ; BX = 2 * bx

mov ax, bx ; AX = 2 * bx

shl ax, 2 ; AX = 8 * bx

add bx, ax ; BX = 10 * bx

add bx, cx ; BX = 10 * bx + al

; И так, пока вводят цифры.

jmp @ii0

; Когда введено три цифры

; запишем результат в AX

@ii3: mov ax, bx

pop si

pop bx

pop dx

pop cx

ret

input endp

input_op proc

mov ah,01h

int 21h

cmp al,2ah ;если *

je @op1

cmp al,2bh ; если +

je @op2

cmp al,2dh ;если -

je @op3

cmp al,2fh ;если /

je @op4

jmp @op

@op1: mov op,3

jmp @op

@op2: mov op,1

jmp @op

@op3: mov op,2

jmp @op

@op4: mov op,4

jmp @op

@op: ret

input_op endp

curs proc ;функция для позиционирования курсора в месте вывода подсказок

mov ah,02h

mov bh,00

mov dh,03

mov dl,00

int 10h

ret

curs endp

curs_r proc ; функция позиционирования в месте вывода ответа

mov ah,02h

mov bh,00

mov dh,05

mov dl,00

ret

curs_r endp

write_10 proc ; вывод в 10-тичной форме

push ax

push cx

push dx

push si

mov ax,dx

mov si,10

mov cx,0

non_zero:

mov dx,0

div si

push dx

inc cx

cmp ax,0

jne non_zero

metka1:

pop dx

call wr_cifra

loop metka1

pop si

pop dx

pop cx

pop ax

ret

write_10 endp

wr_cifra proc

add dl,30h

mov ah,2

int 21h

ret

wr_cifra endp

exit proc ; выход из программы

mov ah,00

mov al,03h

int 10h

mov ax,4c00h

int 21h

ret

exit endp

cod_seg ends

end start

Соседние файлы в папке Индивидуалка