Ассемблер для Windows



         

Таймеры в консольном приложении - часть 3


; строка - [EBP+08H] ; длина в EBX 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 ; найти символ 0 SUB EDI,EBX ; длина строки, включая 0 MOV EBX,EDI DEC EBX ;-------------------- POP EAX LEAVE RET 4 LENSTR ENDP

; процедура вызывается таймером TIME PROC PUSHA ; сохранить все регистры ; установить позицию курсора MOV CRD.X,0 MOV CRD.Y,10 PUSH CRD PUSH HANDL CALL SetConsoleCursorPosition@8 ; заполнить строку STR3 PUSH NUM PUSH OFFSET FORM PUSH OFFSET STR3 CALL wsprintfA ADD ESP,12 ; восстановить стек ; перекодировать строку STR3 PUSH OFFSET STR3 PUSH OFFSET STR3 CALL CharToOemA@8 ; вывести строку с номером вызова таймера PUSH OFFSET STR3 CALL LENSTR PUSH 0 PUSH OFFSET LENS PUSH EBX PUSH OFFSET STR3 PUSH HANDL CALL WriteConsoleA@20 INC NUM POPA RET 20 ; выход с освобождением стека TIME ENDP _TEXT ENDS END START

Рисунок 2.2.5. Таймер в консольном режиме.

Программа на Рисунок 2.2.5 будет выводить в окно значение счетчика, которое будет каждую секунду увеличиваться на единицу.

Я начал данную главу с рассуждения о командной строке, но до сих пор не объявил, как работать с командной строкой. О, здесь все очень просто. Есть API-функция GetCommandLine, которая возвращает указатель на командную строку. Эта функция одинаково работает как для консольных приложений, так и для приложений GUI. Ниже представлена программа, печатающая параметры командной строки. Надеюсь, вы понимаете, что первым параметром является полное имя программы.

; программа вывода параметров командной строки .386P ; плоская модель .MODEL FLAT, stdcall

; константы STD_OUTPUT_HANDLE equ -11

; прототипы внешних процедур EXTERN GetStdHandle@4:NEAR EXTERN WriteConsoleA@20:NEAR EXTERN ExitProcess@4:NEAR EXTERN GetCommandLineA@0:NEAR

; директивы компоновщику для подключения библиотек includelib c:\masm32\lib\user32.lib includelib c:\masm32\lib\kernel32.lib ;------------------------------------------------------------




Содержание  Назад  Вперед