Разница между отображением портов и доступом к памяти?

19

Может кто-нибудь объяснить, в чем разница между отображением портов и отображением памяти, и что достигается с обоими? Почему сопоставлен порт, как он отличается по структуре от карт памяти, и есть ли причина, по которой многие архитектуры используют обе? Кроме того, что такое «порт» в этом смысле, потому что порт может означать разные вещи в разных контекстах?

Пример: переадресация портов, порт в качестве конечной точки связи, «сопоставление портов».

Скажем, я записываю OUT в порт 400h (вымышленный; только для примера) (как в x86-64 и т. Д.).

Что или куда я пишу, если это не в памяти? Как отображается «порт», и что это в этом смысле?

Varaquilex
источник

Ответы:

24

Сопоставленный с памятью ввод-вывод и сопоставленный с портом ввод-вывод являются двумя дополнительными способами ввода-вывода.

Отображение в память ввода-вывода

В системах с отображением памяти доступ к устройству ввода-вывода осуществляется так, как будто он является частью памяти. Loadи Storeкоманды выполняются для чтения и записи на устройства ввода-вывода, точно так же, как они используются для памяти (у port-mapped есть специальные команды для ввода-вывода). Это означает, что устройства ввода-вывода используют ту же шину адреса, что и память, а это означает, что ЦП может ссылаться на память или устройство ввода-вывода в зависимости от значения адреса. Этот подход требует изоляции в адресном пространстве: адреса, зарезервированные для ввода-вывода, не должны быть доступны физической памяти.

Ниже приведено изображение простой базовой компьютерной системы . Дело гораздо сложнее в современных системах.

введите описание изображения здесь


Port-Mapped I / O

Согласно Википедии

Сопоставленный с портами ввод / вывод часто использует специальный класс инструкций ЦП специально для выполнения ввода / вывода. Это встречается на микропроцессорах Intel с инструкциями IN и OUT. Эти инструкции могут считывать и записывать от одного до четырех байтов (outb, outw, outl) на устройство ввода-вывода. Устройства ввода / вывода имеют отдельное адресное пространство из общей памяти, либо с помощью дополнительного вывода «I / O» на физическом интерфейсе ЦП, либо всей шины, выделенной для ввода / вывода. Поскольку адресное пространство для ввода-вывода изолировано от пространства для основной памяти, его иногда называют изолированным вводом-выводом.


Что касается преимуществ и недостатков: поскольку периферийные устройства работают медленнее, чем память, совместное использование данных и адресных шин может замедлить доступ к памяти. С другой стороны, благодаря системам отображения памяти, обеспечивающим простоту ввода-вывода, ЦП требует меньше внутренней логики, что помогает внедрять более быстрые, более дешевые и менее потребляющие ЦП. Логика аналогична системам RISC: уменьшите сложность, получите более специализированную и надежную систему, которая, например, очень удобна для встраиваемых систем.

Наоборот (опять из вики):

Команды ввода-вывода с отображением портов часто очень ограничены, часто предусматривая только простые операции загрузки и сохранения между регистрами ЦП и портами ввода-вывода, так что, например, для добавления константы в регистр сопоставленного с портом устройства потребуется три Инструкции: чтение порта в регистр CPU, добавление константы в регистр CPU и запись результата обратно в порт.

Я настоятельно рекомендую вам прочитать эту статью вики для получения дополнительной информации.


Чтобы ответить на один из ваших вопросов:

Что или куда я пишу, если это не в памяти?

Вы записываете в регистры интерфейса ввода / вывода через шину данных, которая позже (когда готово) отправляет данные на фактическое устройство ввода / вывода. Ниже приведено изображение примера интерфейса устройства ввода / вывода.

введите описание изображения здесь

Varaquilex
источник
Что это означает, что вы пишете для сопоставленной памяти: «Этот подход требует изоляции в адресном пространстве: то есть адреса, зарезервированные для ввода-вывода, не должны быть доступны физической памяти». Вы имеете в виду адреса, зарезервированные для ввода-вывода, в основной памяти и недоступные для не-ввода-вывода. Очевидно, что адреса ввода-вывода и не-ввода-вывода являются физической памятью. Нет такой вещи, как память, которая не является физической. (если вы не верите в аргументы Уильяма Лейна Крейга, то есть, что вещь может иметь нефизический мозг и память!).
Бароп
1
и когда вы пишете это «Вы записываете в регистры интерфейса ввода / вывода через шину данных, которая позже (когда готов) отправляет данные на фактическое устройство ввода / вывода. Ниже приведено изображение примера ввода / вывода устройство «. Вам не ясно, есть ли IO «регистр» в устройстве, я полагаю, если вы называете его зарегистрировать, это звучит так, как будто это в устройстве. Но затем вы пишете «... который позже (когда будет готов) отправляет данные на реальное устройство ввода / вывода», поэтому неясно, где вы говорите, эти места памяти находятся. Находятся ли они внутри устройства или вне устройства .. или когда-либо вне устройства.
Бароп
1
Heads up: я собрал те из того, что я изучил в лекции по микропроцессорам, а некоторые из вики. С учетом вышесказанного, я имею в виду то, что вы спросили в своем первом комментарии: «Адреса ввода-вывода и адреса, отличные от ввода-вывода, являются физической памятью», как вы думаете, неясно . На самом деле (насколько мне известно, насколько мне известно) декодер кода адреса активирует интерфейс ввода-вывода, когда указан адрес ввода-вывода, а это означает, что когда вы предоставляете адрес, он не должен находиться в диапазоне физического адреса, например , $ 0000 - $ 00FF для физического и $ 0100 - $ 01FF для IO (игнорируйте сумму, только границы ухода).
Varaquilex
@barlop Что касается вашего второго вопроса, вы здесь, я имел в виду «Ниже приведен пример интерфейса устройства ввода- вывода ». Я исправил это в только что сделанном редактировании. Я надеюсь, что редактирование устранило путаницу. Если нет, спросите больше. Я постараюсь ответить как можно лучше.
Varaquilex
1
@barlop Точка расположения памяти неоднозначна в большинстве постов и литературы, с которыми я сталкивался. Либо они предполагают, что вы уже знаете, либо они действительно не знают. Я считаю, что ответ в этих словах из LDD3 гл. 9: «Память ввода / вывода - это просто область, похожая на ОЗУ, которую устройство делает доступной для процессора по шине». (курсив добавлен) Т.е. память и / или регистры находятся на устройстве. Порт ввода-вывода и память ввода-вывода - это только два способа, которыми система делает эти места доступными для программного обеспечения.
orodbhen
2

При отображении в память ввода-вывода (просто MMIO) доступ к устройствам осуществляется с помощью инструкций, которые фактически предназначены для доступа к памяти. Каждое устройство получает определенный адрес памяти. Однако при попытке чтения или записи в эту часть памяти определенное устройство (вероятно, северный мост) просто отправляет его на соответствующее устройство. Даже если у компьютера недостаточно памяти для такого адреса (так как адреса MMIO обычно очень высоки), это не имеет значения как физическая память (та, которую вы видите, когда смотрите на материнскую плату, та, которая называется RAM) ) даже не связано. Если у вас достаточно ОЗУ для адреса, оно либо сопоставлено с более высоким, чем у ввода-вывода, либо просто потеряно, что означает, что вы не можете читать или записывать туда.

Port-Mapped I / O (просто PMIO) сильно отличается. У вас есть разные инструкции, используемые для чтения и записи в порты. Существует адресное пространство порта, такое же, как адресное пространство памяти, где адреса являются либо адресами ввода-вывода, которые фактически связываются с устройствами, либо являются просто недействительными. По сути, PMIO можно рассматривать как MMIO с отдельным адресным пространством памяти только для ввода-вывода.

Ахмет Захит Джан
источник
«По сути, PMIO можно рассматривать как MMIO с отдельным адресным пространством памяти только для ввода-вывода». - Адресное пространство - это такая простая и базовая концепция, почему вы придерживаетесь вводящей в заблуждение аналогии со своим в противном случае разумным ответом? Эта вводящая в заблуждение аналогия не меняет фактов: например, могут существовать другие адресные пространства помимо «адресного пространства памяти».
опилки
1

С такими именами, как «сигнал ввода-вывода» и «отображение памяти», все сделано намного сложнее, чем есть на самом деле, и, следовательно, у человека создается впечатление, что в нем гораздо больше, и это охватывает сложную тему. Тенденция сейчас такова, что люди рассматривают это как нечто новое. Но это очень далеко от случая. Даже Бэббидж в 1830-х годах управлял своим принтером, для этого требовался сигнал ввода-вывода, хотя и с помощью акселя и зубчатого колеса. Например, в машинах Героя Александрийского 2000 лет назад или в кинотеатрах еще во времена Греции, они всегда тянули веревку из множества различных веревок, чтобы управлять освещением или пейзажем, каждая веревка похожа на линию входа и выхода, она как Проще говоря, адрес - это «какая строка», т.е. какую вещь, память или устройство мы выбираем,

Хотя большие мэйнфрейм-компьютеры, которые заполняли здания шкафами, в 40-х годах использовали такие вещи, как 64-битные, и, следовательно, имели дело с отображением ввода-вывода точно так же, как и тогда, например, Конрад Цузе и его компьютер размером с комнату использовали плавающие Точка, которая имела около 20 цифр в десятичном виде в 1930-х годах, и должна была управлять такими вещами, как его принтер, его различные индикаторы лампочек и его переключатели. Но на крошечных микропроцессорах дело обстоит иначе: они не представлялись до 60-х годов и создавались до 1971 года. Все эти методы, использующие 8-битную логику в 80-х, использовались для микропроцессоров в 4-битных в 70-х, 2-битных в 60-х и использовались в 16бит в 90 ' s, когда все начали приобретать компьютер и, следовательно, потому что он был перед ними, впервые начали обсуждать эту тему ввода-вывода и отображения памяти, и это стало чем-то новым, появившимся с появлением Интернета; затем у нас были 32-битные компьютеры в 00-х и 64-битные компьютеры в 10-х, что привело к бесконечным дискуссиям по поводу памяти. Чтобы ответить на ваш вопрос, я буду говорить о микросхемах, которые любители электроники купили 30-40 лет назад, как, например, в то время, когда я это делал, поскольку позже все стало настолько продвинутым, что я не смог собрать более поздние микросхемы, но Принципы теперь одни и те же, ворота просто спрятаны внутри больших чипов в черной рамке, которые включают в себя другие выводы, которые выполняют эти операции гораздо чаще параллельно (например, включение многих восьмеричных защелок,

Ну, я ничего не знаю обо всех новых языках или о том, как сейчас на современных ПК, но я могу рассказать вам, как это было в старые времена, когда я делал компьютеры с чипами.

Все средства I / O Mapping и Memory отображают в простых терминах, если вы взяли пример с лампочками для какого-то торжества и проводили провода к каждому и называли лампочки Местами памяти (т.е. лампочки представляют память в RAM, либо включено или выключено, и если вы выберете местоположение 0, вы получите провод 0, местоположение 1, провод 1, провод 2, провод 2 и т. д.), если вы добавили еще несколько проводов, например, один провод - это звонок, то это конкретное местоположение не является памятью. это устройство, которое вы выводите, используя команду OUT, чтобы оно звонило. Но он рассматривается как область памяти с точки зрения компьютера, потому что он точно так же подключается к MPU. Если был добавлен другой провод, которым был внешний выключатель, это устройство ввода-вывода, которое будет инструкцией IN для ПК. Так что это называется I / O Mapped I / O.

Теперь на компьютерах провода на шинах представляют собой адресные линии или линии данных, НО они в двоичном виде, то есть с 2 проводами вы можете иметь 00 01 10 11, т.е. 4 комбинации 2 ^ 2, то есть с 8 линиями 2 ^ 8 = 256 возможностей 20 строк 2 ^ 20 = 1048576 с 30 линиями 2 ^ 30 = 1073741824 (1 гига) возможностей с 30 линиями. Вот почему он называется MAPPED, а не просто говорит о вводе-выводе и памяти, они говорят о сопоставлении ввода-вывода и отображении памяти, потому что вы отображаете провода как комбинацию и двоичное кодирование их. Так что, если, скажем, у вас было 2 провода, 4 комбинации, они не могут быть просто подключены к лампам (не говоря уже об усилении тока, необходимом для крошечных напряжений от MPU, и предотвращении тока обратной связи), но 2 провода имеют чтобы пройти через декодер (мы использовали 138 для декодирования 3 строк в 8 строк, 164 для декодирования 4 двоичных строк в 16 строк. После прохождения через декодер эти 2 строки, например, A0 и A1 (адрес 0 и адрес 1 (ЛИНИИ)), становятся 4 линиями (вкл или выкл) для конкретной лампы, которую вы ведете (в случае на компьютере, ПАМЯТЬ), но в некоторых случаях эти местоположения вместо этого выбирают какое-либо устройство ввода / вывода и говорят вместо этого «использовать меня», то есть, как и в случае с памятью, когда данные найдены, данные затем передаются в одну или другую сторону (используя умную логику трех состояний для отключения напряжения в пути). каждый раз) на линиях шины данных D0..7 или D0..31 или любого другого размера, данные на компьютере (у вас есть 2-битный, 4-битный, 8-битный, 16-битный, 32-битный, 64-битный, 128-битный, 256-битный, компьютер, что угодно компьютер, который вы строите). Таким образом, данные естественным образом поступают в или из линий данных в память или на устройство ввода-вывода (если оно отображено в памяти), но ЭТО НЕ СЛЕДУЕТ смешивать с инструкциями IN / OUT, THIS IN и OUT означают из некоторого ДРУГОГО блока памяти ввода-вывода, специального блока памяти ввода-вывода внутри MPU, назначенного специально только для ввода-вывода, то есть (не сопоставленного с памятью), это пространство ввода-вывода, которое вы не всегда получаете на некоторых микропроцессорах, например, я не думаю, что у нас это было на 6502, но у нас это было на z80. Более художественные чипы используют только отображение памяти, например, в игровых приставках и т. Д., Более разумные, но неинтересные (оставшиеся в книге) чипы также используются для ввода-вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. е. (не отображена память), это пространство ввода / вывода, которое вы не всегда получаете на некоторых микропроцессорах, например, я не думаю, что оно было у нас на 6502, но у нас оно было на z80. Более художественные чипы используют только отображение памяти, например, в игровых приставках и т. Д., Более разумные, но неинтересные (оставшиеся в книге) чипы также используются для ввода-вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. е. (не отображена память), это пространство ввода / вывода, которое вы не всегда получаете на некоторых микропроцессорах, например, я не думаю, что оно было у нас на 6502, но у нас оно было на z80. Более художественные чипы используют только отображение памяти, например, в игровых приставках и т. Д., Более разумные, но неинтересные (оставшиеся в книге) чипы также используются для ввода-вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. более разумные, но неинтересные (оставшиеся в книге) чипы также используют пространство ввода / вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. более разумные, но неинтересные (оставшиеся в книге) чипы также используют пространство ввода / вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT.

Теперь, если вместо того, чтобы добавить два провода, если вы фактически заменили два провода, которые изначально были на лампах, взяли некоторые из этих ламп и заменили их другими вещами, например колоколом на одном и переключателем на другом, на них теперь нет ссылок (выбрано ) с инструкциями IN и OUT соответственно, на них ссылаются, обращаясь к той конкретной области памяти, которая выбирает те провода (которые были первоначально лампочками). Так что это ввод-вывод с отображением в память.

Ввод / вывод с отображением в памяти означает, что фактическая адресная шина, которая обычно поступает в память (ОЗУ), также подключена к ДРУГИМ декодерам (логическим декодерам), и когда она распознает конкретную двоичную комбинацию сигналов адреса, она выдает высокий выходной (например, если у вас была нагрузка, а не ворота, и вы сказали, что если это, а не то и так, с использованием выводов A0..A20 или любого другого размера вашей адресной шины), то этот высокий сигнал ВКЛЮЧАЕТ защелку, (для конкретного устройства, такого как последовательный порт, параллельный порт), эта защелка затем передает данные по шине данных через устройство ввода-вывода. Это для записи на устройство ввода-вывода. Считывание работает наоборот, устройство ввода-вывода передает данные обратно, и, если я правильно помню, оно отправляет точно такую ​​же комбинацию кодов адреса в адресные строки.

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

Вы буквально ПРОВОДИТЕ I / O к адресным строкам. Следовательно, ввод-вывод эффективно отображается в пространстве памяти, как если бы это была память. Но другая защелка не позволяет адресным контактам одновременно получать доступ к оперативной памяти, поэтому вы не получаете напряжения двух адресов или источников данных на одной линии, которые могут повредить микросхемы.

С инструкцией IN и OUT мы сделали это 40 лет назад на чипе z80. Это относится к особым случаям, когда микросхема фактически имеет дело с самим вводом / выводом другим способом, то есть она не отображена в памяти. (т.е. с отображенной памятью вы просто читаете или записываете в область памяти, но с IN и OUT вы уже сообщаете CPU, что это сигнал ввода-вывода, а не память). Таким образом, с инструкцией IN / OUT, это имеет свое собственное адресное пространство ввода / вывода (которое является дополнительным для памяти оперативной памяти), этот оперативный модуль ввода / вывода, как кажется, имеет набор адресов точно такой же, за исключением того, что вы напрямую получаете доступ к устройству через присоединение декодера к этим адресам ввода / вывода, и вы не получаете доступ к устройству ввода / вывода со стандартных выводов адреса, это для инструкции IN / OUT.

которые для этого случая лучше всего передавать как строки кодов ASCII для букв и цифр. Эти команды точно такие же, как если бы вы использовали инструкции IN и OUT в цикле, где count - это длина строки.

Если вы обращаетесь, например, к динамику ПК, вы просто будете передавать один фрагмент данных за раз, используя OUT.

Если бы вы читали с параллельного порта, вы бы выполняли IN и использовали код для адреса ввода-вывода порта. Записывая его, например, чтобы управлять старыми принтерами или робототехникой с помощью электронных сигналов, вы будете использовать команду OUT. Параллельный порт и последовательный порт (старый RS232) являются типичными портами, которые использовались. RS232 - это последовательные данные, только один бит может входить или выходить, поэтому, если вы читаете с rs232, у вас будет только 1 бит соответствующего байта, такой же, как при выводе. Максимальная скорость передачи составляет около 17 кГц для rs232, но они часто использовались для управления электроникой. В те времена я использовал для построения схем rs232, например, для считывания напряжений или управления микроконтроллерами PIC. Каждый порт называется, например, COM1 COM2 COM3 COM4, ​​и они имеют адреса ввода-вывода. Я не уверен, что под рукой, но они похожи, например, 3F8h 378h (h = шестнадцатеричный адрес)

Я не уверен насчет современных портов, но если вы выполняете запись на USB, скорее всего это будет ввод-вывод с отображением в памяти для большей скорости.

Порт клавиатуры PS / 2, я думаю, что для чтения данных с клавиатуры используется инструкция IN. Это заменяет старый RS232, но я полагаю, что у него немного другая спецификация.

Дисковод обычно отображался в памяти, по-видимому, так и сейчас, то есть вы не управляете диском с инструкциями ввода / вывода, они будут слишком медленными. Но порты все равно медленные, поэтому это не имеет значения, например, принтер работает медленнее, чем требуется скорость передачи данных, по сравнению с потрясающей, например, 200 мегабайт / секунду, требуемой от жесткого диска. Динамик, ему нужна только частота звука около 10 или 20, скажем, 20 кГц было бы достаточно для зуммера, следовательно, это ввод / вывод. Медленные вещи используют I / O, инструкции IN / OUT. Следовательно, вероятно, USB теперь подключен к памяти, вам придется проверить его.

Лучший способ понять это так. На старых компьютерах еще в 80-х годах иногда вы хотели управлять каким-то устройством, которое вы создали, и не имели никаких спецификаций для выходных портов (так как в те дни производитель скрывал это, чтобы некоторые компании, например, компании по производству джойстиков и картриджей) могли продвигаться вперед в рынок по какой-то коммерческой сделке). Вам нужно было открыть компьютер и буквально припаять провода к некоторым точкам на адресной шине, например, вы припаяли три провода к некоторым точкам в цепи на безопасном расстоянии (чтобы не повредить микросхему нагревом), те точки, соединенные схемой печатной платы, например, с выводами A15, A7 и A1 на микропроцессоре. И вам, как правило, нужно было бы подключить линию MREQ (строку запроса памяти и / или линию RD / WR, чтобы сделать более точный сигнал, и добавить это в логику «или нет», но если бы вы были умны, вы могли бы просто сделать это с адресными линиями) А затем вы подключили эти три провода + этот дополнительный сигнал типа Ready (например, линия MREQ RD или WR, чтобы дать какой-нибудь активный низкий или высокий уровень (который потребовал бы возможного дополнительного НЕ вентиль здесь), чтобы сказать, что ДАННЫЕ готовы к линии СЕЙЧАС) через 4 входа И вентиль, который дал выход на светодиод через резистор 200 Ом, у вас есть собственная память, сопоставленная высокоскоростным вводом / выводом в светодиод , который можно защелкнуть через защелку SR или защелку типа D, чтобы сохранить ее в 1-битной памяти на внешней плате. Здесь 15 - это строка 32 КБ, 7 - это строка 64, 1 - это строка 2 (двоичный код работает в степени 2, поэтому А1 равен 2 ^ 1, А7 равен 2 ^ 7 и А15 равен 2 ^ 15), поэтому если вы адресуемое местоположение 32768 + 64 + 2 = 32834 = F041 в шестнадцатеричном виде, используя LDA или STA или LD на старых MPU в ассемблере, вы должны вывести на этот светодиод, это было бы ярко, если бы резистор был, скажем, около 100 Ом. Таким образом, вы выполнили ввод-вывод с отображением в память, который настолько прост, насколько это возможно, вы можете сделать это сегодня, припаяв к тем же адресным строкам mpu. Но вы бы не сделали этого сейчас из-за деликатности схем. Но вы также можете присоединиться к линиям данных D0..7 (в прежние времена) или, скажем, d0..31 теперь для 32-битных на старом 486 ПК. Затем, если вы обратились к этому месту в машинном коде, загрузив аккумулятор со значением 8 (mov ax, 8 в настоящее время) или сохранив это значение аккумулятора в адресном месте (mov F041h, аккумулятор ax, вы бы ДАЖЕ получили сегодня, что привело к приходу Обратите внимание, что 8 в примере - это то, что находится на шине данных, в данном конкретном случае мы не передаем данные, мы просто включаем конкретное устройство (светодиод включен, если мы выбрали устройство ТА, здесь просто светодиод), таким образом, в этом примере не имеет значения, какое число у нас есть с этой инструкцией MOV ax, 8, это может быть, например, mov ax, 243, и мы все равно включили бы светодиод на линии F041h, когда затем выполняем mov F041h, так как так как мы используем один и тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. В соответствии с инструкцией 8 это может быть, например, mov ax, 243, и мы все равно включили бы светодиод на линии F041h, когда затем выполняем mov F041h, так как мы используем тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. В соответствии с инструкцией 8 это может быть, например, mov ax, 243, и мы все равно включили бы светодиод на линии F041h, когда затем выполняем mov F041h, так как мы используем тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. так как мы используем один и тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. так как мы используем один и тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. 11 - 3, 1000 - F, а 0100 - 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. 11 - 3, 1000 - F, а 0100 - 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой.

На фиксаторе это активная точка E Enable или активная активная выходная мощность низкого уровня. Т.е. в описанном выше примере мы используем адреса для выбора (путем декодирования) КАКОГО устройства ввода / вывода, которое мы хотим использовать (т. Е. В примере загорается светодиод, если выбрано это устройство ввода / вывода. Так что это линия включения Затем, когда устройство ввода-вывода выбрано, данные передаются из шины данных (D0..7 в старые времена или пример D0..63 для 64-битного компьютера) через восьмеричные защелки 373 в старом дни, это триггеры D-типа, которые хранят данные внутри триггеров. При активном высоком фронте тактовых импульсов данные проходят и сохраняются. Этот фронт тактового импульса будет поступать из сигнала «DATA RDY» в сигнале данных у него есть разные имена, я не знаю, как это называется сейчас, поэтому для 64-битных у нас есть 8 восьмеричных защелок. И они используют двунаправленные защелки для управления данными в любом случае или в трех состояниях, так что, когда устройство ввода-вывода не используется, линии данных находятся в состоянии высокого импеданса. Таким образом, поэтому вы выбираете устройство ввода-вывода с комбинацией в адресных строках, это число, например, 3f8h в OUT 3F8h, 7, а данные, здесь в примере 7, это то, что передается по линиям данных, в По команде OUT данные передаются OUT в защелку данных и выводятся на устройство ввода-вывода. Если бы у вас был IN, вы бы выполняли команду, например, IN 3f8h, 800h, (я ожидаю, но я не знаю синтаксис ассемблера x86), я имею в виду, что для IN вы вводите данные из линии данных (после выбора адреса, например, здесь 3f7h, который выбирает устройство ввода / вывода), эти данные поступают с устройства ввода / вывода, через триггеры D-типа в защелке данных (по одному на каждый бит линий шины данных) и вводится в контакты D0..7 или (D0..63 на современных ПК) на блоке микропроцессора MPU ). В этом примере я поместил IN 3f8h, 800h, чтобы показать, что как только данные поступают, они сохраняются в адресе 800h. Синтаксис x86, я думаю, отличается, вы должны будете, вероятно, сделать в 3f8h, ну или что-то подобное, то есть в регистр сначала с поступающими данными, затем вы будете перемещать 800h, ах, то есть перемещать данные в память расположение в ОЗУ, (если вы хотите сохранить его) или сделать что-то еще с помощью ах и т. д. ах - это примерный регистр, это может быть любой, al, bh, bl и т. д., но проверьте синтаксис, каждая система на ассемблере немного отличается, я не эксперт по x86. Опять же, я использую 3f8h в качестве примера адреса ввода / вывода, есть сотни,

Принимая во внимание, что когда вы обращаетесь к памяти (ОЗУ, например, 64-байтовые статические оперативные памяти и динамические ОЗУ в 70-х годах, 8 КБ RAM и DRAM в 80-х годах, строки SIMMS имеют по несколько мегабайт каждая (модуль памяти в одну строку) в 90-х годах, и теперь в форме модулей DDR, содержащих модули DIMM, модули памяти с двумя последовательными линиями, я не проверял, но последние, вероятно, каждый, несомненно, имеют по несколько гигабайт на каждый маленький чип), если это не адрес ввода-вывода (очень немногие адреса являются адресами ввода-вывода, в настоящее время память в миллионах или более раз находится в адресном пространстве, чем ввод-вывод на современном компьютере), вы все равно используете те же инструкции чтения-записи данных в память, но вы не управляя некоторыми внешними логическими схемами, которые ищут эти биты, вместо этого эти контакты адреса и данных подключаются непосредственно к микросхемам ОЗУ.

В машинном коде адреса ввода / вывода и адресация памяти выглядят одинаково, как будто они оба являются обращениями к памяти, но то, что происходит физически, в реальной электронной схеме полностью отличается.

Кристин
источник