#make_COM# ; COM file is loaded at CS:0100h .286 .model tiny .code org 100h start: mov ax,3;текстовый режим 80х25 символов, если учесть размер символа int 10h;8х8 соответствует графическому режиму 640х200 mov dx,offset string1;выводим сообщение как выйти из программы mov ah,9 int 21h mov ax,0;Функция 00h предназначена для выяснения, загружен ли в память int 33h;драйвер мыши. Если эта функция возвращает AX = 0, то драйвер test ax,ax;отсутствует. Если драйвер загружен, то AX = 0FFFFh , а в jz exit;регистре BX - число кнопок мыши mov ax,0Ch;Функция 0Ch позволяет программно задать реакцию на события push cs;связанные с мышью: ее перемещения, нажатие и отпускание кнопок. pop es;События, на которые необходимо реагировать, должны быть отмечены mov cx,2;единицами в соответствующих разрядах регистра CX. CX=2 - вызвать подпро-грамму, mov dx,offset mouse;если левая клавиша отпущена. После выполнения этой int 33h;функции драйвер мыши на каждое из заданных событий будет ;реагировать вызовом обработчика событий - подпрограммы, FAR-указатель на адрес ;которой был указан в регистрах ES : DX mov ax,1;Функция 01h включает изображение курсора мыши на экране. int 33h xor ax,ax;ждем пока не нажмут на клавиатуру int 16h exit: int 20h;завершаем программу mouse proc far push cs pop ds push 0B800h pop es mov ax,cx;в CX и DX - координаты курсора mov di,dx;в DI будут координаты надписи shl di,2;di=dx*4 add di,dx;di=dx*5 shl di,2;di=dx*20 shr cx,2 add di,cx;di=dx*20+cx/4 mov bl,10 div bl or ah,30h mov string[4],ah aam add ax,3030h mov string[2],ah mov string[3],al mov ax,dx div bl or ah,30h mov string[10],ah aam add ax,3030h mov string[8],ah mov string[9],al mov ax,3;стираем с экрана предыдущую надпись int 10h mov si,offset string mov cx,string1-string;длина надписи mov ah,0Fh;аттрибуты надписи (белое на черном) @@: lodsb stosw;выводим координаты на экран в заданную позицию loop @b retf mouse endp string db "x= y= " string1 db "для выхода из программы нажмите на Esc$" end start
Вот что выдаёт!!!! [4] lllegal instruction: .286 or wrong parameters. [16] ?Condition Jump out of rangel: jz exit -This may be caused by following errors! [61]Wrong parameters: MOV cx,string1-string [61]Operands do not match 16 bit Register and 8 bit Effective Address
чем то ты не тем компилишь, Code: ; COM file is loaded at CS:0100h .286 .model tiny .code org 100h start: mov ax,3;текстовый режим 80х25 символов, если учесть размер символа int 10h;8х8 соответствует графическому режиму 640х200 mov dx,offset string1;выводим сообщение как выйти из программы mov ah,9 int 21h mov ax,0;Функция 00h предназначена для выяснения, загружен ли в память int 33h;драйвер мыши. Если эта функция возвращает AX = 0, то драйвер test ax,ax;отсутствует. Если драйвер загружен, то AX = 0FFFFh , а в jz exit;регистре BX - число кнопок мыши mov ax,0Ch;Функция 0Ch позволяет программно задать реакцию на события push cs;связанные с мышью: ее перемещения, нажатие и отпускание кнопок. pop es;События, на которые необходимо реагировать, должны быть отмечены mov cx,2;единицами в соответствующих разрядах регистра CX. CX=2 - вызвать подпро-грамму, mov dx,offset mouse;если левая клавиша отпущена. После выполнения этой int 33h;функции драйвер мыши на каждое из заданных событий будет ;реагировать вызовом обработчика событий - подпрограммы, FAR-указатель на адрес ;которой был указан в регистрах ES : DX mov ax,1;Функция 01h включает изображение курсора мыши на экране. int 33h xor ax,ax;ждем пока не нажмут на клавиатуру int 16h exit: int 20h;завершаем программу mouse proc far push cs pop ds push 0B800h pop es mov ax,cx;в CX и DX - координаты курсора mov di,dx;в DI будут координаты надписи shl di,2;di=dx*4 add di,dx;di=dx*5 shl di,2;di=dx*20 shr cx,2 add di,cx;di=dx*20+cx/4 mov bl,10 div bl or ah,30h mov string[4],ah aam add ax,3030h mov string[2],ah mov string[3],al mov ax,dx div bl or ah,30h mov string[10],ah aam add ax,3030h mov string[8],ah mov string[9],al mov ax,3;стираем с экрана предыдущую надпись int 10h mov si,offset string mov cx,string1-string;длина надписи mov ah,0Fh;аттрибуты надписи (белое на черном) @@: lodsb stosw;выводим координаты на экран в заданную позицию loop @@ retf mouse endp string db "x= y= " string1 db "для выхода из программы нажмите на Esc$" end start компиляция- tasm.exe New.asm tlink.exe /t New.obj проверил-работает