Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Опции компоновщика (редактора связей) TLINK



/x Не создавать файл карты (map)
/m Создать файл карты
/s То же, что /m, но дополнительно в файл карты включается информация о сегментах (адрес, длина в байтах, класс, имя сегмента и т. д.)
/l Создать раздел в файле карты с номерами строк
/n Игнорировать библиотеки, указываемые другими компиляторами
/c Различать строчные и прописные буквы в идентификаторах (в том числе и внешних)
/v Включить отладочную информацию в выполняемый файл
/3 Поддержка 32-битного кода
/d Предупреждать о дублировании символов в компонуемых библиотеках
/t Создать файл типа.com (по умолчанию.exe)

 

15. Лекция 12. Команды пересылки данных (1 пара)

Для удобства практического применения и отражения их специфики команды данной группы удобнее рассматривать в соответствии с их функциональным назначением, согласно которому их можно разбить на следующие группы команд:

  • пересылки данных общего назначения
  • ввода-вывода в порт
  • работы с адресами и указателями
  • преобразования данных
  • работы со стеком

Команды пересылки данных общего назначения

К этой группе относятся следующие команды:

mov < операнд назначения>, < операнд-источник>

xchg < операнд1>, < операнд2>

mov - это основная команда пересылки данных. Она реализует самые разнообразные варианты пересылки.

Отметим особенности применения этой команды:

  • командой mov нельзя осуществить пересылку из одной области памяти в другую. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.
  • К примеру, рассмотрим фрагмент программы для пересылки байта из ячейки fls в ячейку fld:
masmmodel small.datafls db 5fld db? .codestart: ... mov al, fls mov fld, al...end start
  • нельзя загрузить в сегментный регистр значение непосредственно из памяти. Поэтому для выполнения такой загрузки нужно использовать промежуточный объект. Это может быть регистр общего назначения или стек. Если вы посмотрите листинги 3.1 и 5.1, то увидите в начале сегмента кода две команды mov, выполняющие настройку сегментного регистра ds. При этом из-за невозможности загрузить впрямую в сегментный регистр значение адреса сегмента, содержащееся в предопределенной переменной @data, приходится использовать регистр общего назначения ax;
  • нельзя переслать содержимое одного сегментного регистра в другой сегментный регистр. Это объясняется тем, что в системе команд нет соответствующего кода операции. Но необходимость в таком действии часто возникает. Выполнить такую пересылку можно, используя в качестве промежуточных все те же регистры общего назначения. Вот пример инициализации регистра es значением из регистра ds:
mov ax, ds mov es, ax

· Но есть и другой, более красивый способ выполнения данной операции — использование стека и команд push и pop:

push ds; поместить значение регистра ds в стек pop es; записать в es число из стека
  • нельзя использовать сегментный регистр cs в качестве операнда назначения. Причина здесь простая. Дело в том, что в архитектуре микропроцессора пара cs: ip всегда содержит адрес команды, которая должна выполняться следующей. Изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо.

Для двунаправленной пересылки данных применяют команду xchg. Для этой операции можно, конечно, применить последовательность из нескольких команд mov, но из-за того, что операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchg. Естественно, что операнды должны иметь один тип. Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти. К примеру,

xchg ax, bx; обменять содержимое регистров ax и bx xchg ax, word ptr [si]; обменять содержимое регистра ax; и слова в памяти по адресу в [si]

Команды ввода-вывода в порт

На уроке 6 при обсуждении вопроса о том, где могут находиться операнды машинной команды, мы упоминали порт ввода- вывода.

Посмотрите на рис. 1. На нем показана сильно упрощенная, концептуальная схема управления оборудованием компьютера.

Рис. 1. Концептуальная схема управления оборудованием компьютера

Как видно из рис. 1, самым нижним уровнем является уровень BIOS, на котором работа с оборудованием ведется напрямую через порты. Тем самым реализуется концепция независимости от оборудования. При замене оборудования необходимо будет лишь подправить соответствующие функции BIOS, переориентировав их на новые адреса и логику работы портов.

Принципиально управлять устройствами напрямую через порты несложно. Сведения о номерах портов, их разрядности, формате управляющей информации приводятся в техническом описании устройства. Необходимо знать лишь конечную цель своих действий, алгоритм, в соответствии с которым работает конкретное устройство, и порядок программирования его портов. То есть, фактически, нужно знать, что и в какой последовательности нужно послать в порт (при записи в него) или считать из него (при чтении) и как следует трактовать эту информацию. Для этого достаточно всего двух команд, присутствующих в системе команд микропроцессора:

in аккумулятор, номер_порта — ввод в аккумулятор из порта с номером номер_порта;

out порт, аккумулятор — вывод содержимого аккумулятора в порт с номером номер_порта.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-28; Просмотров: 649; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.009 с.)
Главная | Случайная страница | Обратная связь