Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11653
Последний выпуск: 19.06.2015

СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0


Оглавление

                             Обмен данными
-----------------------------------------------------------------

     Выполнять обмен содержимого двух операндов  позволяет  инст-
рукция XCHG. Это предоставляет удобный способ выполнять операцию,
которая в противном случае потребовала бы трех инструкций. Напри-
мер, инструкция:

           xchg   ax,dx

выполняет обмен содержимого AX и DX, что эквивалентно  выполнению
инструкций:

           .
           .
           .
           push  ax
           mov   ax,dx
           pop   dx
           .
           .
           .


                              Ввод-вывод
-----------------------------------------------------------------

     До сих пор мы обсуждали перемещение данных между  константа-
ми,  регистрами  и адресным пространством процессора 8086. Как вы
можете вспомнить, в процессоре 8086 имеется также второе, незави-
симое адресное пространство, которое называется пространством ад-
ресов ввода-вывода. В общем случае в качестве каналов  управления
и обмена данными таких устройств, как дисководы, дисплейные адап-
теры, принтеры и клавиатура, могут использоваться  65536  адресов
ввода-вывода или портов.

     Большинство инструкций процессора 8086,  включая  инструкцию
MOV, имеют доступ только к операндам в пространстве адресов памя-
ти. Обращаться к портам ввода-вывода могут только две  инструкции
- IN и OUT.

     Инструкция IN копирует содержимое из указанного  порта  вво-
да-вывода в регистр AL или AX. Адрес порта ввода-вывода, указыва-
емый в качестве источника, можно выбрать одним из двух  способов.
Если адрес порта меньше 256 (100h), вы можете указать его в инст-
рукции, например:

          in   al,41h

     Эта инструкция копирует байт из порта ввода-вывода 41h в ре-
гистр AL.

     При втором способе вы можете использовать для ссылки на порт
ввода-вывода, из которого нужно выполнить чтение, регистр DX:

          .
          .
          .
          mov   dx,41h
          in    al,dx
          .
          .
          .

     Для чего регистр DX используется в качестве указателя  порта
ввода-вывода?  Во-первых, если адрес порта ввода-вывода превышает
255, вы должны использовать DX. Во-вторых, использование регистра
DX позволяет при адресации к портам ввода-вывода получить большую
гибкость. Например, указатель на порт ввода-вывода можно передать
подпрограмме, загрузив его в регистр DX.

     Пусть вас не введет в заблуждение синтаксис инструкции IN  -
регистры  AL и AX являются единственно возможными операндами-при-
емниками. Аналогично, единственными допустимыми операндами-источ-
никами являются регистр DX  и  значение-константа,  меньшая  255.
Поэтому,  как  бы вам этого ни хотелось,  использовать инструкции
типа:

          in   bh,si

недопустимо.

     Инструкция OUT в точности эквивалентна инструкции IN, только
операндом-источником является регистр AL или AX, а порт ввода-вы-
вода, на который указывает регистр DX  или  постоянное  значение,
меньшее  256,  является операндом-приемником. Например, следующие
инструкции устанавливают порт ввода-вывода 3B4h в значение 0Fh:

          .
          .
          .
          mov   dx,3b4h
          mov   al,0fh
          out   dx,al
          .
          .
          .



Операции
-----------------------------------------------------------------

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

                        Арифметические операции
-----------------------------------------------------------------

     Даже если ваш компьютер РС и не тратит все время на работу с
числами  и  вычислительные  операции, вы знаете, что он может это
сделать, если вам это потребуется. Кроме того,  на компьютере  РС
может  работать множество электронных таблиц, программ баз данных
и инженерных пакетов. Если принять все это во внимание, то стано-
вится достаточно очевидным,  что компьютер IBM PС должен обладать
мощными вычислительными способностями.

     И это в самом деле так. Однако, хотя работающее на процессо-
ре 8086 программное обеспечение может прекрасно выполнять матема-
тические действия, сам процессор 8086 обеспечивает  на  удивление
простые арифметические возможности. В процессоре 8086 отсутствуют
инструкции для выполнения  арифметических  операций  с  плавающей
точкой  (арифметических  действий  с  такими  числами,  как 5.2 и
1.03Е17), не говоря уже о тригонометрических функциях. Эти опера-
ции выполняются арифметическим сопроцессором 8087. Это не означа-
ет, что программы, работающие на процессоре 8086, не могут выпол-
нять арифметические операции над числами с плавающей точкой. Ведь
электронные таблицы могут работать и на компьютерах РС без сопро-
цессора  8087. Однако программы процессора 8086 выполняют арифме-
тические операции над числами с плавающей точкой медленнее, с по-
мощью последовательности инструкций сдвигов, сложений и проверок,
а не с помощью одной быстро выполняющейся инструкции, как в  соп-
роцессоре 8087.

     Кроме того, в процессоре 8086 не предусмотрено  арифметичес-
ких  и логических инструкций, которые могут непосредственно рабо-
тать с операндами, размер которых превышает 16 бит.

     В чем же тогда заключается встроенная поддержка арифметичес-
ких операций процессора 8086? Процессор 8086 может выполнять 8- и
16-битовое сложение, вычитание, умножение и деление чисел со зна-
ком и без знака и имеет специальные быстрые инструкции для увели-
чения и уменьшения операндов.  В  процессоре  8086  предусмотрена
также поддержка операций сложения и вычитания значений, превышаю-
щих 16 бит,  хотя для операций с такими значениями требуется нес-
колько инструкций.

                         Сложение и вычитание
-----------------------------------------------------------------

     Во многих примерах программ мы уже встречались с инструкция-
ми  ADD  (сложение)  и SUB (вычитание). Их действие соответствует
названию. Инструкция ADD  выполняет  сложение  операнда-источника
(правого  операнда)  с содержимым операнда-приемника и записывает
результат в операнд-приемник. Инструкция SUB делает  тоже  самое,
только она вычитает операнд-источник из операнда-приемника.

     Например, инструкции:

             .
             .
             .
             .DATA
 BaseVal     DW     99
 Adjust      DW     10
             .
             .
             .
             .CODE
             .
             .
             .
             mov   dx,[BaseVal]
             add   dx,11
             sub   dx,[Adjust]
             .
             .
             .

сначала загружают значение, записанное в BaseVal, в  регистр  DX,
затем прибавляют к нему константу 11 (в результате в DX получает-
ся значение 110) и, наконец, вычитают из DX значение 10, записан-
ное  в  переменной  Adjust.  Полученное в результате значение 100
сохраняется в регистре DX.


Оглавление

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог