Скупштински језик. Команде и основе асемблера

8. 4. 2019.

У чланку ће се расправљати о основама асемблерског језика у односу на архитектуру вин32. То је симболичан запис стројних кодова. У сваком електронском рачунару, најнижи ниво је хардвер. Овде се управљање процесима одвија са инструкцијама или инструкцијама на машинском језику. Управо у овој области асемблер треба да ради.

Програмирање асемблера

Писање програма у асемблеру је изузетно тежак и скуп процес. Да бисте креирали ефикасан алгоритам, потребно вам је дубоко разумевање рада рачунара, познавање детаља команди, као и повећана пажња и тачност. Ефикасност је критични параметар за програмирање у асемблеру.

Како се програмира на асемблеру

Главна предност језика асемблера је у томе што вам омогућава да креирате кратке и брзе програме. Стога се, по правилу, користи за рјешавање специјализираних проблема. Потребан вам је код који ефикасно ради са хардверским компонентама, или вам је потребан програм који захтева меморију или време извршавања.

Регистри

Регистри у језику асемблера се зову меморијске ћелије које се налазе директно на чипу са АЛУ (процесором). Карактеристика ове врсте меморије је брзина приступа њој, која је много бржа од РАМ-а рачунара. Назива се и ултрабрзо РАМ (ПопС или СРАМ).

Постоје следеће врсте регистара:

  1. Регистри опште намене (РОН).
  2. Флагс.
  3. Показивач команде
  4. Сегментни регистри.
Регистарски скупови

Постоји 8 регистара опште намене, сваки по 32 бита.

ЕАКС, ЕЦКС, ЕДКС, ЕБКС регистри се могу приступити у 32-битном, 16-битном - АКС, БКС, ЦКС, ДКС и 8-битном - АХ и АЛ, БХ и БЛ, итд.

Слово "Е" у именима регистара значи Проширено (проширено). Сами називи се односе на њихова имена на енглеском језику:

  • Регистар акумулатора (АКС) - за аритметичке операције.
  • Бројач регистара (ЦКС) - за промене и циклусе.
  • Регистар података (ДКС) - за аритметичке и И / О операције.
  • Основни регистар (БКС) - за показивач на податке.
  • Регистар показивача стог (СП) - за показивач на врх стог.
  • Стацк Басе Поинтер регистар (БП) - за индикатор базе стог.
  • Регистар изворног индекса (СИ) - за пошиљаоца (извор) показивача.
  • Регистарски регистар одредишта (ДИ) - за примаоца.

Специјализација РОН асемблерски језик је услован. Могу се користити у било којој операцији. Међутим, неке наредбе могу користити само одређене регистре. На примјер, наредбе петље користе ЕСКС за похрану вриједности бројача.

Регистар застава. Ово подразумева бајт, који може узети вредности 0 и 1. Комбинација свих заставица (има их око 30) показује стање процесора. Примери заставица: Царри Флаг (ЦФ) - Ознака ношења, Флаг заставе (ОФ) - оверфлов, Нестед Флаг (НТ) - заставица задатка и многи други. Заставе су подељене у 3 групе: статус, управљање и систем.

Регистрира заставице процесора

Индекс команди (ЕИП - Инструцтион Поинтер). Овај регистар садржи адресу инструкције, која се мора извршити следеће, осим ако није другачије назначено.

Сегментни регистри (ЦС, ДС, СС, ЕС, ФС, ГС). Њихово присуство у асемблеру диктира посебна контрола РАМ-а како би се повећала његова употреба у програмима. Захваљујући њима, било је могуће управљати меморијом до 4 ГБ. У Вин32 архитектури нема потребе за сегментима, али имена регистара се чувају и користе другачије.

Стацк оф

Ово је меморијско подручје додељено за покренуте процедуре. Особитост стацк-а је да су најновији подаци који су написани на њега први доступни. Другим речима: први уноси у стог се добијају последњи пут. Овај процес можете замислити као торањ скица. Да бисте добили контролер (доњи контролер у подножју торња или било који у средини) прво морате уклонити све што лежи на врху. И, сходно томе, последњи комад постављен на торањ, прво се уклања приликом рашчлањивања куле. Овај принцип организовања меморије и рада са њим диктира њена економија. Стацк се константно брише и сваки пут када га користи једна процедура.

Стацк ради у асемблеру

Идентификатори, цели бројеви, симболи, коментари, еквивалентност

Идентификатор у асемблеру програмског језика има исто значење као у било ком другом. Дозвољена су латинична слова, бројеви и симболи "_", ".", "?", "@", "$". У овом случају, велика и мала слова су еквивалентна, а тачка може бити само први знак идентификатора.

Интегер бројеви у асемблеру могу бити специфицирани у референтним системима са базама 2, 8, 10 и 16. Сваки други унос бројева ће асемблер сматрати као идентификатор.

Дозвољено је да се користе и апострофи и цитати у писаним карактерним подацима. Ако треба да наведете једну од њих у низу знакова, правила су следећа:

  • у линији затвореној у апострофима, цитати су означени једном, апостроф - два пута: 'не може', 'рекао је' бити или не бити ';
  • за низ који се налази у наводницима, правило је супротно: дупли наводници су дуплицирани, апострофи су означени као: "није могао", "Мој омиљени бар је" "Црна мачка" "".

Да би навели коментаре на језику асемблера, користи се симбол са зарезом - ";". Допуштено је користити коментаре и на почетку реда и након наредбе. Коментар завршава с новом линијом.

Директива еквиваленције се користи на сличан начин као и други константни изрази. Еквивалентност је назначена на следећи начин:

  EQU  

Тако у програму сви догађаји ће бити замењен са на мјесту на којем је могуће назначити цијели број, адресу, низ или друго име. ЕКУ директива је слична у свом раду на #дефине у Ц ++.

Директиве о подацима

Укуцани су језици високог нивоа (Ц ++, Пасцал). То јест, они користе податке који имају одређени тип, постоје функције за њихову обраду, итд. У асемблеру програмског језика не постоји таква ствар. Постоји само 5 директива за дефинисање података:

  1. ДБ - Бите: додељује 1 бајт за променљиву.
  2. ДВ - Ворд: изаберите 2 бајта.
  3. ДД - Двострука реч: изаберите 4 бајта.
  4. ДК - Куад ворд: изаберите 8 бајтова.
  5. ДТ - Десет бајтова: додељује 10 бајтова за променљиву.

Слово Д значи Дефине.

Свака директива се може користити за декларисање било којих података и поља. Међутим, за низове се препоручује ДБ.

Синтакса:

  DQ [, ]   DQ [, ]   DQ [, ] 

Као операнд, дозвољено је користити бројеве, симболе и знак питања - “?”, Означавајући варијаблу без иницијализације. Размотрите примере:

 real1 DD 12.34char db 'c'ar2 db '123456',0 ; массив из 7 байтnum1 db 11001001b ; двоичное числоnum2 dw 7777o ; восьмеричное числоnum3 dd -890d ; десятичное числоnum4 dd 0beah ; шестнадцатеричное числоvar1 dd ? ; переменная без начального значенияar3 dd 50 dup (0) ; массив из 50 инициализированных эл-товar4 dq 5 dup (0, 1, 1.25) ; массив из 15 эл-тов, инициализированный повторами 0, 1 и 1.25 

Команде (упутства)

Синтакса наредби за монтажу или инструкција асемблера је следећа:

    

Ознака (ознака :) мора да се заврши двоточком и може се поставити на посебну линију. Ознаке се користе за упућивање на наредбе унутар програма.

Упутства указују на операцију коју треба извршити. У асемблеру су операције представљене у облику словних скраћеница како би се олакшало разумијевање. Упутства се такође могу назвати мнемоника.

У улози операнда команде могу бити:

  • регистрима којима се приступа по њиховим именима;
  • константе;
  • адресе.

Више о адресама

Адреса се може преносити на неколико начина:

  1. У облику имена променљиве, који је у асемблеру синоним за адресу.
  2. Ако је варијабла низ, онда се приступ елементу низа појављује кроз име његове варијабле и помака. За ово постоје два облика: [<име> + <погон>] и <име> [<побољшање]. Имајте на уму да офсет није индекс у низу, већ величина у бајтовима. Сам програмер мора да схвати колико се офсет мора извршити у бајтовима да би се добио жељени елемент низа.
  3. Можете користити регистре. Да бисте приступили меморији у којој је регистар похрањен, морате користити углате заграде: [ебк], [еди].
  4. [] - заграде дозвољавају коришћење сложених израза у себи за израчунавање адресе: [еси + 2 * еак].

У асемблеру, адреса се преноси кроз углате заграде. Пошто је променљива и адреса, може се користити са или без угластих заграда.

Адреса у асемблеру

Поред тога, постоје скраћенице у асемблеру: р за регистре, м за меморију и и за операнд. Ове скраћенице се користе са бројевима 8, 16 и 32 за означавање величине операнда: р8, м16, и32, итд.

 add i8/i16/i32, m8/m16/m32 ;суммирование операнда с ячейкой памяти 

Мов наредба или напријед

Ова инструкција је главна међу наредбама асемблера. Омогућава вам да у регистар запишете вредност другог регистра, меморијске ћелије или константе. Он такође уписује вредност регистра или константе у меморијску ћелију. Синтакса команде:

 MOV ,  MOV ,  

Постоје и друге команде у процесору за имплементацију преноса. На пример, КСЦХГ је наредба за размену операнада вредностима. Али са становишта програмера, сви су они имплементирани кроз основну МОВ команду. Размотрите примере:

 MOV i, 0 ; Записать в i значение 0MOV ECX, EBX ; Пересылка значения EBX в ECX 

У облику операнда може да делује као регистар и меморијска ћелија. Међутим, ако се садржај двају регистара може преуредити, онда нема две меморијске ћелије. Треба пазити да су операнди исте величине. Такође имајте на уму да МОВ наредба не мијења вриједност заставица.

Команда МОВ у асемблеру

Тоолкит

Даљње теоријско проучавање асемблера може бити тешко, па бисте требали размислити о алатима који се користе за развој програма с њим. Овде ћете видети само кратку листу популарних алата:

  • Борланд Турбо Ассемблер (ТАСМ) је један од најпопуларнијих алата. Добро за развој под ДОС-ом и лоше за Виндовс.
  • Мицрософт Мацро Ассемблер (МАСМ) је пакет за развој асемблерског језика у Виндовс окружењу. Она постоји и одвојено и као уграђена функција у окружењу Висуал Студио. Језички асемблер и високи ниво су често компатибилни. У смислу да ово друго може директно користити асемблер. На пример, Ц ++.
  • Нетвиде Ассемблер (НАСМ) је популарни бесплатни асемблер за Интелову архитектуру.
Програмирање асемблера

Постоји много алата. У овом случају, треба посебно напоменути да не постоји јединствени стандард за синтаксу асемблера. Постоје 2 најпогоднија: АТ & Т синтакса, фокусирана на производне процесоре који нису Интел, и, сходно томе, Интел синтакса.

Упркос очигледној сложености, асемблер је једноставан програмски језик, који је лако разумљив. Стога, можете без проблема користити образовну литературу о сличности "асемблер за лутке" и научити овај предивни језик.