ассемблер под windows, задание такое: Копирование набранной в консоли строки в буфер обмена Windows. программа есть, только работает некорректно, буфер очищает, но не копирует. помогите пожалуйста как-нить!!!!! | Код | .386 .model flat, stdcall includelib import32.lib extrn GetStdHandle: near extrn WriteConsoleA: near extrn ReadConsoleA: near extrn ExitProcess: near extrn FreeConsole: near extrn AllocConsole: near extrn SetConsoleTitleA: near extrn CharToOemA: near extrn CloseHandle: near extrn GlobalAlloc:near extrn GlobalLock:near extrn GlobalUnlock:near extrn OpenClipboard:near extrn SetClipboardData:near extrn CloseClipboard:near ;extrn GlobalFree:near extrn CloseClipboard:near extrn EmptyClipboard:near STD_OUTPUT_HANDLE equ -11 STD_INPUT_HANDLE equ -10 GMEM_DDESHARE equ 2000h GMEM_MOVEABLE equ 2h CF_TEXT equ 1 KEY_EV equ 1h .data Std_Handle_Out dd ? Std_Handle_Input dd ? reserv dd ? text dw 9 dup(?) wr_char db ? wr_cnt dd ? console_text db 1024 dup(0) msg_exit db 'Для выхода нажмите ESC', 10, 13, 0 sTitle db 'Lab_8', 0 hg dd ? .code start: push offset msg_exit push offset msg_exit call CharToOemA push offset sTitle push offset sTitle call CharToOemA push offset sTitle call SetConsoleTitleA push STD_OUTPUT_HANDLE call GetStdHandle mov Std_Handle_Out, eax push STD_INPUT_HANDLE call GetStdHandle mov Std_Handle_Input, eax mov esi, offset msg_exit call OutputString mov ebx, offset console_text call Input_console set_cplipboard: mov esi,offset console_text call LengthString inc edi call GlobalAlloc,GMEM_MOVEABLE,edi cmp eax,0 je exit mov ebx,eax call GlobalLock,ebx dec edi mov ecx,edi mov edi,eax mov esi,offset console_text cld rep movsb mov al,0 stosb call GlobalUnlock,ebx call EmptyClipboard call OpenClipboard, 0 call EmptyClipboard call SetClipboardData,CF_TEXT,ebx call CloseClipboard ; call GlobalFree,ebx exit: push 0 call ExitProcess LengthString proc cld mov ecx, 65535 xor eax, eax mov edi, esi repne scasb dec edi sub edi, esi ret LengthString endp OutputString proc call LengthString call WriteConsoleA, Std_Handle_Out, esi, edi, offset wr_cnt, 0 ret OutputString endp Input_console proc xor eax, eax call ReadConsoleA, Std_Handle_Input, offset text, 40, offset reserv jmp set_cplipboard Input_console endp end start
|
и батовщик tasm32 /ml lab_8.asm tlink32 /Tpe/ap/c/x lab_8.obj
|