Тема 4

4. Типове данни за IA-32 и Intel-64 архитектура: цели числа, указатели, низове, числа с плаваща запетая и пакетирани SIMD данни.


страницата се нуждае от дописване/преглеждане


<< Тема 3 | Тема 5 >>

Фундаментални типове данни

untitled1.JPG
Байт, дума, двойна дума, четворна дума и двойна четворна дума са фундаменталните типове данни. Байт е осем последователнии бита започващи от някой логически адрес. Битовете са номерирани от 0 до 7; нулевия бит е най-малко значимия бит.
Дума са два последователни байта започващи от някой адресиран байт. Така една дума съдържа 16 бита. Битовете на една дума са номерирани от 0 до 15; нулевия бит е най-малко значимия. Байтът съдържащ нулевия бит се нарича нисък байт(low byte); байтът съдържащ 15 бит се нарича висок байт(high byte).
untitled2.JPG
Всеки байт в думата има собствен адрес и по-малкия от адресите е адреса на думата. Байтът на този нисък адрес съдържа осемте най-малко значими бита на думата, докато байта на високия адрес съдържа осемте най-значими бита.
Двойна дума са две последователни думи започващи от който и да е байт адрес. Двкойна та дума така съдържа 32 бита. Битовете на двойната дума са номерирани от 0 до 31; нулевия бит е най-малко значимия бит. Думата съдържаща нулевия бит се нарича ниска дума(low word); думата съдържаща 31-вия бит се нарича висока дума (high word).
Всеки байт в двойната дума има свой адрес и най-малкият адрес от тези адреси е адресът на двойната дума. Байтът на този най-малък адрес съдържа осемте най-малко значими бита от двойната дума, докато байта на най-високия адрес съдържа осемте най-значими бита.
Аналогично можете да си представите образуването на четворни думи и двойни четворни думи…
Забележете, че думите не трябва да бъдат подравнени на четно-номерирани адреси и двойните думи не е необходимо да бъдат подравнени на адреси които се делят на четири. Това добавя максимална гъвкавост при структурите данни.
Независимо, че байтовете, думите, двойните думи, четворните думи и двойните четворни думи са фундаменталните типове от операнди, процесорът също поддържа и някой интерпретации на тези типове данни:

Integer

Знакова двоична числова стойност съдържаща се в 64-битова четворна дума, 32-битова двойна дума, 16-битова дума или 8-битов байт. Знаковия бит се намира в 7-я бит в един байт, 15-я бит в дума, 31-я бит в двойна дума и 63-я бит четворна дума. Този знаков бит има стойност нула за положителни и 1-ца за отрицателни числа. Нулата има положителен знак.

Unsigned integer

Беззнакова двоична числова стойност съдържаща се в 64-битова четворна дума, 32-битова двойна дума, 16-битова дума или 8-битов байт.

Floating point

Форматът с плаваща запетая се основава на представянето на числата в нормализирана форма като произведение от мантиса с основата повдигнато на степен (експонентна част). Нормализираното представяне означава в ляво от десетичната точка да има само едно ненулево число. Нормализирано представяне на десетични чесла е например 5.1567х 106 ; 1.23х1050 ; 2.54х10-28 . При двоичния формат с плаваща запетая принципът на представянето е същият, но основата е 2 вместо 10. Числото g се представя чрез следните зависимости:
g = (-1)s x M x 2E-127
Знаковият бит е (-1)s като S= 0 е за положителни и S=1 за отрицателни числа. Променливата Е е осембитово двоично число между 0 и 255. Променливата Е се намалява 127, което означава, че експонентата ще варира от 2-127 до 2128 . Мантисата М се формира от 23 бита като двоична дроб.
На фигурата по-долу е илюстрирано представянето на числата от 32 битовата разредност. Всичките 32 разреда са разделени на три отделни групи:
- битове 0 до 22 са за мантисата;
- осем бита от 23 до 30 формират експонентата;
най-старшият MSB бит 31 е знаков
Като пример десетичната дроб 5,783 означава 5+7/10+8/100+3/1000;а двоичното представяне на числото 1,0101 е 1+ 0/2+1/4+0/8+1/16.
При нормализираното представяне на двоичните числа единственото число наляво от препинателния знак e само 1 и не е нужно да бъде представяне.
untitled3.JPG
Ако всички битове от 0 до 22 са нулеви, M придобива стойноост 1.
Ако всички битове от 0 до 22 са 1, M придобива стойноост почти равна на 2 и точно 2 – 2-23.
Най-голямото число, което може да се представи е
Mmax= ± (2-2-23) x 2128 = ± 6.8x 1038 ,
а най-малкото Mmin= ± 1.0 x 2-127 =± 5.9x 10-39.
Прецизността при формата с плаваща запетая не е фиксирана. Тя е около десет милиона пъти по-малка ( 2-24 до 2-23) от стойността на числото. Това е ключовото предимство на формата с плаваща запетая. По-големите числа имат по-големи разлика между съседните стойности, докато при малките числа тази разлика намалява. Някои операции с плаваща запетая изискват по-дълго време за обработка, но са ръзработени алгоритми с помощта на които групи изчислителни процедури се извършват многократно по-бързо.
Диапазони на плаващата запетая
untitled4.JPG

Near Pointer

untitled5.JPG

32-битов логически адрес. Близък указател е отместването(offset-а) в сегмент. Близките указатели се използват или във flat или във сегментен модел на организация на паметта.

Far Pointer

48-битов логически адрес от два компонента: 16-битов сегментен селектор и 32-битово отместване. Далечните указатели се използват от програмистите само когато дизайнерите на системите изберат сегментен модел на организация.

Bit field

Последователност от битове. Битово поле може да започне от всяка позиция и всеки байт и може да съдържа до 32 бита.
untitled6.JPG

BCD

untitled7.JPG
Десетичните числа са специален вид на представяне на числова информация, в основата на който е заложен принципа за кодиране на всяка десетична цифра на числото като набор от четири бита. При това всеки байт на числото съдържа една или две десетични цифри в така наречения двоично-десетичен код (BCD — Binary-Coded Decimal). Микропроцесорът съхранява BCD-числата в два различни формата:
• опакован формат — в този формат всеки байт съдържа две десетични цифри. Десетичната цифра представлява двоичната стойност в диапазона от 0 до 9 с размер 4 бита. При което кодът на най-старшата цифра на числото заема старшите 4 бита. Следователно диапазонът на представене на десетичното опаковано число в един байт е от 00 до 99;
• неопакован формат — в този формат всеки байт съдържа една десетична цифра в четирите си младши бита. Старшите четири бита имат нулева стойност. Наричат се зона. Следователно диапазонът на представяне на десетичното неопаковано число в един байт е от 0 до 9.
Пример за представяне на BCD-числа:
untitled8.JPG

SIMD data types

MMX

ММХ технологията е разработена за да ускори мултимедийните програми и програмите за комуникация като включват нови инструкции и типове данни които позволяват на програмите да достигат ново ниво на производителност.
Широк спектър от софтуерни програми включително графични, MPEG, синтезация на музика, моделиране на снимки, игри и още, показват много общи, фундаментални характеристики:

  • малки integer типове данни (например: 8-битови пиксели, 16-битови audio samples)
  • малки, много повтарящи се цикли
  • чести умножения
  • сложни за изчисляване алгоритми
  • високо паралелни операции

ММХ технологията е разработена като множество от integer инструкции които могат да бъдат приложени към нуждите на голямо разнообразие от мултимедия. Основните точки на тази технология са:

  • Една инструкция, много информация(Single Instruction, Multiple Data (SIMD))
  • 57 нови инструкции
  • 8 64-битови ММХ регистри, наречени от 0 до 7
  • 4 нови типа данни

ММХ технологията въвежда четири нови типа данни: три пакетирани(bytes, words и doublewords, респективно с по 8, 16 и 32 бита) и нов 64-битов. Всеки елемент в пакетираните типове данни е отделен integer.
Четирите ММХ типа данни са:

  • Пакетиран байт(Packed byte) — 8 байта пакетирани в 64 бита
  • Пакетирана дума(Packed word) — 4 16-битови думи пакетирани в 64 бита
  • Пакетирана двойна дума(Packed doubleword) – 2 32-битови двойни думи пакетирани в 64 бита
  • Четворна дума(Quadword) – 64 бита
untitled.JPG
Като пример, информацията за пикселите обикновено се представя като 8-битови integer-и или байтове. С ММХ технологията осем от тези пиксели са пакетирани заедно в 64 бита и преместени в ММХ регистър; когато една ММХ инструкция се изпълнява, тя взима всички тези 8 пиксела наведнъж от ММХ регистъра, прилага операцията на всички тях паралелно и записва резултата отново в ММХ регистър.

XMM

Първият опит на Intel за SIMD архитектура, MMX, има два главни проблема: пре-използва съществуващи регистри за плаваща запетая, което прави невъзможно CPU да работи едновременно с плаваща запетая и SIMD данни и втория проблем - че работи само с integer.
SSE добавя осем нови 128-битови регистри наречени XMM0 до XMM7. AMD добавя още осем регистъра - от XMM8 до XMM15. Появява се и нов 32-битов control/status регистър, MXCSR. Регитрите от XMM8 до XMM15 са гостъпни само в 64-битов режим.

Типовете пакетирани данни за XMM :

  • четири 32-битови single-precision числа с плаваща запетая
  • два 64-битови double-precision числа с плаваща запетая
  • шестнадесет 8-битови байтове или символи
  • осем 16-битови short integer-и
  • четири 32-битови integer-и
  • два 64-битови integer-а
untitled209.JPG
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License