Чтение онлайн

на главную - закладки

Жанры

Искусство схемотехники. Том 2 (Изд.4-е)
Шрифт:

Она копирует 100 слов из массива, начинающегося с адреса 1000Н, в новый массив, начинающийся на 1 Кбайт (400Н), выше. Отметим явную загрузку указателя (в регистр ВХ, используемый для адресации) и счетчика цикла (в CL). Собственно массив слов должен быть пропущен через регистр (мы выбрали АХ), поскольку МП 8086 не поддерживает команды типа память-память (см. примечание к набору команд). В конце 100-го цикла CL = 0 и команда «перейти, если не нуль» (JNZ) более не выполняется. Этот пример будет работать[5], однако на практике вам, возможно, следует использовать более быстрые команды МП 8086-пересылки строк. Хорошим тоном в практическом программировании считается использование символьных имен

для обозначения массивов и их размеров вместо соответствующих констант, таких как 400Н и 1000Н.

Оператор CALL является вызовом подпрограммы; он подобен каманде перехода, за исключением того, что адрес возврата (адрес команды, следующей за командой CALL) заносится в стек. В конце подпрограммы вы выполняете оператор RET, который извлекает из стека его содержимое так, чтобы программа могла найти «обратную дорогу» (рис. 10.5).

Рис. 10.5. Работа команды CALL.

Три оператора STI, CLI и IRET имеют отношения к прерываниям, их работу мы проиллюстрируем вместе с примерами соответствующих электрических схем и ниже в этой главе. Наконец, команды ввода-вывода IN и OUT пересылают слово или байт между регистром А и соответствующим образом адресованным портом; подробнее об этом чуть позже.

10.04. Программный пример

Примеры, приведенные выше, наводят на мысль о тяге языка ассемблера к многословию; требуется множество маленьких шажков для того, чтобы сделать в общем-то простую вещь. Вот пример другого рода: допустим, вам необходимо инкрементировать число N, если оно равно другому числу — . Таким будет типичный крошечный фрагмент большой программы, и на языках высокого уровня такое действие будет выполняться единственной командой:

IF(n = = n) + + n; (Си)

IF(N. EQ. M) N = N + 1; (Фортран)

IF n = m then n: = n + 1; (Паскаль) и т. п.

На ассемблере МП 8086 эти действия будут выглядеть, как показано в программе 10.2.

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

Отметим, что ассемблеру надо указать на необходимость выделения некоторого объема памяти под переменные. Это делается с помощью ассемблерного псевдооператора DW (Define Word-определить слово) (этот оператор является псевдооператором, так как ему не соответствует никакой исполняемый код). Для того чтобы помечать команды, могут быть использованы уникальные символьные метки (например, NEXT). Команды обычно помечаются лишь в тех случаях, когда на них осуществляется переход (JNZ NEXT). Присваивая переменным понятные вам самому имена и вводя комментарии (отделенные точкой с запятой), вы облегчаете себе процесс программирования; эти рекомендации означают также, что у вас будет шанс несколькими неделями позже понять, что вы написали. Программирование на языке ассемблера может по-прежнему оставаться неприятным делом, однако часто на этом языке бывает необходимо написать короткую процедуру управления вводом-выводом, вызываемую из программы, написанной на языке высокого уровня. Программы на языке ассемблера работают быстрее, чем скомпилированные с языка высокого уровня, так что их часто используют там, где показатель скорости работы является решающим (например, во многократно выполняемых внутренних циклах численных вычислений большого объема).

Разработка языка программирования Си, обладающего большими возможностями, минимизировала количество тех случаев, когда вы должны использовать ассемблерные программы, тем самым расширив сферу применимости Си. В любом случае вам трудно будет понять, как отдельные узлы компьютера работают совместно, без уяснения существа ассемблерных команд ввод-вывода. Соответствие между мнемоникой языка ассемблера и исполняемыми машинными командами будет изучено ниже в разд. 11.03, где будет проиллюстрировано примерами программирования МП 68000.

Сигналы магистрали и ее функционирование

Типовая магистраль данных микроЭВМ имеет около 50-100 сигнальных линий, предназначенных для передачи данных, адресов и управляющих сигналов. IBM PC/XT — типичный микрокомпьютер, внутренняя магистраль которого состоит из 53 сигнальных линий и 8 линий, предназначенных для подачи питания и заземления. Для того чтобы не обрушивать на вас все эти сигналы сразу, мы будем приближаться к осмыслению полного набора сигналов, «надстраивая» магистраль, начав с такого количества сигнальных линий, какое необходимо для простейшего режима обмена данными (программируемого ввода-вывода) и добавляя по мере необходимости дополнительные сигнальные линии. Далее мы приведем несколько полезных примеров организации сопряжения тех или иных узлов с магистралью для того, чтобы всесторонне обсудить эту тему, не теряя интереса читателя.

10.05. Основные сигналы магистрали: данные, адрес, синхронизация

Для того чтобы переслать данные на магистраль с разделяемыми ресурсами (мультиплексируемую), вы должны уметь описать сами данные, приемник, а также момент, когда данные являются достоверными. Таким образом, по минимуму магистраль должна иметь шину данных (для передачи данных), адресную шину (для того чтобы идентифицировать устройство ввод-вывода или адрес в памяти) и несколько линий синхронизации, или стробирования (которые сообщают, когда передаются данные). Обычно в шине данных предусматривается столько же проводников, сколько разрядов в компьютерном слове, чтобы можно было сразу передать все слово. Однако в PC есть только 8 проводников шины данных (D0-D7); за один цикл передачи вы можете переслать байт, но для того, чтобы переслать 16-разрядное слово, необходимо выполнить два цикла передачи. Количество разрядов шины адреса определяет количество адресуемых устройств: если магистраль используется для обращения как к устройствам ввода-вывода, так и к памяти (стандартная ситуация), она должна иметь от 16 до 32 проводников адресной шины, что соответствует адресному пространству от 64 Кбайт до 4 Гбайт; магистраль, используемая только для ввода-вывода, может иметь от 8 до 16 разрядов адреса (от 256 до 64 К устройств ввода-вывода). [IBM PC общается по своей магистрали как с памятью, так и с устройствами ввода-вывода и имеет 20 адресных проводников (А0-А19), что соответствует 1 Мбайт адресного пространства.] И наконец, передаваемые данные синхронизуются стробирующими импульсами, передаваемыми по дополнительным проводникам магистрали. Для того чтобы реализовать описанную схему, существуют два пути: предусмотреть отдельные линии «чтение» и «запись» (с названиями, например, READ и WRITE) и возбуждать на той или другой из этих линий сигналы, синхронизирующие передачу данных; иметь одну линию стробирующих сигналов (STROBE) и одну линию READ/WRITE', причем импульс на линии STROBE синхронизирует передачу данных в направлении, которое определяется уровнем сигнала на линии READ/WRITE'. IBM PC использует схему (действующий уровень сигнала-низкий) с линиями «чтение/запись», названными IOR', IOW', MEMR' и MEMW'. Поскольку PC различает память и устройства ввода-вывода, то и линий этих четыре, по два строба (чтения и записи) на тот и другой тип ввода-вывода.

Сигналы данных, адреса и четыре строб-сигнала — это обычно все, что требуется для организации простейшего режима передачи данных. Однако для PC необходим еще один сигнал, названный выбор адреса (AEN — Adress ENable) для того, чтобы различать обычную передачу данных в устройстве ввода-вывода от режима передачи, называемого прямой доступ к памяти (ПДП) (DMA — Direct Memory Access). Режим ПДП мы рассмотрим в разд. 10.12, а сейчас вам достаточно знать, что AEN имеет низкий уровень для обычного ввода-вывода и высокий-для режима ПДП. Таким образом, сейчас у нас есть 33 сигнала магистрали: D0-D7, А0-А19, IOR', IOW', MEMR', MEMW' и AEN. Давайте посмотрим, как они работают.

10.06. Программируемый вывод данных ввод-вывод:

Простейший метод обмена данными по магистрали компьютера известен как программируемый ввод-вывод, это обозначает, что данные передаются с помощью операторов программы IN или OUT (направления передачи для IN и OUT входят в состав тех немногих правил, которых придерживаются все изготовители компьютеров: IN всегда означает направление к ЦП, a OUT всегда означает направление из ЦП). В целом процесс вывода данных (и записи в ОЗУ) предельно прост и логичен (рис. 10.6).

Поделиться:
Популярные книги

Темный Патриарх Светлого Рода 2

Лисицин Евгений
2. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 2

Ваше Сиятельство 7

Моури Эрли
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Ваше Сиятельство 7

Кукловод

Злобин Михаил
2. О чем молчат могилы
Фантастика:
боевая фантастика
8.50
рейтинг книги
Кукловод

Бестужев. Служба Государевой Безопасности. Книга вторая

Измайлов Сергей
2. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга вторая

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Подпольная империя

Ромов Дмитрий
4. Цеховик
Фантастика:
попаданцы
альтернативная история
6.60
рейтинг книги
Подпольная империя

Сиротка 4

Первухин Андрей Евгеньевич
4. Сиротка
Фантастика:
фэнтези
попаданцы
6.00
рейтинг книги
Сиротка 4

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Назад в СССР: 1984

Гаусс Максим
1. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Назад в СССР: 1984

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Вечная Война. Книга V

Винокуров Юрий
5. Вечная Война
Фантастика:
юмористическая фантастика
космическая фантастика
7.29
рейтинг книги
Вечная Война. Книга V