Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1




НазваниеКонспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1
страница41/41
Дата публикации03.03.2013
Размер5.22 Mb.
ТипКонспект
uchebilka.ru > Информатика > Конспект
1   ...   33   34   35   36   37   38   39   40   41

Листинг 18. Изменение порядка следования элементов массива

.686

.model flat

.ХММ

option casemap:none

.data

res DW 8 DUP (0)

.code

_pshuf_lh_ex proc

push EBP

mov EBP. ESP

mov ESI. dword ptr [EBP+8]

lea EDI. res

movdqu XMMO. [ESI]

pslldq XMMO. 8

movdqu XMM1. [ESI]

psrldq XMM1. 8

paddw XMM1. XMMO

pshuflw XMM1. XMM1. lBh

pshufhw XMM1. XMM1. lBh

movdqu [EDI]. XMM1

pop EBP

lea EAX. res

ret

_pshuf_lh_ex endp

end

Проанализируем программный код процедуры. В качестве входного парамет­ра процедура принимает адрес массива 16-разрядных чисел, который помещается в регистр ESI. В регистре ЕАХ процедура возвращает адрес массива res, в котором будет храниться результат перестановки элементов исходного массива.

Предположим для упрощения, что исходный массив (массив а,) содержит целочисленные значения аг0-аг7, показанные на рис. 13.


Рис. 13. Содержимое элементов массива аr

128-разрядный элемент массива а, в регистр ХММО помещает команда
movdqu XMMO. [ESI]

Замечу, что эта команда не требует выравнивания адреса операнда по 16-бай­товой границе. Следующая за ней команда выполняет сдвиг содержимого регист­ра ХММО на 8 байт влево:
pslldq ХММО. 8
После выполнения этой операции регистр ХММО будет содержать значение, по­казанное на рис.

Рис. Содержимое регистра ХММО после выполнения команды pslldq

Далее воспользумся регистром ХММ1. После того как будут выполнены следую­щие команды, регистр ХММ1 будет содержать значение, показанное на рис. 15:

Рис. 15. Содержимое регистра ХММ1 после выполнения команды psrldq

Затем выполняем операцию сложения упакованных целых чисел командой
paddw XMM1. ХММО

Содержимое регистра-приемника ХММ1 после этой операции будет таким, как показано на рис. 16.



Рис. 16. Содержимое регистра ХММ1 после выполнения команды paddw

Как видно из рис. 16, старшие 4 слова регистра ХММ1 содержат младшие сло­ва массива а,, а младшие 4 слова регистра — старшие слова а,. Следующие две ко­манды располагают элементы регистра ХММ1 в нужном порядке:
pshuflw XMM1. ХММ1. lBh

pshufhw XMM1. XMM1. lBh
Рисунок 17 иллюстрирует работу одной из этих команд:
pshuflw XMM1. ХММ1. lBh
После выполнения этих двух команд в регистре ХММ1 будет находиться после­довательность чисел, представленная рис. 18.

К этому моменту регистр ХММ1 содержит элементы массива а,, расположенные в обратном порядке. Теперь остается сохранить результат в массиве res (команда movdqu [EDI]. XMM1) и передать адрес этого массива в вызывающую программу (ко­манда lea EAX. res).
pshuflwXMM1.XMM1.1Bh До операции:



После операции:



Рис. 17. Содержимое регистра ХММ1 после выполнения команды pshuflw

127 О

0

1

2

3

4

5

6

7


Рис. 18. Содержимое регистра ХММ1 после выполнения всех преобразований

Работоспособность процедуры легко проверить при помощи программы на Visual C++ .NET (листинг 19).
Листинг 19. Демонстрационная программа для процедуры иэ листинга 18

#include

extern "С" short int* pshufjh_ex(short int* al):

1nt maln(void)

{

_declspec(align(16)) short int al[8] - { 0. 1. 2. 3. 4. 5. 6. 7 }:

short int* pal - pshuf_lh_ex(al):

printfCPSHUFHW PSHUFLW exampleAn"):

for (int il - 0: 11 < 8: 11++)

{

printfC'fcd ". *pal++):

}

return 0;

}

В этой программе al — массив 16-разрядных целых чисел со знаком (short int). Процедура pshuf_lh_ex объявлена с директивой extern и в качестве параметра принимает указатель на массив 16-разрядных целых чисел (short int*), а возвра­щает адрес массива, в котором хранятся результаты (short int*). Программа вы­водит на экран такой результат:
PSHUFHW PSHUFLW example: 7 6 5 4 3 2 10
К группе команд распаковки относятся команды, которые мнемонически можно обозначить как punpckh и punpckl. С помощью этих команд проводится рас­паковка и перестановка старших (младших) частей операнда-источника и опе­ранда-приемника. При этом младшие (старшие) части операндов игнорируются.

В качестве операндов-источников могут выступать ХММ-регистры или 128-раз­рядные ячейки памяти, в качестве операндов-приемников — только ХММ-реги­стры. К этим командам относятся:

  • punpckhbw — распаковка старших байтов операнда-источника и операнда-при­емника в старшие и младшие байты слов операнда-приемника соответст­венно;

  • punpck 1 bw — распаковка младших байтов операнда-источника и операнда-при­емника в старшие и младшие байты слов операнда-приемника соответст­венно;

  • punpckhwd — распаковка старших слов операнда-источника и операнда-при­емника в старшие и младшие слова двойных слов операнда-приемника со­ответственно;

  • punpcklwd — распаковка младших слов операнда-источника и операнда-при­емника в старшие и младшие слова двойных слов операнда-приемника со­ответственно;

  • punpckhdq — распаковка старших двойных слов операнда-источника и опе­ранда-приемника в старшие и младшие двойные слова учетверенных слов операнда-приемника соответственно;

  • punpckldq — распаковка младших двойных слов операнда-источника и опе­ранда-приемника в старшие и младшие двойные слова учетверенных слов операнда-приемника соответственно;

  • punpckhqdq — распаковка старших учетверенных слов операнда-источника и операнда-приемника в старшие и младшие учетверенные слова двойных учетверенных слов операнда-приемника соответственно;

  • punpck lqdq — распаковка младших учетверенных слов операнда-источника и операнда-приемника в старшие и младшие учетверенные слова двойных учетверенных слов операнда-приемника соответственно.

На этом рассмотрение 88Е2-расширения можно закончить. Мы познакомились с большинством команд и способами их применения в программах на ассемблере, хотя эта тема очень обширна и ей посвящены многочисленные публикации. Основным источником информации по этим вопросам является документация фирмы Intel, в которой технология SSE2 описывается более подробно.
1   ...   33   34   35   36   37   38   39   40   41

Похожие:

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций для студентов заочной формы обучения направления 080201 (Информатика)
Предлагаемый конспект лекций представляет собой пособие по предмету “Теория информации”, который читается в Сумском государственном...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций 2007 Экология. Конспект лекций. Для студентов специальностей...
Экология. Конспект лекций. Для студентов специальностей 080201 «Информатика», 090220 «Оборудование химических производств и предприятий...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине информационные и телекоммуникационные...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине “
«Компьютерная инженерия», специальности 091501 «Компьютерные сети и системы», 091502 «Системное программирование»

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по курсу Выбранные вопросы информатики (часть 2)...
Точно так же как художник может выбирать для рисования различные инструменты, программист, создающий аплет Java, может выбирать различные...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине “Статистика в машиностроении ” для студентов специальности
Конспект лекций предназначен для самостоятельного изучения студентами теоретической части курса “ Статистика в машиностроении ” (для...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине “ основы защиты информации” для направления...
Министерство образования и науки украины восточноукраинский государственный университеТ

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по курсу Начертательная геометрия
Конспект лекций по курсу начертательная геометрия (для студентов заочной формы обучения всех специальностей академии). Сост. Лусь...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций и методические указания к выполнению контрольной работы к изучению курса
Конспект лекций и методические указания к выполнению контрольной работы по курсу “Проектирование специальных станочных и контрольных...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по курсу «Организация производства»
Конспект лекций по курсу «Организация производства» (для студентов и слушателей заочной формы обучения фпоизо специальностей 050100...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<