Асемблер – въведениe в решаването на задачи

Решаването на всяка задача може да се разгледа като последователност от действия  за постигането на крайната цел. Формалният запис на крайна последователност от действия, водещи до решаването на определена задача, се нарича алгоритъм.  На алгоритмизация подлежат не само задачи, свързани с математически изчисления. Технологията на изработка на дадено изделие или технологията на управление на даден обект също могат да се опишат с алгоритъм.

Компютрите са устройства, които са в състояние да работят по зададен алгоритъм. Заданието обаче трябва да бъде  въведено в компютъра на разбираем за него език. Преобразуването на алгоритъма в разбираем за компютъра език е същността на програмирането.

Разбираемият за компютрите език е само т.нар. машинен език. Характерно за него е, че всички инструкции и всички данни се представят с двоични числа. Двоични са тези числа, които се представят само с две цифри – 0 и 1. Големината на числото зависи от позициите, в които са поставени единиците.

Програмирането на машинен език е изключително трудно и е по силите само на програмисти, познаващи в детайли устройството и действието на компютъра. Обикновено се използва само при конструиране на нови модели процесори. За по-голямо удобство са създадени езици за програмиране от по-високо ниво.

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

Макар и по удобно, програмирането на асемблерен език също е трудно и е по силите на програмисти, познаващи достатъчно добре вътрешната архитектура на компютъра. За още по-голямо удобство, но с цената на известни компромиси, са създадени езиците за програмиране от високо ниво. Това са езиците Фортран, Алгол, Бейзик, Паскал, Си, Делфи и др. При тях не e нужно да се познава устройството на компютъра, но създадените програми работят по-бавно и с по-голям разход на памет в сравнение с тези, написани на асемблерен език.

Чрез езици от високо ниво се създават потребителски програми. Те са предназначени за ползване от хора, които не е задължително да умеят да програмират. Съществуват най-невероятни потребителски програми за какви ли не дейности. По-популярни от тях са текстовите редактори, предназначени за писане на текст, счетоводните програми, програмите за чертане, за разработване на печатни платки, речниците, симулатори на различни обекти с цел тяхното изучаване, забавни игри и др. Езиците от високо ниво позволяват части от програмата да бъдат написани на асемблерен език. Към този похват се прибягва когато се налага да се оптимизира програмата по отношение на бързодействие и разход на памет.

Програмирането на асемблерен език е необходимо най-вече при микропроцесорите и едночиповите микрокомпютри, предназначени за управлението на различни автоматизирани механизми и други изделия. За тези цели се използват 8-битови процесори. Програмите обикновено са прости, но изискванията за бързодействие са изключително високи. Намират приложение при машините с ЦПУ, при измервателните уреди, телевизионните приемници, електронните регулатори, електронните преобразуватели и др.

Двоична бройна система

При представяне на десетичните числа се използва традиционната десетична бройна система. Цифрите в нея са 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9. Значещите цифри са всички цифри освен нулата. Числото, което те отразяват зависи от позицията, в която са поставени. Преместването на значеща цифра с една позиция на ляво увеличава числото 10 пъти, а преместването и с една позиция на дясно го намалява също с 10 пъти. Ако се премести същата цифра с още една позиция на ляво, числото нараства още 10 пъти, т.е. 100 пъти т.е. 10^2 пъти.

При десетичната бройна система числото 10 е така наречената основа на бройната система. Ако се промени основата, се променя и бройната система. Така може да се създаде например осмична, троична, шестнадесетична и т.н. бройна система. Всяко число може да се представи в произволна бройна система като полином от вида

X = An*Рn + An-1*Рn-1 + … + A2*Р2 + A1*Р1 +A0*Р0 +
A-1*Р-1 + A-2*Р-2 + … + Am*Р-m

където

An..Am са цифрите от десетичната бройна система,
n…m е порядъка на съответната позиция, а
Р е основата на бройната система.

Например десетичното число 484,25 може да се представи като

484,25 = 4*102 + 8*101 + 4*100 + 2*10-1 + 5*10-2

При двоичната бройна система основата е 2, а цифрите са 0 и 1. Всяко число може да се представи в двоична бройна система по описаните правила. Например числото 10010110 може да се представи като

1*27 + 0*26 +0*25 + 1*24 + 0*23 + 1*22 + 1*21 + 0*20

За да не се допуска объркване при представяне на числата в двоична бройна система, пред двоичното число се поставя идентификаторът-представка (%). Например числото 100 е десетичното число сто, докато %100 е двоичното число четири.

Преминаване от двоична в десетична бройна система

За да се възприеме по-добре числото е необходимо, то да бъде представено с десетичния си еквивалент. Преминаването от двоичен в десетичен код се извършва като се вземе под внимание т.нар. тегло на отделните позиции в които е записано единица. Теглото на единицата фактически е числото 2, повдигнато на степен – равна на номера на позицията, в която е поставена единицата. Прието е тази позицията да се нарича разред. Например единицата, поставена в най-дясна позиция, наричана още най-младши разред, има тегло (1) защото 2^0 = 1. Ако единицата се постави на втора позиция се получава еквивалент на десетичното число 2 защото 2^1 = 2. На трета позиция ще бъде 4, на четвърта – 8, на пета – 16 и т.н. От тук следва и правилото за преминаване от двоични в десетични числа, т.е. Да се сумират теглата на всички единици, участващи в двоичното число.

Пример:

Нека е дадено числото %1011. То притежава единици в първия, третия и четвъртия разред. Теглото на единиците са съответно 8, 2 и 1.Следователно числото %1011 има десетичен еквивалент  8 + 2 + 1 = 11.
Когато числото има дробна част, правилото е същото, като се отчете факта, че степенният показател е отрицателен. Така за първата позиция след запетаята теглото на единицата е 0.5 защото 2^-1 = 1 / 2^1. При следващите разреди теглото е съответно 0.25, 0.126, 0,0626 и т.н.

Пример: 1100,1011 има двоичен еквивалент

8 + 4 + 0,5 + 0,125 + 0,0625 = 12,6875

Преминаване от десетична в двоична бройна система

Тук съществуват различни алгоритми. Ще бъде разгледан алгоритъм, който се използва повече в математиката, но не е подходящ за приложение в изчислителната техника.

Цялата и дробната част на десетичните числа се обработват отделно.
Обработване на цялата част:

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

Пример: Да се представи числото 214 в двоичен код!

214 : 2 = 107   0
107 : 2 =  53   1
53 : 2 =  26   1
26 : 2 =  13   0
13 : 2 =   6   1
6 : 2 =   3   0
3 : 2 =   1   1
1 : 2 =   0   1

Двоичният еквивалент на 214 е %11010110.

Проверка:   128 + 64 + 16 + 4 + 2 = 214

Обработване на дробната част:

- дробната част на числото се умножава по две
- ако към цялата част възникне пренос, в най-старшия бит на
резултата се записва единица, а ако ли не – нула
- дробната част на полученото число се обработва по същия начин за формиране на следващия разред на резултата
- процесът се спира при достигане на зададена точност.

Пример: Да се намери двоичният еквивалент на 0,345.

0,345 х 2 = 0,690   0
0,690 х 2 = 1,380   1
0,380 х 2 = 0,760   0
0,760 х 2 = 1,520   1
0,520 х 2 = 1,040   1

Полученото число е %0,01011. Като се направи проверка се получава

0,25 + 0,0625 + 0,03125 = 0,34375.

Различието, което се наблюдава е от това, че процесът е спрян до петия разред, т.е. не се работи с висока точност.

Осмична и шестнадесетична бройни системи

Едно многоразредно двоично число се помни трудно. За удобство са въведени осмичната и шестнадесетичната бройни системи. При осмичната, многоразредното число се разделя на групи от по три разреда, а при шестнадесетичната – на групи от по четири разреда. Всяка група се кодира с нейния десетичен еквивалент. Група от три единици съответства на числото 7, което заедно с нулата прави осем двоични комбинации. Следователно осмичната бройна система работи с цифрите 0, 1, 2, 3, 4, 5, 6 и 7. Пред числата, представени в осмична бройна система се поставя идентификаторът (@).

Пример:

Да се представи числото %10011101 в осмична бройна система!

010 011 100
2   3   4  —-> @234

Когато в най-старшата група остане една или две цифри, липсващите разреди се запълват с нули.
При шестнадесетичната бройна система броят на комбинациите при четири разреда е 16. Възниква проблем при кодиране на числа по-големи от 9, защото за тях няма цифри. За това е прието в такива случаи да се използват първите шест букви от латинската азбука. Следователно цифрите с които борави шестнадесетичната бройна система са 0, 1, 2, 3,
4, 5, 6, 7, 8, 9, A, B, C, D, E и F. Идентификаторът заm шестнадесетично число е 0x. Вместо този символ, някои използват $ или идентификатор – наставка (Н).

Пример:

Да се представи числото %1010010100111110 в шестнадесетична бройна система!

1010 0101 0011 1110
A    5    3   E      —->  0xA53E

Осмичните и шестнадесетичните бройни системи се използват при програмиране на машинен език. В това отношение осмичната бройна система може да се смята за остаряла, защото в момента всички съвременни процесори боравят изключително със шестнадесетичната бройна система, но много често в развитието, по принцип, се забелязват повратности.

Кодиране на отрицателните числа

Когато програмистът реши да работи с числа с алгебричен знак, е прието за знака да се използва най-старшия разред. Ако в него се запише нула, числото е положително, а ако е единица – отрицателно.
Например %01101011 (0×6B) е положително число, а %11010010 (0xD2) е отрицателно число.

Кодирането на числа с алгебричен знак по този начин се нарича прав код на числата. Правият код е нагледен, но не е удобен за извършване на аритметични действия. За тази цел са предвидени така наречените обратен и допълнителен код. При положителните числа правилото е едно и също и за прав, и за обратен, и за допълнителен код. Различията идват при представяне на отрицателните числа.

Обратният код на отрицателното число се получава, като единицата в знаковия разред се запази, а всички разреди след него се инвертират (нулите се заменят с единици, а единиците – с нули). Например %11010010 представено в обратен код е %10101101. Благодарение на обратният код операцията извеждане се привежда към операцията събиране. Ще бъде разгледан един пример.

Пример: Дадено А = 12; В = 5. Да се намери А – В = ?.

12 = %01100 (ПК);
-5 = %10101(ПК) = %11010(ОК)
А – В = А + (-В) =
01100
+  11010
———
1| 00110
+         1
———
00111 —-> 7

От този пример се вижда как числото -5 участва в операцията събиране със знак със своя обратен код. Установява се, че в този случай възниква пренос от старшият бит нататък. Когато възникне такъв пренос при обратен код, той се добавя към резултата и така се формира окончателен резултат.
Резултатът се получава също в обратен код. За примера той е положително число и за това не е нужно да се променя, но ако се получи отрицателно число, трябва да се преобразува в прав код по същия начин.

Единицата, която беше прибавена към резултата може да се прибави предварително и така е дошла идеята за допълнителния код. Следователно правилото за получаване на допълнителния код на отрицателното число е, към неговия обратен код да се прибави единица. Ако при събирането възникне пренос, то той се игнорира.

Пример: Дадено А = 12, В = 5. Да се намери А – В = ?.

12 = %01100 (ПК);
-5 = %10101(ПК) = %11010(ОК) = %11011(ДК)
А – В = А + (-В) =
01101
+    11010
———-
1| 00111  —-> 7

Резултатът е пак в допълнителен код. Ако е отрицателно число, то се преобразува в прав код по същия начин, т.е. всички разреди след знака се инвертират и се добавя единица.

Двоично-десетична бройна система

Тази бройна система се използва напоследък все по-рядко, но не е изгубила напълно своето значение. При нея десетичните числа се кодират, като всяка десетична цифра се представя с нейният двоичен еквивалент. Известна е още под името код 8-4-2-1, отразяващ теглата на съответните разреди, а напоследък все повече се налага названието BCD-код.

Пример: Да се кодира числото 2507 в двоично-десетична бройна система!
2        5        0       7
0010  0101 0000 0111

Полученото число не е двоично и за него не важат правилата за преминаване от двоично в десетична бройна система. Двоичният еквивалент на числото 2507 е 100111001011. Вижда се, че то използва 12 разреда, докато същото число, представено в двоично-десетичен код, използва 16 разреда, т.е. 4 разреда повече. Това означава увеличаване броя на проводниците в изчислителното устройство, а заедно с него и броят на останалите елементи в схемата. Това е единият недостатък на BCD кода.

Другият недостатък е, че аритметичните действия се извършват по-трудно и по-бавно. Въпреки това представянето на числата в BCD код се е предпочитало, особено в цифровата измервателна техника. Там още в измервателният преобразувател измерваната величина се преобразува в двоично-десетичен код и до самият индикатор отделните разреди вървят по декади. Ако не се направи това е необходимо вътре в измервателният уред да се постави процесор, който по програмен път да преобразува двоичният код от измервателния преобразувател в BCD код за индикация. При съвременните уреди това не е проблем благодарение на едночиповите микрокомпютри. Много уреди представляват една единствена интегрална схема в която конструкторът е поставил всичко, включително и едночипов микрокомпютър.

Кодиране на символи

Символите включват букви, цифри, препинателни знаци и специални символи. Те също могат да се кодират. За целта е удобно да се използва двоичен код, като всеки символ да съответства на определено число. Този процес вече е стандартизиран. Като стандарт се наложи кодът ASCII въведен от фирмата IBM. Той е 8 разреден. С 8 разреда могат да се постигнат 256 комбинации, т.е. могат да се представят 256 символа. Това е предостатъчно за представянето на всички цифри и препинателни знаци, малките и главните букви на латинската азбука и кирилицата, гръцката азбука и още редица други символи.
Ето няколко примера:

  • цифрите от 0 до 9 се кодират с двоичния еквивалент на числата от 48 до 57
  • главните букви на латинската азбука започват от 65 и завършват до 90
  • знакът ? се кодира с 63
  • специалният символ BEL, които генерира звуков сигнал за заостряне на вниманието се кодира със 7.

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

Сходни статии:

  1. Изваждане на BCD числа За изваждане на BCD числа не могат да се използват инструкциите SUB, SBC, SBCI, защото код BCD и двоичният код са съвсем различни неща. Тук ще бъде използван алгоритъм, който...
  2. По-важни алгоритми Програма за преобразуване на еднобайтово число в допълнителен код Инструкцията NEG преобразува в допълнителен код, като инвертира всички 8 бита на числото и добавя единица. За знак използва флага N...
  3. Програми за управление Осъществяване на закъснение Едночиповите микрокомпютри се използват обикновено за управление на някакви обекти. Аритметичните действия, които могат да извършват , се използват именно за целите на управлението, а не за...
  4. Програма за преобразуване на четирибайтови числа в допълнителен код Програма за преобразуване на четирибайтови числа в допълнителен код Зададеното число се разполага в четири последователни клетки от паметта. И тук е прието най-старшият байт да е с най-малък адрес....
  5. Програма за преобразуване на еднобайтови двоични числа в BCD код Максималната стойност на еднобайтовото число е 255. За да бъде преобразувано в двоично-десетично, може да се постъпи по следния начин. От зададената стойност да се изважда най-напред100, докато се получи...

Студио за уеб дизайн услуги, изработка на сайтове, SEO оптимизация и Интернет реклама Seven Web Design представя своите професионални уеб дизайн умения на високо ниво. Seven Web Design е продукт на Уеб Дизайн България Груп ООД ®
Comments are closed.