Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

in/out

1.8K
23 января 2008 года
Kama
153 / / 04.05.2006
1) хотелось бы узнать чем отличается аппаратные прерывания от векторных? Зачем это нужно? Чесно сказать читал но не понял...
2) Помогите с кодом плз.

код не работает хотя должен как в статье написано. Этот код читает сколько гибких дисководов установлено не компе.

mov al,14h
out 70h,al
in al,71h
mov ah,al
shr ah,6
and al,1
add al,ah

дебуггер почему-то переводит команду in в несколько команд shr,1 почему?
1.6K
23 января 2008 года
Vov4ick
476 / / 01.02.2007
Дебуггер ничего не переводит. Нет команды SHR REG,CONST, ассемблер её разворачивает в несколько сдвигов на один бит.
Векторных прерываний нет. Есть програмные и аппаратные, различающиеся только событием, их вызывающим. Соответствием между запросом на прерывание (IRQ) и генерящимся прерыванием процессора управляет програмируемый контроллер прерываний (ПКП, PIC, APIC).
А для получения установленного оборудования лучше выхови int 11h.
Подробности по КМОП-памяти, прерываниям и прочая можно слить здесь
1.9K
25 января 2008 года
andriano
474 / / 10.01.2008
Вообще-то команда сдвига на несколько разрядов есть. Но только 286+.
1.8K
31 января 2008 года
Kama
153 / / 04.05.2006
а зачем использовать 070 порты если у флоппи есть свой порт (3F0 – 3F7
)
1.8K
31 января 2008 года
Kama
153 / / 04.05.2006
тут вот просматривал информацию про int 11h и int12h. Кажется что-то не то. int11h вроде выдает инфу нормально в (АХ=С822), проверяю не сходится, например последние два бита где получается 3 установленных принтера(у меня и одного нет).
а какую именно память выдает int 12h? А как узнать RАМ память?
1.6K
31 января 2008 года
Vov4ick
476 / / 01.02.2007
Цитата:
а зачем использовать 070 порты если у флоппи есть свой порт (3F0 – 3F7)


А зачем использовать процедуры DOS\BIOS если есть порты 0000-ffff ;-)

При чём здесь принтеры? Указывается количество параллельных портов для их подключения, а есть ли на них принтер извольте определять сами, ибо все принтеры разные ;-)

int12 сообщает количество базовой памяти. Для узнавания кол-ва всей памяти в неё что-то пишут, потом читают. Если прочлось то, что записали, значит память там есть) Готовые процедуры для этого можно найти в гугле.

349
31 января 2008 года
Phantom-84
656 / / 27.10.2005
Цитата:
а зачем использовать 070 порты если у флоппи есть свой порт (3F0 – 3F7)

0x70 используется для доступа к CMOS-памяти, в которой BIOS хранит информацию о текущей конфигурации. Это позволяет ОС не "обстукивать" каждый раз флоппик для детекта его наличия, хотя в общем тебе никто не запрещает это делать.

Цитата:
а какую именно память выдает int 12h? А как узнать RАМ память?

int 12h позволяет определить доступную базовую (base/conventional) память в пределах первого мега. Для более детального детекта памяти используются другие функции, например, int 15h/0E820h.

1.8K
04 февраля 2008 года
Kama
153 / / 04.05.2006
а для чего надо писать 2 строку (out 70h,al)
, (что-то записывая), а нельзя ли сразу считывать информацию командами начинающими с 3.строки, а можно ли использовать 3F0-3F7 (порт для флоппи) скажем так для HDD ?
252
04 февраля 2008 года
koderAlex
1.4K / / 07.09.2005
Цитата: Kama
а для чего надо писать 2 строку (out 70h,al)
, (что-то записывая), а нельзя ли сразу считывать информацию командами начинающими с 3.строки, а можно ли использовать 3F0-3F7 (порт для флоппи) скажем так для HDD ?


1) нет . регистры CMOS памяти адресуются через 70h порт .
2) тож нет . если переназначить базовый адрес IDE контроллера (и любого другого ) на базовый порт другого у-ва , то первое же чтение порта вызовет конфликт шины , а это обычно зависон . :)

1.8K
04 февраля 2008 года
Kama
153 / / 04.05.2006
принцип этот мне что-то не понятен, то есть я всего лишь хочу считать инфу по адресу 14h, но выходит что сперва надо ее записать командой out (именно записать) и для чего? походу извините меня за может глупые вопросы но сейчас я пока что-то не догоняю.
1.9K
04 февраля 2008 года
andriano
474 / / 10.01.2008
У тебя адресное пространство портов ограничено 2 байтами, а объем данных - не менее несколькких десятков байт. Как сохранить несколько десятков байт в двух байтах?
Ответ простой: по одному адресу ты задаешь номер байта, а по другому получаешь доступ к его содержимому.
1.8K
05 февраля 2008 года
Kama
153 / / 04.05.2006
мощно сказано!
252
06 февраля 2008 года
koderAlex
1.4K / / 07.09.2005
Цитата: Kama
принцип этот мне что-то не понятен, то есть я всего лишь хочу считать инфу по адресу 14h, но выходит что сперва надо ее записать командой out (именно записать) и для чего? походу извините меня за может глупые вопросы но сейчас я пока что-то не догоняю.


порты ввода/вывода и порты устройства - это разные вещи .
порты ввода/вывода есть адресное пространство процессора , а 14h порт CMOS это внутренний регистр устройства .
порты 70h и 71h io процессора используются для доступа с регистрам CMOS . 70h порт индексный - в него надо записать номер регистра который тебе нужен . после этого нужный регистр CMOS будет связан с 71h портом .

1.8K
12 февраля 2008 года
Kama
153 / / 04.05.2006
понятно, думаю вопросы мои по этой теме исчерпаны огромное спасибо за ваше участие :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог