in/out
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 почему?
Векторных прерываний нет. Есть програмные и аппаратные, различающиеся только событием, их вызывающим. Соответствием между запросом на прерывание (IRQ) и генерящимся прерыванием процессора управляет програмируемый контроллер прерываний (ПКП, PIC, APIC).
А для получения установленного оборудования лучше выхови int 11h.
Подробности по КМОП-памяти, прерываниям и прочая можно слить здесь
)
а какую именно память выдает int 12h? А как узнать RАМ память?
А зачем использовать процедуры DOS\BIOS если есть порты 0000-ffff ;-)
При чём здесь принтеры? Указывается количество параллельных портов для их подключения, а есть ли на них принтер извольте определять сами, ибо все принтеры разные ;-)
int12 сообщает количество базовой памяти. Для узнавания кол-ва всей памяти в неё что-то пишут, потом читают. Если прочлось то, что записали, значит память там есть) Готовые процедуры для этого можно найти в гугле.
0x70 используется для доступа к CMOS-памяти, в которой BIOS хранит информацию о текущей конфигурации. Это позволяет ОС не "обстукивать" каждый раз флоппик для детекта его наличия, хотя в общем тебе никто не запрещает это делать.
int 12h позволяет определить доступную базовую (base/conventional) память в пределах первого мега. Для более детального детекта памяти используются другие функции, например, int 15h/0E820h.
, (что-то записывая), а нельзя ли сразу считывать информацию командами начинающими с 3.строки, а можно ли использовать 3F0-3F7 (порт для флоппи) скажем так для HDD ?
, (что-то записывая), а нельзя ли сразу считывать информацию командами начинающими с 3.строки, а можно ли использовать 3F0-3F7 (порт для флоппи) скажем так для HDD ?
1) нет . регистры CMOS памяти адресуются через 70h порт .
2) тож нет . если переназначить базовый адрес IDE контроллера (и любого другого ) на базовый порт другого у-ва , то первое же чтение порта вызовет конфликт шины , а это обычно зависон . :)
Ответ простой: по одному адресу ты задаешь номер байта, а по другому получаешь доступ к его содержимому.
порты ввода/вывода и порты устройства - это разные вещи .
порты ввода/вывода есть адресное пространство процессора , а 14h порт CMOS это внутренний регистр устройства .
порты 70h и 71h io процессора используются для доступа с регистрам CMOS . 70h порт индексный - в него надо записать номер регистра который тебе нужен . после этого нужный регистр CMOS будет связан с 71h портом .