На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Адресуемая память intel 8086 , С какого адреса можно выполнять программу?
      Доброе утро. Сразу извиняюсь за то, что возможно не там создал тему.
      Так вышло, что мне надо написать эмулятор микропроцессора intel 8086. Начал читать разбираться и столкнулся со следующей, непонятной мне, ситуацией:
      Весь объем адресуемой памяти - 1Мбайт, адресное пространство, выделенное под порты ввода/вывода - 64Кбайт.
      То есть получается, что адресное пространство от 0 до 64*1024 используется для обмена данными со всякой периферией. Значит, первый адрес, с которого может выполнятся программа пользователя - 64*1024.
      Вопрос вот в чем: правильно ли я рассуждаю по этому поводу?
      И может есть у кого исходники или какие наработки по этой теме?

      Спасибо.
        btf
        Нет, неправильно. Это разные пространства. Они не пересекаются.
        Шина хотя и общая но имеются дополнительные контакт S2 который определяет откуда идёт чтение/запись.

        А вам программная эмуляция нужна или аппаратная?

        А так поищите в сети. Думаю найдёте полно эмуляторов. Для того же протуса видел статью что-то типа пишем эмулятор 8086.
        Сообщение отредактировано: Pavia -
          Цитата btf @
          То есть получается, что адресное пространство от 0 до 64*1024 используется для обмена данными со всякой периферией.
          Порты ввода-вывода могут быть объединены с памятью в конкретной системе, в процессоре они раздельные.
          Сообщение отредактировано: trainer -
            Цитата Pavia @
            btf
            Нет, неправильно. Это разные пространства. Они не пересекаются.
            Шина хотя и общая но имеются дополнительные контакт S2 который определяет откуда идёт чтение/запись.

            А вам программная эмуляция нужна или аппаратная?

            Можно поподробнее про контакт s2 и память?
            Адресное пространство у процессора, вроде как, одно и оно разделено на адреса портов ввода/вывода и на остальные адреса для пользовательской программы (не уверен, в правильности своих слов). Данные с внешних устройств могут записываться либо по этим адресам, либо в DX (тут я тоже совсем не уверен). Контакт S2 нужен для того, чтоб процессор знал, откуда пришли данные и закинул их по определенному адресу или нет?

            Помогите, пожалуйста, разобраться с портами ввода/вывода и адресным пространством. А то что - то не все понятно из материалов из интернета.

            Эмуляция нужная программная на языке высокого уровня.

            Добавлено
            Цитата trainer @
            в процессоре они раздельные

            То есть, адресное пространство процессора разделено на 2: одно от 0 до 64*1024, второе от 0 до (1024 - 64)*1024? Я имею в виду, что в каждом адресном пространстве адреса начинаются с 0
              http://fetweb.ju.edu.jo/staff/ee/mhawa/331/chapter8.pdf

              Добавлено
              Когда исполняется команда IN или OUT, процессор выполняет цикл чтения или записи порта ввода-вывода вместо соответствующего цикла памяти. Частью этого цикла является сброс вывода M/IO в минимальном режиме или выставление соответствующего кода на шине состояний S0-S2 в максимальном режиме.

              Добавлено
              Если я правильно помню
                Цитата
                Isolated Input/Output: In this scheme, the I/O devices are treated separate
                from memory (see Fig. 8-44). I/O ports are organized as bytes of data; the
                memory address space contains 1M consecutive byte addresses in the range
                00000h, through FFFFFh; and the I/O address space contains 64K consecutive
                byte addresses in the range 0000h through FFFFh.

                Судя по этому и по рисунку, у них (портов ввода\вывода и памяти под программы пользователей) все таки одно адресное пространство. Но вот как они разделаются - непонятно. Откуда процессор знает, какие из данных пришли извне, а какие пользователь ввел сам?
                И, например, если я в команду IN передам адрес, значение которого больше чем 64*1024 что процессор будет делать?
                  btf
                  Что же ты за Фома не верующий. Тебе 3 раза написали что разное.
                  Повторяю в четвёртый. Разные пространства и доступ к ним идёт через разные команды.

                  Цитата btf @
                  И, например, если я в команду IN передам адрес, значение которого больше чем 64*1024 что процессор будет делать?

                  Формат команд читай. Нет такой команды.

                  http://www.ccse.kfupm.edu.sa/~hazem/coe305/8086.pdf

                  Цитата btf @
                  Откуда процессор знает, какие из данных пришли извне, а какие пользователь ввел сам?

                  И то и то это внешние данные. Собственно для 8086 все данные внешние. О кроме тех что хранятся в кэше.

                  Пользователь нажимает на кнопку контролёр клавиатуры периодически опрашивает линии замкнута или разомкнута. Как только он увидел что есть изменения он сообщает контролёру на материнской плате. Тот в свою очередь выставляет сигнал прерывания. Контролёр прерывания получив прерывание выставляет прерывание на процессор. INTR
                  Процессор при переходе через границу команд проверяет наличие прерывания. Если есть прерывания то процессор начинает обработку прерывания. Передавая управление в обработчик прерывания где уже обработчик вызывает
                  in и out для управления и чтения кода от контролёров.

                  Собственно есть ещё DMA контролёр который может сам опрашивать другие контролёры и писать в ОЗУ материнской платы. Из ОЗУ процессор может периодически проверять наличие новых данных путем чтения MOV или любой другой командой которая работает с памятью.
                    Цитата btf @
                    Судя по этому и по рисунку, у них (портов ввода\вывода и памяти под программы пользователей) все таки одно адресное пространство. Но вот как они разделаются - непонятно.

                    Существуют команды обмена с памятью, и команды обмена с внешними устройствами.
                    После декодирования такой команды выдаётся некое слово состояния в системный контроллер.
                    Это внешняя микросхема. Системный контроллер декодирует слово состояния перед операцией.
                    После этого начинается операция чтения/записи, и системный контроллер выдаёт импульсы
                    чтения/записи на соотв. шину (провод). Фактически перенаправляя стробы чтения/записи
                    процессора на соотв. управляющий провод.
                    В результате происходит операция обмена либо с памятью, либо с внешним устройством.
                    Бывают ещё и другие состояния, декодируемые системным контроллером перед проведением
                    реальной операции. Например, операция чтения данных из контроллера прерываний
                    в процессе обработки прерывания.
                    ---
                    Шины адреса и данных - общие для всех операций.
                    Сообщение отредактировано: ЫукпШ -
                      Цитата Pavia @
                      Собственно для 8086 все данные внешние. О кроме тех что хранятся в кэше.
                      Вообще-то 8086 не имел кэша. Единственное, что у него было, это 6-байтовая (у 8088 - 4-байтовая) очередь предвыборки команд. Ну и набор регистров, естественно.
                        Цитата btf @
                        Судя по этому и по рисунку, у них (портов ввода\вывода и памяти под программы пользователей) все таки одно адресное пространство.
                        Как ты смог придти к такому выводу? У меня в компьютере по адресу 0 лежит объект и у тебя в компьютере по адресу 0 лежит объект - значит у наших компьютеров общая память?
                        В цитате же английским по белому написано:
                        Цитата
                        the I/O devices are treated separate from memory
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0299 ]   [ 15 queries used ]   [ Generated: 19.04.24, 04:06 GMT ]