Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2010, 09:19   #1
Medwedxxx
 
Регистрация: 11.08.2009
Сообщений: 4
По умолчанию приостановка программы

Здравствуйте, подскажите пожалуйста существует ли в MASM32 команда аналогичной команде от MS-DOS
Код:
Pause
И какая заранее спасибо
Medwedxxx вне форума Ответить с цитированием
Старый 27.07.2010, 09:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно проимпортировать из msvcrt.dll функцию _getch.
Она как раз такое и делает - ожидает ввода символа.
Не знаю как в MASM а в FASM так выглядит:
Код:
format PE console
entry start

include 'D:\fasmw16726\INCLUDE\win32a.inc'

section '.data' data readable writeable
message db 'Hello, world!',0
section '.code' code readable executable
start:
; CINVOKE макрос в составе FASM.
; Позволяет вызывать CDECL-функции.
  cinvoke printf,message
  cinvoke getch
; INVOKE аналогичный макрос для STDCALL-функций.
  invoke ExitProcess,0
section '.idata' import data readable
library kernel,'kernel32.dll',\
	msvcrt,'msvcrt.dll'

import kernel,\
       ExitProcess,'ExitProcess'

import msvcrt,\
       printf,'printf',\
       getch,'_getch'
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 08:51   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Можно использовать Win32 API функцию:
Цитата:
BOOL ReadConsoleInput(

HANDLE hConsoleInput, // handle of a console input buffer
PINPUT_RECORD lpBuffer, // address of the buffer for read data
DWORD nLength, // number of records to read
LPDWORD lpNumberOfEventsRead // address of number of records read
);
Если требуется не ожидать нажатия клавиши, а приостановить работу программы, то есть функция:
Цитата:
VOID Sleep(

DWORD dwMilliseconds // sleep time in milliseconds
);
которая останавливает выполнение потока на определенное количество миллисекунд.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 28.07.2010, 09:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
alexcoder
М.м.м. поправь меня, но по-моему она ждет нажатия именно клавиши Энтер, а пользователю насколько я понял нужна задержка до нажатия любой клавиши.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 09:26   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Цитата:
М.м.м. поправь меня, но по-моему она ждет нажатия именно клавиши Энтер, а пользователю насколько я понял нужна задержка до нажатия любой клавиши.
Хм, а случаем не всех клавиш?
Функция _getch возвращает прочитанный символ нажатый на клавиатуре, подмечу что любой символ. Соответственно значит она и ждет нажатие какой либо из клавиш.

Последний раз редактировалось coNsept; 28.07.2010 в 09:43.
coNsept вне форума Ответить с цитированием
Старый 28.07.2010, 09:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а случаем не всех клавиш?
Та вот яж и не помню...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 10:42   #7
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Вот, нашел у себя пример дерьмокода))):
Код:
	LOO:
	;прочитать одну запись о событии
	PUSH OFFSET CO
	PUSH 1
	PUSH OFFSET KEYBOARD_KEY
	PUSH InputH
	CALL ReadConsoleInputA@16
	;нет ли события от клавиатуры?
	CMP WORD PTR KEYBOARD_KEY,KEY_EV
	JNE LOO
	;Нажата или отпущена?
	CMP BYTE PTR KEYBOARD_KEY+4,1
	JNE LOO
;игнорируем нажатия alt, shift и ctrl, чтобы они не выводились при смене раскладки клавиатуры
	Invoke GetAsyncKeyState,VK_ALT	
	test eax,8000h
	jnz LOO
	Invoke GetAsyncKeyState,VK_SHIFT
	test eax,8000h
	jnz LOO
	Invoke GetAsyncKeyState,VK_CTRL
	test eax,8000h
	jnz LOO
	Invoke GetAsyncKeyState,VK_CAPS
	test eax,8000h
	jnz LOO

	;вывести символ
	PUSH 0
	PUSH offset writed
	PUSH 1
	PUSH OFFSET BYTE PTR KEYBOARD_KEY+14
	PUSH OutputH
	CALL WriteConsoleA@20

	lea ebx,buff	;заносим буфер нажатых клавиш в eax
	mov eax,[ebx]
	shl eax,8		; сдвигаем на 1 символ влево
	mov al,BYTE PTR KEYBOARD_KEY+14 ;добавить последнюю клавишу
	mov [ebx],eax		; сохранить буфер


	;есть, какое?
	;ENTER
	CMP BYTE PTR KEYBOARD_KEY+14,0Dh
	JE ENT
	;Клавиша ESC
	CMP BYTE PTR KEYBOARD_KEY+14,27
	JE EXIT
	;Проверка виртуальных кодов
Так что если читать с консоли по одному символу, то функция будет ожидать нажатия любой клавиши.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приостановка выполнения цикла ACE Valery Общие вопросы C/C++ 21 19.11.2011 12:40
[Idhttp] Приостановка get-запроса EaRLL Работа с сетью в Delphi 3 27.09.2009 18:43
приостановка выполнения процедуры BESS Общие вопросы Delphi 5 15.09.2008 00:53
Приостановка цикла для выполнения внешней программы Uomo Общие вопросы Delphi 3 04.04.2008 11:48
Приостановка программы Hintman Общие вопросы Delphi 6 14.04.2007 23:38