Здравствуйте, Гальцов Андрей.
Вот Вам программка, сделанная на основе Вашей.
Хочу только обратить внимание, что запускать программу надо только из текстового режима (т.е. нажать Alt-Enter на окне CMD)
Приложение:
.model small
data_seg segment
Xsize dw 0 ;максимальная позиция по-горизонтали
Ysize dw 0 ;максимальная позиция по-вертикали
flag db 0 ;флаг смены позиции
data_seg ends
main segment
; устанавливаем соответствие между регистрами и сегментами
assume cs:main, ds: data_seg
start:
; посылаем начальный адрес сегмента в регистр ax
mov ax, data_seg
mov ds, ax
;определим позицию текстового курсора мыши по-горизонтали
mov ah, 0fh
int 10h
mov al, ah ;в ah - число текстовых строк
mov ah, 0
dec ax ;счет с 0, номер последней строки = число строк минус 1
shl ax, 3 ;преобразуем в позицию точки, на каждый символ 8 точек
mov Xsize, ax ;сохраним позицию для правого символа
;определим позицию текстового курсора мыши по-вертикали
mov ax, 1130h
int 10h
mov al, dl ;в dl число строк - 1 (т.е. уже номер последней строки)
mul cl ;умножим на число строк на символ
mov Ysize, ax ;сохраним позицию для нижнего символа
;инициализация мыши
mov ax, 0
int 33h
;сделать указатель видимым
mov ax, 1
int 33h
escape:
mov ah, 7 ;ждать esc
int 21h ;прерывание для работы с клавиатурой
cmp al, 31h ;проверка на нажатие клавиши “1”
jne waiting
changepos: ;устанавливаем позицию курсора
mov cx, Xsize
mov dx, Ysize
cmp flag, 0 ;проверим, куда перемещаем курсор
je setpos ;в правый нижний угол
shr cx, 1 ;в центр экрана
shr dx, 1
setpos:
mov ax, 2 ;гасим курсор
int 33h
mov ax, 4 ;устанавливаем
int 33h
mov ax, 1 ;показываем курсор
int 33h
xor flag, 1 ;меняем флаг
jmp escape
waiting:
cmp al, 27
jne escape
mov ax, 2 ;выключить курсор
int 33h
mov ax, 4c00h
int 21h ;выход
main ends
end start
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен