Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Linux/Unix > прерывания bios


Автор: alexkolzov 2.12.2010, 02:10
Только начал изучать gas. Подскажите, можно ли (и как) использовать прерывания bios? А то привычный набор типа
mov $0, %ah
int $0x16
компилируется без ошибок, но вызывает ошибку сегментации. В чем причина?

Автор: 500mhz 2.12.2010, 21:05
а кто сказал что в linux прерывания соответствуют мсдосовским?

Автор: alexkolzov 3.12.2010, 01:19
никто не говорил. но насколько я помню, 16h - прерывание bios а не dos. Если не прав - поправьте пожалуйста. Вопрос такой: как вызвать в программе под Linux прерывания bios, например, для опроса клавиатурного буффера

Автор: 500mhz 3.12.2010, 12:04
ой ,вы правы, извеняйте запямятовал.  

но не суть важно, никто вам не даст напрямую работать с клавой в линюхе
попробуй из под root все это делать, полюбому это как бы не коректно будет.

так по быстрому, getchar на асме )))

Код

mov eax, 3 ;sys_read
mov ebx, 0 ;stdin
mov ecx, адрес буфера
mov edx, 1 ;сколько байт прочитать
int 0x80 ;собственно syscall

Автор: alexkolzov 3.12.2010, 19:14
по быстрому - это круто, но там восьмидесятое линуксовое прерывание, оно читает из stdin, а stdin может быть и не клавой вовсе. А если нужен именно ввод с клавиатуры в обход stdin?
что никто просто так ниче не даст - эт тоже понятно, и скорее всего даже root не поможет (если память мне не изменяет, там заморочка в режиме работы процессора, в защищенном обращаться к bios нельзя). Вот приспичило мне вызвать bios. Неужели нельзя? Может кто-нибудь сталкивался с подобным?

Автор: 500mhz 4.12.2010, 14:27
alexkolzov
в таком случае не "ехешник" нада делать а LKM,он работает в пространстве кернела как драйвер

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)