Консольное приложение определения координат точки на экране - Assembler

Узнай цену своей работы

Формулировка задачи:

Задание: Создать консольную программу, которая определяет координаты мыши на экране. В программе должны быть:
  • строка с сообщением «координаты мыши»
  • возможность задания координат сообщения.
  • возможность задания Ф.И.О.
Для задания Ф.И.О. заходим в сегмент данных и меняем в задаем в нем Ф.И.О. Чтобы сменить координаты выводимого сообщения, надо поменять числа в строках MOV CRD.X,10 и MOV CRD.Y,15. Координаты сообщения: X=35, Y=40 Код моей программы:
.386P
.MODEL FLAT, STDCALL
STD_OUTPUT_HANDLE   equ -11
STD_INPUT_HANDLE    equ -10
KEY_EV              equ 1h 
MOUSE_EV            equ 2h
EXTERN WriteConsoleA@20:NEAR
EXTERN SetConsoleCursorPosition@8:NEAR
EXTERN SetConsoleTitleA@4:NEAR
EXTERN FreeConsole@0:NEAR 
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
COOR STRUC 
     X WORD ? 
     Y WORD ? 
COOR ENDS 
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
    HANDL  DWORD  ?
    HANDL1 DWORD  ?
    HANDL2 DWORD  ?
    TITL DB "Mouse event processing",0
    BUF  DB 200 dup(0)
    LENS DWORD ?
    CO   DWORD  ?
    FORM DB "Coordinates: %u  %u  ",0
    CRD  COOR <?> 
    STR1 DB "To exit press ESC.",0
    MOUS_KEY WORD 19 dup(?)
    STR2 DB "Full Name" ,0      
_DATA ENDS 
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE' 
START: 
    CALL FreeConsole@0
    CALL AllocConsole@0 
    PUSH STD_INPUT_HANDLE
    CALL GetStdHandle@4
    MOV  HANDL1,EAX 
    PUSH STD_OUTPUT_HANDLE
    CALL GetStdHandle@4
    MOV  HANDL,EAX
    PUSH STD_OUTPUT_HANDLE
    CALL GetStdHandle@4
    MOV  HANDL2,EAX         
    PUSH OFFSET TITL 
    PUSH OFFSET TITL 
    CALL CharToOemA@8 
    PUSH OFFSET TITL
    CALL SetConsoleTitleA@4
    PUSH OFFSET STR1
    PUSH OFFSET STR1
    CALL CharToOemA@8 
    PUSH OFFSET STR1
    CALL LENSTR 
    PUSH 0
    PUSH OFFSET LENS
    PUSH EBX
    PUSH OFFSET STR1
    PUSH HANDL
    CALL WriteConsoleA@20
LOO:
    MOV CRD.X,35
    MOV  CRD.Y,40
    PUSH CRD 
    PUSH HANDL
    CALL SetConsoleCursorPosition@8 
    PUSH OFFSET CO
    PUSH 1  
    PUSH OFFSET MOUS_KEY
    PUSH HANDL1 
    CALL ReadConsoleInputA@16 
    CMP  WORD PTR MOUS_KEY,MOUSE_EV 
    JNE  LOO1
    MOV  AX,WORD PTR MOUS_KEY+6
    MOVZX EAX,AX 
    PUSH EAX
    MOV  AX,WORD PTR MOUS_KEY+4
    MOVZX EAX,AX 
    PUSH EAX
    PUSH OFFSET FORM 
    PUSH OFFSET BUF 
    CALL wsprintfA 
    ADD  ESP,16
    PUSH OFFSET BUF 
    PUSH OFFSET BUF 
    CALL CharToOemA@8 
    PUSH OFFSET BUF 
    CALL LENSTR
    PUSH 0
    PUSH OFFSET LENS
    PUSH EBX
    PUSH OFFSET BUF
    PUSH HANDL
    CALL WriteConsoleA@20
    JMP  LOO
LOO1: 
    CMP  WORD PTR MOUS_KEY,KEY_EV
    JNE  LOO
    CMP  BYTE PTR MOUS_KEY+14,27
    JNE  LOO
    CALL FreeConsole@0
    PUSH 0
    CALL ExitProcess@4
    RET
LENSTR PROC
    ENTER 0,0
    PUSH  EAX
    CLD
    MOV   EDI,DWORD PTR  [EBP+08H]
    MOV   EBX,EDI
    MOV   ECX,100 
    XOR   AL,AL
    REPNE SCASB
    SUB   EDI,EBX
    MOV   EBX,EDI
    DEC   EBX
    POP   EAX 
    LEAVE 
    RET   4
LENSTR ENDP
_TEXT  ENDS
END START
Проблема в том, что выдается куча ошибок. Как их можно исправить?

Решение задачи: «Консольное приложение определения координат точки на экране»

textual
Листинг программы
EXTERN AllocConsole@0:NEAR
EXTERN GetStdHandle@4:NEAR
EXTERN CharToOemA@8:NEAR
EXTERN ReadConsoleInputA@16:NEAR
EXTERN wsprintfA:NEAR
EXTERN ExitProcess@4:NEAR

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы