- •1.Способи адресації
- •3.Пряма адресація пам'яті. .
- •6. Сторінкова пам'ять.
- •7.Сегмента адресація.
- •8. Опосередкована адресація з масштабуванням
- •9.Адресація по базі з сувом.
- •10.Адресація по базі з індексуванням
- •11. Адресація по базі з індексуванням та масштабуванням
- •12.Вирівнювання даних та коду.
- •13. Регістри загального призначення
- •14. Сегментні регістри.
- •15.Індексні регістри.
- •16. Спеціальні регістри
- •17. Флаги ознак.
- •18. Регистры управления (Control Registers)
- •19.20. Стек, регітсри стека.
- •22. Флаг нуля zf
- •23. Флаг знака sf
- •25. Флаг четности.
- •26. Флаг полупереносу.
- •27. Флаг трассировки.
- •28. Флаг напрямку.
- •29. Флаг переривание.
- •35. Арифметические команды
- •36. Команди блочної обробки даних
- •37. Команды ввода и вывода
- •38. Команды управления флагами
- •39. Команда пересылки данных: возможности и ограничения
- •40. Команди керування
- •41. Стек математичного співпроцесора
- •42.Команди пересилки співпроцесора
- •43. Арифметические команды сопроцессора
- •46. Різновиди чисел
- •47. Способи округлення
- •48.Трансцендентні команди
- •49. Команди завантаження констант співпроцесора
- •50. Порівняння чисел з плаваючою комою
- •51. Структура жёсткого диска
- •58. Структура каталогов Linux
- •59. Структура ufs
- •60. Суперблок. Ufs
- •61. Индексный дескриптор ufs
- •62. Основні механізми передачі параметрів
- •63. Основні місця передачі параметрів
- •64. Вкладені обчислення
- •65. Різновиди комбінацій сегментів
- •66. Порядок завантаження сегментів, директиви
- •67. Оптимізація обчислень
- •68. Математична оптимізація
- •69. Алгоритмічна оптимізація
- •70 .Низькорівнева оптимізація
- •71. Основні методи алгоритмічної оптимізації
- •72. Основні рекомендації низького рівня
- •74. Особенности архитектуры процессоров Pentium Pro и Pentium II
- •76. Конвеєр fpu
- •77. Принципи роботи кешу
- •79. Регистры управления (Control Registers)
- •80. Індексні регістри дескрипторів
- •81. Віртуалізація пам’яті
- •82. Переривання, маскування та обробка.
- •84. Кеш з зворотнім записом
- •85. Кеш з відкладеним записом
- •86. Наскрізний кеш
- •87. Кеш читання
- •88. Повністю асоціативний кеш
- •91. Структура кешу
- •92. Теги, призначення
- •93. Конвеєри mmx та sse
36. Команди блочної обробки даних
Команда формирует результат, выполняя указанную арифметическую или логическую операцию с одним или двумя операндами.
Первый операнд - всегда регистр (Rn). Второй операнд может быть регистром с сдвигом (Rm), или 8-битной константой с циклическим сдвигом (Imm) (в зависимости от значения бита "I" в команде). Флаги CPSR могут оставаться без изменений (S = 0) или выставлены в зависимости от результата выполнения этой команды (S = 1). Некоторые операции в команде (ТЕСТ, TEQ, CMP, CMN) не записывают результат в регистр Rd. Они используются только для того, чтобы в зависимости от результата установить/сбросить флаги CPSR (только при S = 1). Команды и результаты их работы перечислены в табл. 7.
Флаги регистра CPSR
Все операции обработки данных разделяются на логические и арифметические. Логические операции (AND, EOR, ТЕSТ, TEQ, ORR, MOV, BIC, MVN) выполняют логические побитовые операции на всех битах операнда или операндов. Если бит команды "S" будет установлен (и Rd - это не R15, см. ниже), то состояние флага "V" в регистре CPSR не изменится; флаг переноса "C" будет установлен исходя из результата многорегистрового циклического сдвига (или останется без изменений, если операция изменения сдвига - LSL #0). Флаг "Z" будет установлен, только если результат - все нули, и флаг "N" будет установлен в зависимости от значения бита 31 результата операции.
Таблица 7. Команды обработки данных в режиме ARM
Мнемоника ассемблера |
Код |
Действие |
AND |
0000 |
операнд1 AND операнд2 |
EOR |
0001 |
операнд1 EOR операнд2 |
SUB |
0010 |
операнд1 - операнд2 |
RSB |
0011 |
операнд2 - операнд1 |
ADD |
0100 |
операнд1 + операнд2 |
ADC |
0101 |
операнд1 + операнд2 + перенос |
SBC |
0110 |
операнд1 - операнд2 + перенос - 1 |
RSC |
0111 |
операнд2 - операнд1 + перенос - 1 |
TST |
1000 |
как AND, но результат не будет записан |
TEQ |
1001 |
as EOR, но результат не будет записан |
CMP |
1010 |
as SUB, но результат не будет записан |
CMN |
1011 |
as ADD, но результат не будет записан |
ORR |
1100 |
операнд1 OR операнд2 |
MOV |
1101 |
операнд2 (операнд1 игнорируется) |
BIC |
1110 |
операнд1 AND NOT операнд2 (бит сброшен) |
MVN |
1111 |
NOT операнд2 (операнд1 игнорируется) |
37. Команды ввода и вывода
Для выполнения операций ввода и вывода микропроцессор 8088 имеет команды IN и OUT соответственно. Каждое устройство ввода-вывода IBM PC имеет один или больше встроенных регистров, с которыми могут работать эти команды. Каждое устройство ввода-вывода имеет адрес для каждого регистра в устройстве. Это адресное пространство отличается от адресного пространства памяти; всего существует 216, или 65536 адресов ввода-вывода, доступных микропроцессору 8088. В IBM PC 512 из этих адресов назначены системному каналу ввода-вывода и могут использоваться различными адаптерами. Другие 256 адресов используются на системной плате для управления подключенными туда устройствами ввода-вывода.
Команда IN пересылает данные из устройства ввода-вывода в регистр AL. Эта команда может указать адрес устройства ввода-вывода двумя различными способами. Если адрес устройства находится в пределах 0 - 255, он может содержаться в команде как непосредственное значение. Если адрес больше 255, команда сообщает это косвенно. В случае косвенной команды адрес устройства ввода-вывода содержится в регистре DX. Регистр DX может содержать адреса всех устройств ввода-вывода, включая те, номера которых меньше 256.
Аналогично работает команда OUT, за исключением того, что она записывает регистр AL в регистр устройства ввода-вывода. Адреса в команде OUT указываются так же, как и в команде IN.
Команды IN и OUT также могут пересылать слова в устройства ввода-вывода и из них. В случае работы со словами источником и приемником является регистр AX. Так как у микропроцессора 8088 однобайтовая внешняя шина, устройства ввода-вывода IBM PC работают только с байтами при любых операциях ввода-вывода. Это означает, что операции ввода-вывода слов не используются в персональной ЭВМ. Однако пословные операции ввода-вывода имеют смысл в системе с микропроцессором 8086, который имеет тот же набор команд.
В ПК передача информации между ЦП и внешними устройствами, как правило, осуществляется через порты. Порт - это некоторый регистр размером в байт или слово, причем этот регистр находится вне ЦП и не имеет никакого отношения к обычным регистрам типа AX, SI и т. п. Вообще-то все порты являются байтовыми, но два соседних порта рассматриваются как порт размером в слово. Порты нумеруются, их номера – от 0 до 0FFFFh. Таким образом, потенциально может быть 65536 портов, однако реально их значительно меньше (несколько десятков). С каждым внешним устройством связан свой порт или несколько портов, их номера заранее известны.
Как ЦП, так и внешнее устройство может записывать информацию в порт и может считывать из него. Со стороны ЦП (а точнее, той программы, которую он выполняет) эти операции осуществляются с помощью следующих машинных команд:
Чтение из порта (ввод): IN AL,n или IN AX,n
Запись в порт (вывод): OUT n,AL или OUT n,AX
По команде IN в регистр AL(AX) переносится содержимое порта с номером n, а команда OUT реализует обратное действие: в порт с номером n записывается содержимое регистра AL(AX).
Номер порта (n) в этих командах может быть задан двояко – либо явным числом от 0 до 255, либо регистром DX, значение которого и трактуется как номер порта. Например:
IN AL,97h ;AL:= порт 97h
MOV DX,836
OUT DX,AX ;порт 836:=AX
Первый вариант операнда n используется, когда номер порта небольшой и известен заранее, а второй вариант – когда номер порта может быть любым или когда он становится известным только во время счета программы.
Сценарий ввода-вывода через порты существенно зависит от специфики того внешнего устройства, с которым ведется обмен, но достаточно типичным является следующий сценарий.