· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Вывод через порт 70h

Посл.отвђт Сообщенiе


Дата: Апр 23, 2004 18:29:06

Подскажите, пожалуйста, куда команда out 70h, al выводит инфу и как эту инфу занести в какую-то переменную?


Дата: Апр 23, 2004 18:34:29

Ежели не ошибаюсь то это КМОП(по инглиш Cmos), но в связке должна быть и 71h. in или out. В techelpe ето есть!


Дата: Апр 23, 2004 18:42:30 · Поправил: Nos

Не ошибаешься, это CMOS... В течхелпе и вычитал... а как я могу увидеть содержимое ячейки, адрес которой заношу в al?
Скажем:
mov al, 11h
out 70h, al
а дальше что?
Вообще там написано:
mov al, 12h
out 70h, al
jmp $+2
in al, 71h
это что же получается? Сначало считали, а после задержки записали?


Дата: Апр 23, 2004 18:47:07

ща лучше следущее за аттачу глянешь!

1174698265__CMOSFILE.ASM


Дата: Апр 23, 2004 18:47:32


Дата: Апр 23, 2004 19:00:31

Nos
Нет ты ошибаешься.
Инструкция OUT пересылает байт или слово данных из регистров AL, AX или EAX в порт
mov al, 11h
out 70h, al

пересылаем в порт 70h(CMOS) al те устанавливаем адресс ечейки 11h ,а затем считываем эту ечейку
in al, 71h


Дата: Апр 23, 2004 19:02:30

А если это делать без задержки (jmp $+2 убрать)?


Дата: Апр 23, 2004 19:17:15

Nos
Команда out 70h, al выводит инфу в порт 70h. Инфа, которую она туда выводит, уже хранится в регистре al. Однако, какой вопрос, такой и ответ.

Теперь держи просто размышления вслух. Что такое порт вообще? Грубо говоря, это понумерованный провод, который идет от процессора в_общем_случае_непонятно_куда, к какому-то внешнему устройству. Внешнее - не обязательно снаружи компьютера, просто не внутри процессора.

В частном случае, если номер порта известен и описан в документации, можно узнать, к какому устройству этот провод идет, и что это устройство позволяет делать. Порты 70h и 71h принадлежат такому устройству, как CMOS. Если не вдаваться в детали очень глубоко, то это устройство имеет свою собственную небольшую внутреннюю память.

Чтобы получить доступ к какой-то из ячеек этой внутренней памяти, нужно сначала сообщить устройству, к какой ячейке ты хочешь обратиться. Для этого нужно в порт 70h выдать номер ячейки (командой out 70h, al).

После того, как мы сообщили номер ячейки, мы можем попросить устройство вернуть нам содержимое этой ячейки (командой in al, 71h) или изменить его (командой out 71h, al).

Если между двумя обращениями к устройству не сделать задержки, то процессор, особенно быстрый, может выполнить обе команды быстрее, чем медленное внешнее устройство успеет понять, чего от него хотят. В результате может произойти совсем не то, чего хотел ты. Чтобы избежать такой ситуации, между обращениями к устройству вставляют команды задержки, например
jmp $+2; прыжок на месте

All
HELHEIM?


Дата: Апр 23, 2004 19:19:25

HELHEIM?

Нет.


Дата: Апр 23, 2004 19:22:42

RobinFood
Ну, ни хрена себе "пронумерованный провод" про всякие к155ир,какой нить пять, поди слыхал. Так вот это тоже самое токо включенное в адресное пространство.


Дата: Апр 23, 2004 19:34:03

Угу... тогда, вопрос такой (простите, что я такой ламер): альтернативный вариант задержки?
Дело в том, что я ОЧЕНЬ слегка шарю в Асме, и ещё меньше в Си. Но, проги делаю гибриды из Си и Асма (в Асме работа с прерываниями и т.д., в Си вывод чё мне надо на экран)... Может глупо, но тем не менее! Компилятор ругается на строку jmp $+2...


Дата: Апр 23, 2004 19:48:20

Nos
jmp @label
@label:


Дата: Апр 24, 2004 20:58:00

Если между двумя обращениями к устройству не сделать задержки, то процессор, особенно быстрый, может выполнить обе команды быстрее, чем медленное внешнее устройство успеет понять, чего от него хотят. В результате может произойти совсем не то, чего хотел ты. Чтобы избежать такой ситуации, между обращениями к устройству вставляют команды задержки, например 
jmp $+2; прыжок на месте 


Если я не ошибаюсь, где-то читал (Зубкове ?...), что начиная с каких-то там ранних P75 процессор ждет выполнения out/in команд. А если надо ждать, пока само устройство очнется, то обычно его читают на предмет готовности, типа:
out dx,al

@@WaitDevice:
  in  al,dx
  test al,Mask
  jnz  @@Ready
  ; Check timeout
  ...
@@Ready:


Дата: Апр 26, 2004 04:11:52

_Chingachguk_
А если надо ждать, пока само устройство очнется,
то обычно его читают на предмет готовности

imho это не имеет отношения к чтению из cmos


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.092