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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 20:52   #1
Denutrror
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 59
Радость asm получить код нажатой клавиши... (?)

Приятного душевного настроя вам.

Есть такой вопрос: при использовании нижеследующего кода возникает такая ошибка:
Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004520f2 in module 'Project1.exe'. Read of address FFFFFFFF'. Process stoped...

И подсвечивается строка int 16 {проблемная зона}

В чём ошибка?


Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a: byte;
begin
asm
mov ah,0
int 16 {проблемная зона}
mov al,ah
end;
end;
Мои познания в программизме не особо глубоки, а в assembler`е мне известны лишь имена регистров и несколько инструкций. Так, что прошу не осуждать меня за глупые ошибки.
Denutrror вне форума Ответить с цитированием
Старый 30.03.2012, 21:14   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Работать с прерываниями MS-DOS из Delphi нужно как-то по другому. Напрямую кажется нельзя. Как говорится: "Search The Fucking Web(STFW)". Только не понимаю, зачем себе усложнять жизнь? Ведь есть же событие KeyDown, в котором переменная key хранит код нажатой клавиши.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 30.03.2012, 22:25   #3
Denutrror
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 59
По умолчанию

Цитата:
Работать с прерываниями MS-DOS из Delphi нужно как-то по другому. Напрямую кажется нельзя.
К сожалению да.(( Немного поискав нашёл схожую статью на форуме

Как я понимаю суть в том что у нас нет привилегий для использования прерываний.
Цитата:
Только не понимаю, зачем себе усложнять жизнь? Ведь есть же событие KeyDown, в котором переменная key хранит код нажатой клавиши.
Недавно начал знакомится с ассемблером, охото потыкать, посмотреть, что там, как происходит...
Denutrror вне форума Ответить с цитированием
Старый 31.03.2012, 10:47   #4
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Турбо паскаль, и успехов во всех ваших начинаниях!

Последний раз редактировалось Silver_S; 31.03.2012 в 11:07.
Silver_S вне форума Ответить с цитированием
Старый 31.03.2012, 12:33   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Работать с прерываниями MS-DOS из Delphi нужно как-то по другому. Напрямую кажется нельзя.
в принципе нельзя.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.03.2012, 13:31   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Пепел Феникса, а вот так ,ТЫНС
Только я там ничего не понял, но говорят, что можно.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 31.03.2012, 13:34   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

то не ДОС прерывания.
я про них говорил если что.

да и практической пользы в этом по сути нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.03.2012, 13:50   #8
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

прерывания с WinXP доступны только драйверам
robt вне форума Ответить с цитированием
Старый 31.03.2012, 13:53   #9
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

А что это тогда? BlackAngel, как я понял, говорит про вызовы прерываний через Kernel. Или я чего-то недопонимаю.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 31.03.2012, 14:01   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
прерывания с WinXP доступны только драйверам
прерывания может применить любое приложение.
только вот в защищенном режиме процессора(Win32, Win64) у них совсем другой смысл.
в ДОС, прерывания были как АПИ грубо говоря.
в Win там свое АПИ, и в прерываниях нет смысла.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код нажатой клавиши Delphi all_is_fear Помощь студентам 1 02.12.2011 10:35
Скан-код нажатой клавиши в dec(десятичной системе) Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.11.2010 16:33
Как получить код клавиши клавиатуры. prw07 Общие вопросы Delphi 2 17.09.2010 11:04
код нажатой клавиши galaid Общие вопросы Delphi 4 24.05.2009 20:03
вывести код нажатой клавиши fclmhooligan JavaScript, Ajax 0 22.10.2008 09:32