Тема 2

Структурна схема на изчислителните системи. Начини за предаване на данни. Кодови таблици.


Твърди се, че тази статия покрива достоверно материала от лекциите. Ако забележите съществени разлики и/или пропуски, моля, редактирайте или уведомете някого, дето не го мързи :) .


Начин на работа на електронните блокове(ключове)

Първоначално за електронни ключове били използвани лампи, след това полупроводникови транзистори, после цифрови транзистори с 2 устойчиви състояния. С развитието на технологиите започват да се интегрират все повече транзистори в една полупроводникова пластина (a.k.a. чип, интегрална схема). В наши дни в един чип може да се интегрират милиони, та даже и милиарди ключове.

Интегралните схеми реално се състоят от различни транзистори. Повечето от тях са така наречените MOSFET (Metal-Oxide-Semiconductor Field-Effect Transistor), произведени по технологията MOS (metal oxide semiconductor). Става дума за това, че върху подложка от полупроводников силиций (Si) първо, чрез молекулярни методи - дифузия и йонна импликация, се вкарват примеси, чрез които се получават области с n- ("електронна") и p- (дупчеста) проводимост, а след това върху него се нанася тънък слой изолатор - силициев двуокис (SiO2), и метални изводи.

Схема на MOSFET транзистор:
MOS_transistor.PNG
Този транзистор е с преходи тип N-P-N, който вид е най-използван. Идеята е показана, не особено ясно за нашите цели, тук. Доколкото разбирам, първоначално между колектора и емитера ток не може да тече - ключът първоначално е в положение "изключен". При подаване на достатъчно голямо положително напрежение (потенциал) на базата, в p-областта се образува проводящ "канал" и от колектора към емитера протича ток - ключът е "включен". Подобно е положението при транзисторите с P-N-P тип преходи, където подаваме отрицателно напрежение, а токът тече в обратна посока.
Друго полезно свойство на транзистора е, че при достатъчно голямо базово напрежение, при увеличаване напрежението на входа (за N-P-N - колектора) напрежението на изхода (за N-P-N - емитера) се задържа на постоянно ниво, което е доста полезно, ако искаме да представим "1" или "0".
Не се престаравайте с гореизписаното на контролните.

Всичката тази съвкупност от ключове (в интегралните схеми и нормалните схеми с много транзистори или лампи) има определен брой устойчиви състояния. Преминаването между тези състояния изисква време, зависещо от броя блокове, сложността и времето за промяна на състоянието на всеки ключ. Можем да считаме времето за преход за сума на времената за превключване на ключовете. Натрупването на ключове в блоковете изисква синхронизация. Тя може да е вътрешна (приблизително еднакви времена на ключовете), но това решава проблема локално, така че не е хубаво. За да могат всички блокове да работят заедно - да се изчакват еднакво, за да е сигурно, че преходите са завършили правилно, е необходима външна синхронизация.

Синхронизиращият сигнал (също "стробиращ") е ето това отдолу:
synchronizer.png
Да, точно така, синхронизаторът е картинка която се лепва в кутията на компютъра и всички устройства действат според нея:)
Сега сериозно. Синхро-сигналът се образува в тактовата централа. Различни устройства имат собствени тактови генератори, затова синхронизиращият сигнал на процесора се нарича основна тактова (синхро-) поредица.
Сигналите от вида на този на картинката се наричат "правоъгълни" (ясно е защо). При тях платото и падината са с равна (достатъчно равна) дължина, а пиковете и падовете са почти мигновени. Това помага за възприемането му от устрайствата, които се синхронизират.
Сигналът се генерира от полупроводников (напр. кварцов) пиезокристал, който под въздействието на електричен ток трепти с висока честота.

Времето за един такт е втората важна характеристика на процесора, след ширината на входа на АЛУ-то. Синхронизацията определя кога се отварят и затварят "вратите" за пускане на битове за излизане (предаване) или влизане (приемане) в устройствата на компютъра. От такта, в крайна сметка,зависи и времето за изпълнение на операциите над операндите. Ако $T$ е времето за един такт, тактовата честота на процесора е $\dfrac{1}{T}$. В последно време нейният порядък е гигахерцов (над един милиард цикъла в секунда). За сравнение, една инструкция отнема типично от 3 до 30 цикъла. Впечатляващо. И освен това, обикновено, по заводски спецификации, инструкцията завършва за част от предвиденото време (около 60% примерно). Останалото време е презастраховка за работа в крайни ситуации, и от него се възползват овърклокърите.
На практика, овърклокването е увеличаване честотата на синхро-сигнала, което намалява времената на тактовете. Важно е обаче, че транзисторите отделят топлина, а повечето топлина забавя тяхната работа и им вреди. Излезе ли процесорът извън синхрон - инструкциите да не могат да завършат за определения брой тактове - скапва се работата на машината, а може би и самият процесор.

Цифрови блокове, прехвърляне на данни между цифрови блокове

Или как се прехвърля информацията между блоковете на изчислителното устройство.
blocks_comunication.PNG
Единичната пътечка отдолу носи синхро-сигнала.

Съвкупността от свързващите линии между блоковете A и B се нарича шина. В хардуерен аспект това са пътечки, по които тече електричен ток (логическа единица) или не тече ток (логическа нула). Съществуват две конвенции за предаване на сигнали: положителна потенциална логика - избирането на по-голямото напрежение (потенциал) за единица, а по-ниското за нула, и отрицателна потенциална логика - нулата е с по-голям потенциал от единицата.

1 0 пример1 пример2
положителна потенциална логика +V 0V +10V - логическо "1"; 0V - логическо "0" 0V - логическо "1" ; -10V - логическо "0"
отрицателна потенциална логика 0V +V -10V - логическо "1"; 0V - логическо "0" -5V - логическо "1" ; +5V - логическо "0"

Официално отрицателната потенциална логика вече не се използва.
В началото, в положителната логика, за логическа единица е използван потенциал +5V , а за логическата нула - 0V. Впоследствие логическата единица става +3V (или + 3.3V, имаше едни видеокарти, дето горяха заради различните стандарти), а нулата си е същата.

Смяната на потенциалите (напреженията) между нула и еденица не става мигновенно. Необходимо време, за което подаденият потенциал да достигне съответното ниво. Ако измерваме с осцилоскоп съобщениета по една пътечка на шината (или казано по-друг начин, също толкова неясен - разглеждаме потока от битове по една от пътечките между устройство A и B), ще получим "плавна" графика.
graph_bit_sending.png
Единицата и нулата не са отбелязани на графиката, защото в зависимост от логиката може да са различни.
За да общуват безпроблемно A и B, трябва да сме сигурни, че когато B чете от A, потенциалите на всяка пътечка от шината са достигнати (тоест, на всяка пътечка имаме +5/+3V или 0V). За това е необходима синхронизацията - използва се синхронизиращ сигнал (синхро-сигнал). Цикълът на предаване и приемане е следният:

  1. През падината на сигнала A настройва потенциалите на пътечките на шината;
  2. При пика на сигнала A е настроило стабилни сигнали, и B отваря врати;
  3. По време на платото - B поема (прочита) сигнала, през което време А продължава да поддържа едни и същи потенциали;
  4. При пада B е усвоило сигналите и затваря врати.

Синхро-сигналът може да не идва директно от процесора. В такива случаи той е зависим от него - или А използва основната тактова поредица, за да създаде своя за комуникацията А-B, или трето устройство синхронизира A и B.
Обикновенно разрядът на шината е равен на броя битове в машинната дума за съответната архитектура (тоест реализацията на архитектурата си е фон Нойманова).

Комуникацията между блоковете може да е еднопосочна - винаги единият блок предава, другият приема - или двупосочна - и двете устройства могат да изпращат и приемат информация (режим "полудуплекс"), като в такива случаи имаме отделни устройства (намиращи се в процесора), които управляват кога съоветният блок е изпращащ или приемащ. Често обаче е удобно блокът може да изпада и в състояние "изключено" (ни приема, ни предава). Това е "високоимпедансно състояние" - тоест, електрическото съпротивление на блока се повишава многократно и по закона на Ом: $I = \dfrac{U}{R}$ , през блока не протича ток и той не участва в преноса на данни. За нагледно обяснение, представете си, че електричният ток е вода и шината е улей, където тя тече - вдигането на напрежението е все едно да вдигнем стените на блока над водното равнище.

Третото състояние на блока позволява направата на магистрала (bus) - шина, която свързва повече от два блока.
lane_4_bit.PNG
Тъй като,ако всички устройства по магистралата"слушат" едновременно, напрежението, подадено от "говорещото" устройство, ще падне твърде много и няма да се разчита като сигнал от устройствата. Следвайки горния пример с водните улеи - ако всички устройства приемат вода, до по-далечните устройства няма да стигне почти никаква вода.

Последователно предаване на данни

transfer_data_example.PNG
Горната снимка е пример за съобщение предадено по една пътечка от шина. В случая тактовете и предаваното съобщение се предават по две различни линии, което е неудобно. За да използваме една пътечка, ни трябва сигнал, който сам да се синхронизира. Примери за такъв код са Manchester и Manchester II. Впоследствие умните глави измислят диференциалнен Manchester (който може би е точно Manchester II, ама никъде не пише така ли е :-\ ).
Реализацията на код Manchester става, като приемното устройство отчита първата производна на сигнала - ако нараства, прочетеният бит е 1, а ако намалява - 0.

Има и друг начин за предаване на данни - асинхронно. Тогава двете устройства са в покой и когато едното иска да изпрати нещо на другото, се събужда, събужда и другото устройство, и му предава данните. Събуждането става чрез изпращане на специален start-bit, а на края на предаването се предава stop-(end-)bit (за да заспи отново приемното устройство). Тези битове са по-специални и са съответно с дължина 0,5 и 1,5 бита. При получаване на стартов бит се включва вътрешен тактуващ механизъм, който определя комуникацията между блоковете (трябва и в двете да тактува еднакво, за да могат да си "говорят" - устройствата трябва да са съвместими). В заспало състояние се отчитат само 0. Информацията се разделя на групи от битове, които може да се кодират допълнително, за да се избегнат проблеми като продължителна поредица от еднакви битове. В резултат между start-bit и stop-bit може да се предават групи от "странен" брой битове, например 7.

В наши дни в процесорите не се използва асинхронна комуникация. Тя е приложима за външни устройства (и микроконтролерни системи), които не прехвърлят особенно много информация по шината си. С напредването на технологиите всички устройства се наблъскват с много нови възможностии и съответно асинхронната комуникация се измества от синхронна.

Съхранение на данни и представяне на числови данни

В началото съхранението на данни се е определяло според процесора, с най-различни шантави изпълнениея. Сега е прието единиците за съхранение да са байтове и кратни на байтовете - байтът е основната единица за съхранение.
Много важни понятия са старши и младши (most significant и least significant) байт/бит- това са съответно най-левият и най-десният байт/бит.
32_bits_word.PNG

Цели числа

Представяне на цели числа

Числовите данни се съхраняват (обичайно) в 4 байта (32 бита). Числата се пазят в паметта като цели двоични числа, без знак и със стойности от 0 до 232 - 1 (ако са unsigned), или със знак и стойности от - 231 до 231 - 1 . Отрицателните и положителните числа се различават по първия си (старшия) бит - ако числото е положително, старшият бит е "0", а ако е отрицателно - "1". В зависимост от това дали са положителни или отрицателни, числата са записани в прав или допълнителен код. Обратният код на числото се получава, като се инвертира побитово правият код на модула му и след това се прибави 1. Ползата от обратен код е, че 0 има единствено представяне. Нагледно:

-1     е записано като  11111111 11111111 11111111 11111111  -  допълнителен код
0      e записана като  00000000 00000000 00000000 00000000
1      е записано като  00000000 00000000 00000000 00000001  -  прав код

00000000 00000000 00000000 00000001 е правият код на числото 1 , инвертираме и получаваме:
11111111 11111111 11111111 11111110 , прибавяме 1 и получаваме:
11111111 11111111 11111111 11111111
------
Като съберем 1 и -1, получаваме 0.

Основният формат на данните в компютъра е числото със запетая (фиксирана запетая - различно е от плаваща запетая, ще дам разяснения за разликата скоро).

Операции с цели числа

Възможните операции с тези числа са събиране, изваждане, умножение и делене. За тези операции има правила:

  • Събирането е просто алгебрично събиране.
  • Операцията изваждане се извършва чрез събиране, като единият операнд се обърне в допълнителен код и след това се извърши действието.
  • Умножението и делението се извършват чрез по-сложни методи.
  • При умножението, разредноста на произведението е равна на сбора на разредноста на двата множителя (разредноста е броят битове, необходими за представяне на числото в двоичен вид).
  • Деленето на числа с фиксирана запетая се извършва в процесора и е целочислено - резултатът е частно и остатък. Разредноста на резултата се определя така:
Нека <число> означава разредноста на числото.

<частно> = <делимо> - <делител>
<остатък> = <делител>
sgn(остатък) = sgn(делител)

При извършване на аритметични операции изникват няколко проблема.
  • При деленето не е позволено делителя да е 0.
  • При събиране на достатъчно големи положителни числа се получава отрицателно:
01000000 00000000 00000000 00000001  +  01000000 00000000 00000000 00000001  =  10000000 00000000 00000000 00000010

В такъв случай се гледа преносът на единици от старшия в знаковия бит.
  • При събиране на достатъчно големи отрицателни числа се получава положително и пренос извън разрядната решетка:
10111111 11111111 11111111 11111110  +  10000000 00000000 00000000 00000011  =  1|00000000 00000000 00000000 00000001

Тогава се гледа преносът на единици от знаковия бит навън.
Знакът на числото е правилен, ако и двата преноса са едновременно 0 или 1. Разбира се, ако сборът на числата е по-голям от 232 - 1 или по-малък от 232 , не можем да очакваме резултатът в решетката да е равен на него. Но тези случаи ги разглежда програмистът.

Други операции, които можем да извършваме над операндите, са побитовите логически - AND, OR, NOT, XOR. Побитовите операции се прилагат на всеки два съответстващи по реда в думата бита - тоест ако имаме AND на операнд1 и операнд2 и шестият бит в операнд1 е 1, а в операнд2 - 0, в резултата на шеста позиция имаме 0.

Операции над битовите количества

Операциите върху битовите количества (операции, преместващи битове) са три типа - алгебрично (знаково), обикновено (побитово) и ротационно преместване.

  • Ако алгерично преместим число, запазваме старшия (знаковия) бит.
  • При обикновеното просто имаме преместване на битовете (без да се съобразяваме със знакови битове)
  • Ротационното просто премества последните битове отпред или първите битове отзад, в зависимост в каква посока е.

Върху битовите количества са позволени набор от логически операции - and, or, xor и not. Първите три се извършват побитово за съответните битове на операндите, а not е унарна - изпълнява се над един операнд. Като резултат от тези операции не можем да получим препълване или делене на 0.

Нецели числа

Представане на нецели числа

Важни за компютърната обработка са числата, които не са цели - числата, представяни като обикновена дроб (примерно 1/3 = 0,33333..). Представянето на нецели числа в цифровия свят е доста сложно. В началото компютрите не са можели да извършват действия с нецели числа (не че сега го правят добре, но поне постигат някакъв успех).
За да се извърши операция над нецяло число, то трябва да се преобразува в двоична дроб с плаваща запетая. В този свой вид числото се състои от две части - характеристика и мантиса. Характеристиката е степента на двойката. Мантисата има две форми: ненормализирана (може да има 0 след запетаята - примерно 0,000341), и нормализирана (веднага след запетаята има значещо число - примерно 0,341). Разбира се, има операция нормализиране - мести се мантисата надясно, а степента на двойката се увеличава. Ето и схема на представянето на числото:
binary_number_sheme1.PNG
Проблем на това представяне е, че имаме твърде малко памет за представяне на мантисата - 3 байта (включваме и знаковия бит). Затовв се решава да се увеличи размерът на числата с плаваща запетая на 8 байта, като с това се увеличава значително диапазонът им.

Аритметически операции с нецели числа

Аритметиката на нецелите числа е сложна и стандартното АЛУ не може да я извършва. За да се извършват операции с FP (Floating Point) числа, е необходим блок за плаваща запетая (Floating Point Unit) - отделно изчислително звено (демек такова като АЛУ-то, ама само за FP числа). Машинните инструкции за тези числа имат специфични особенности и съответно не се използват в масовите програми. Само специалисти (и мазохисти) пишат програми от ниско ниво, използвайки FP.

Десетично представяне на числовите данни

Вариант за преставяне на числата за компютъра е и десетичният, но той не е удобен (за двоични машини, за нас е идеален). За това се преминава към BCD (Binary Coded Decimal). То има две разновидности: пакетиран и непакетиран. При пакетирано BCD всеки байт се разделя на 2 парчета ("тетради") по 4 бита и във всяка тетрада се записва по една цифра от 0 до 9 . Има 6 комбинации битове, които не се използват при BCD (невалидни). При непакетиранио BCD всеки байт кодира единствена цифра.

Десетично:    0     1     2     3     4     5     6     7     8     9   нев. нев. нев. нев. нев. нев.
BCD:        0000  0001  0010  0011  0100  0101  0110  0111  1000  1001 1010 1011 1100 1101 1110 1111

Съответно преставянето на 127 в BCD формат (пакетиран) е
0001 0010 0111

Това е доста неефективен начин за преставяне на числа, не ми е известно да се използва. (Обаче на практикума го изпозвахме, за крайно малки числа, разбира се.)
Освен това някои процесори имат малко вградени инструкции за работа с BCD числа, а други просто нямат. В част от последните се симулират такива операции чрез наличните двоични операции, което е тежко и неудобно.

Представяне на символи

В началото компютрите са предвидени с изчислителна цел, но с времето се е развила и тяхната "писменост" - включват в себе си и букви (преди това е имало само цифри и означения на математическите операции). В началото се отделя по един байт за символ (буква). Буквите на английската азбука (големите и малките (без шрифтовете)) се събират в 7 бита. Тъй като имаме 8 бита идва въпросът какво да правим останалите 128 комбинации, които можем да използваме. В началото те не са били използвани и в кодовата таблица на символите е имало само английската азбука. В IBM правят 8 битова таблица, но за това малко по-късно. Сега следва разяснение как действат азбучните таблици.

Символни таблици

Стигаме до един потенциален проблем: компютърът работи с числа, а човек - предимно със символи. Решението са символните таблици, които съпоставят символи на числа (умно, нали?), а числата на свой ред се обработват лесно машинно. Улеснение за тази цел е, че повечето човешки символни азбуки съдържат малко на брой символи, от коисо се съставят дълги последователности (низове, strings). За повечето азбуки средният брой символи е около 30; обаче съществуват много шрифтове (font, съпоставка на изображения на символни кодове), с които може да бъде изписан всеки символ. Затова се решава шрифтовете да не влизат в кодовата таблица, а да бъдат определяни посредством други начини вътре в софтуеъра. Така таблицата би трябвало да остане сравнително малка.

Въвеждане и извеждане на символи

Клавиатурата е основният източник на символи и числа, който трябва да се разпознаят от компютъра и да им се съпостави правилният символ. Въвеждането става, като на всеки клавиш отговаря така нареченият **"код на сканиране" scan code**; когато е натиснат клавишът, неговият код се записва в компютъра, съпоставя се на кода от таблицата, а той се подава за обработва от софутера. При извеждане се взима кодът на символа, прави се справка с таблицата и се извежда картинката, отговаряща на този код (на екрана или принтера, или каквото друго успеете да подкарате), взета от съответния шрифт, или от шрифта по подразбиране (default font). Програмите, които могат да извеждат символи с различни шрифтове, например "текстовите редактори" (word processors), освен кодовете на символите, записват и разглеждат данни, указващи кои части от текста да бъдат изведени в определен формат (шрифт, големина, цвят и т.н.).

Възможно е да се въвеждат символи автоматично, тоест не от клавиатурата (пакети от мрежата и прочие), но това е пак пренос и обработка на кодове. Трудното идва, ако искаме да въведем текст от картинка (примерно сканиран документ). За целта компютърът трябва да разполага с разпознаващ (OCR, Optical Character Recognition) софтуеър, който да анализира групи пикселите от картинката и да прави обратна връзка по таблицата (тоест по картинката да намери кода). Разбира се, ако имаме различни шрифтове нещата загрубяват - да не говорим за лошо качество на печата, гаден носител (хартия), или, не дай си, Боже, ръкопис.
Тези анализи и обратни връзки в таблицата са много над опрациите на АЛУ-то.

Видове символни таблици

В наши дни има две основни кодови таблици.

ASCII

ASCII (American Standard Code for Information Interchange). Първоначалния си вид взаимства от 7-битова кодова таблица, използвана в телеграфните връзки. Тогава 7 бита били достатъчни за кодиране на английската азбука, цифри, пунктуация и някои други символи (изобразяеми символи), както и на определен брой контролни символи, управляващи преноса и обработката. Във времената на асинхронния трансфер (start-stop, един бит сигнализира за начало на преноса), това било удобно и бързо. Впоследствие, когато се налага да се стандартизират и международни комуникации, става ясно, че със 7 бита (максимум 128 символа) няма да я бъде.

Затова се взима решението новата, 8-битова ASCII да съдържа в себе старата ASCII таблица като постоянна първа (номер 0) страница, а втората (номер 1) страница да има много варианти. Така за всяка друга (не-английска) азбука се създава по една, а понякога и повече, ASCII таблица, в която втората страница съдържа символите от съответната азбука, а първата е стандартна. Стандартно таблиците се обозначават с идентификатора CP (Code Page, термин на IBM) X, където X е число с до 4 цифри; но има и други наименования.
За българския език за стандартна таблица е била предвидена ISO_8859-5. Вместо нея, под DOS се е ползвала CP866, а в по-ново време - руската KOI8-R и Майкрософтската Windows-1251.
Тъй като ASCII таблиците са с ограничен размер (256 символа), те поддържат малки, символни азбуки. НЕ ПОДДЪРЖАТ йероглифи.
Македонците също нямат собствена кодова таблица.

Unicode

С времето се оказало много трудно да се комуникира качествено и правилно с многото ASCII таблици, а и при усилената глобализация доста символи се е наложило да бъдат изпращани, получавани, и най-вече стандартизирани. Затова се решава да се прибегне към по-голяма кодова таблица. В Unicode кодът на всеки символ се записва в 2 байта (което прави 65 536 възможни комбинации). Използват се 8 - 10 хиляди места в таблицата за буквите на различните азбуки, специални символи и препинателни знаци. Остават 50 - 55 хиляди места, за които започва ЛЮТ СЕЛСКИ БОЙ С ТОЯГИ, ПСУВНИ И КЪЧОВЕ ожесточен спор кои йероглифи да бъдат добавени.

Съхраняване на данните в паметта

Разбрахме как се структурират основните типове данни, сега идва въпросът как точно се съхраняват тези структури в паметта на комптъра. Изниква въпросът как да се номерират байтовете и битовете (понеже паметта е линейна поредица от номерирани байтове). По-горе споменахме, че старшият байт е нулев, останалите са 1-ви, 2-ри, 3-ти (става въпрос за 4-байтови числа, тъй че няма други байтове, освен тези). Така имаме номерация от старши към младши байтове, номерацията на битовете в байта също е от старши към младши(от нулев до седми бит).
Тази наредба се нарича Big-endian - старшият байт е първи.
Другата възможност е Little-endian - при нея първи е младшият байт.
Другояче казано, при Little-endian с увеличаването на адреса се увеличава старшинството (значимостта, порядъкът) на байтовете. При Big-endian е точно обратното.

Нека видим едно число, записано в двата формата.

n = 2826063030(dec) = A8724CB6(hex)
     Byte 0    Byte 1    Byte 2    Byte 3
n = 10101000 01110010 01001100 10110110

Числото, записано в Little-endian
   B6        4C        72        A8
10110110  01001100  01110010  10101000
   Byte 3    Byte 2    Byte 1    Byte 0 

Числото, записано в Big-endian
   A8        72        4C        B6
10101000  01110010  01001100  10110110
   Byte 0    Byte 1    Byte 2    Byte 3

И така като цяло - при Big-endian имаме в паметта записани Byte0 Byte1 Byte2 Byte3 , при Little-endian Byte3 Byte2 Byte1 Byte0. Като всяка структура данни си има свойте първи и последен байт (понякога може да са повече от 4).
Съществуват и варианти за подредба на ниво битовете в един байт, но те не ни засягат.

За допълнителни пояснения тук.
Ако някой все още има някакви съмнения относно смисъла на "endianness", нека опита специално създадения от Искрен пример, и да гледа в какъв ред излизат байтовете от променливата при него (подсказка - x86 е little-endian):

#include <cstdio>

int main() {
    unsigned x = 0x0033CCFF;
    char *p = (char *)&x;
    for (int i = 0; i < 4; ++i) {
        printf("%02x", (unsigned)(*p) & 0xff);
        ++p;
    }
    puts("");

    return 0;
}

Подаване на информация на АЛУ

За x86 архитектурата и някои други, които кодират в Little-endian, важи следното:
На входа на АЛУ постъпва от дясно на ляво числото (но това едва ли ви говори много, ето картинка:
processor_byte_input.PNG
Тоест на входа на процесора винаги постъпва информацията във вид Big-endian - но не си мислете, че конвертирането от Big-endian към Little-endian забавя работата на процесора. Просто паметта се прочита отдясно наляво и се изпраща, нямаме забавяне(за паметта няма значение дали се чете от ляво на дясно или дясно на ляво, пак се смята адреса и се върви в определена посока от този адрес)). По подобен начин седят нещата с изхода - записваното число се записва отзад напред.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License