Език на асемблера. Команди и монтажни възли

Статията ще обсъди основите на асемблерния език по отношение на архитектурата win32. Той представлява символичен запис на машинни кодове. На всеки компютър най-ниското ниво е хардуерът. Тук управлението на процеса се извършва чрез команди или инструкции на машинен език. Именно в тази област асемблерът трябва да работи.

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

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

Регистри

Регистрите в асемблера на езика наричат ​​клетките на паметта, разположени директно върху кристала с ALU (процесор). Особеността на този тип памет е скоростта на обращение към нея, която е много по-бърза от RAM на компютъра. Тя също се нарича супер-бърза RAM (SRAM или SRAM).


Съществуват следните видове регистри:
  • Общи регистри (RON).
  • Флагове.
  • Указател за командите.
  • Сегментни регистри.
  • Има 8 регистъра с общо предназначениеразмер 32 бита. Достъпът до EAX, ECX, EDX, EBX регистрите може да се извършва в 32-битов режим, 16-битови AX, BX, CX, DX и 8-битови AH и AL, BH и BL и т.н. E "в имената на регистрите означава Extended (разширен). Самите имена се свързват с техните имена на английски език:
  • Регистър на акумулатора (AX) - за аритметични операции.
  • Регистриращ брояч (CX) - за смени и цикли.
  • Регистър на данните (DX) - за аритметични операции и I /O операции.
  • Базов регистър (BX) - за указател към данните.
  • Регистър на указателя на стека (SP) - за горния указател на стека.
  • Регистър на базови указатели на стека (BP) - за индикатор на стека.
  • Регистър на индекс на източника (SI) - за индекса на изпращача (източник).
  • Регистър на индекс на дестинации (DI) - за получателя.
  • Специализацията на асемблера на езика RON е условна. Те могат да бъдат използвани във всяка операция. Някои команди обаче могат да прилагат само определени регистри. Например, командите за линия използват ESX за съхраняване на стойността на брояча. Регистър на флаговете. Това се отнася за байт, който може да приема стойности от 0 и 1. Наборът от всички флагове (около 30) показва състоянието на процесора. Примери за флагове: Carry Flag (CF) - флаг за прехвърляне, флаг за преливане (OF) - препълване, вложен флаг (NT) - флаг на задачите за гнездене и много други. Флаговете са разделени на 3 групи: състояние, управление и система.

    Указател за командване (EIP - указател за инструкции). Този регистър съдържа адреса на инструкцията, който трябва да бъде изпълнен следващия, ако няма други условия. Сегментни регистри (CS, DS, SS, ES, FS, GS). Тяхното присъствие в асемблер се диктува от специален контрол на оперативната памет, за да се увеличиизползване в програми. Благодарение на тях можете да управлявате памет до 4 GB. В архитектурата Win32 необходимостта от сегменти е изчезнала, но имената на регистрите са запазени и използвани по различен начин.

    Стек

    Това е област от паметта, посветена на работата на процедурите. Особеността на стека е, че последните записани в нея данни са прочетени първо. Или с други думи: първите записи на стека се извличат от последния. Представете си този процес като кула от пулове. За да получите контролер (най-долния пулт на основата на кулата или който и да е в средата), първо трябва да премахнете всички, които лежат отгоре. И, съответно, последният се поставя на кулата на контролера, а разборът на кулата се премахва първо. Такъв принцип на организиране на паметта и работата с него е продиктуван от неговата икономика. Стекът се почиства непрекъснато и във всеки момент от време се използва една процедура.

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

    Идентификаторът в асемблера на програмния език има същото значение, както във всеки друг. Разрешено е да се използват латински букви, цифри и символи "_", ".", "?", "@", "$". Големите и малки букви са еквивалентни, а точката може да бъде само първият знак от идентификатора. Целочислените числа в асемблера могат да бъдат определени в референтни системи с базите 2810 и 16. Всяко друго числово число ще се счита за идентификатор от съставителя на асемблера. При записването на символни данни е позволено да се използват както апострофи, така и цитати. Ако трябва да посочите един от тях в символния низ, тогава следващите правила:
  • на реда,затворени в апостроф, кавичките се отбелязват веднъж, апострофът е два пъти: "може" t "," той каза "да бъде или да не бъде"; , апострофите са обозначени като: "не могат", "Моят любим бар е" "Черна котка" "." низове и след командата, редът за коментари завършва с промяна на линията, директивата за еквивалентност се използва по подобен начин, както и в други езици, има постоянни изрази. Идентичността се посочва по следния метод:

    EQU

    Така в програмата всички събития ще бъдат заменени с на мястото, където е допустимо да се посочи цяло число, адрес, линия или друго име Директивата EQU е сходна в работата си с #define в C ++.

    & lt; /adsbygoogle.js">

    & lt; script & gt; (adsbygoogle = window.adsbygoogle || []). push ({});

    Директиви за данните

    Типични са езиците на високо ниво (C ++, Pascal). Това означава, че те използват данни от определен тип, има функции на тяхната обработка и т.н. В езика за програмиране няма асемблер. Има само 5 директиви за дефиниране на данни:

    1. DB - Byte: изберете 1 байт за променливата.
    2. DW-Word изберете 2 байта.
    3. ​​
    4. DD - Двойна дума изберете 4 байта.
    5. DQ - Quad дума за избор на 8 байта.
    6. DT - Десет байта: Изберете 10 байта за променливата.

    Буквата D означава дефиниране.

    Всяка директива може да се използва за деклариране на данни и масиви. Въпреки това, за низове препоръчваме използването на DB.

    Синтаксис:

    DQ [,]

    Като операнди е допустимо да се използват числа, символи и въпросителен знак "?" означава променлива без инициализация. Да разгледаме примерите:

    real1 DD 1234
    char db 'c'
    ar2 db '123456', 0; масив от 7 байта
    num1 db 11001001b; двоичен номер
    num2 dw 7777o; осмично число
    num3 dd -890d; десетично число
    num4dd 0beah; шестнадесетично число
    var1 dd? ; променлива без първоначална стойност
    ar3 dd 50 dup

    ; масив от 50 инициализирани имейла
    ar4 dq 5 dup (011.25); Масив от 15 змиорки, задействани от повторения 0 1 и 125

    Команди [инструкции]

    Синтаксисът на монтажния монтаж или инструкциите за асемблер са както следва:

    )
    & lt; script type = "text /javascript" & gt;
    може да blockSettings13 = {blockId: "R-A-116722-13", renderTo: "yandex_rtb_R-A-116722-13", horizontalAlign:! 1async:! 0};

    if (document.cookie.indexOf ("abmatch =") & gt; = 0) {
    blockSettings13 = {blockId: "RA-116722-13", renderTo: "yandex_rtb_R-A-116722- 13 ", horizontalAlign :! 1statId: 7async:! 0};
    }

    Функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya .Context.AdvManager.render (blockSettings13)}), e = b.getElementsByTagName ("скрипт") , d = b.createElement ("скрипт"), d.type = "text /javascript", d.src = "//an.yandex.ru/system/context.js", d.async =! 0e.parentNode.insertBefore (d, e)} (това, този.документ, "yandexContextAsyncCallbacks");
    : [; Коментар]

    Етикетът: задължително завършва с двоеточие и може подредени в отделен ред. Етикетите се използват за позоваване на команди вътре в програмата.

    Инструкциите уточняват операцията, която трябва да се извърши. В асемблер операции са представени под формата на азбучни съкращения за улесняване на разбирането. Инструкциите също могат да се наричат ​​мнемонични кодове.

    Следните операнди могат да действат като операнди:

    • регистри, които са адресирани към техните имена;
    • константи;
    • адреси.

    Повече за адреси

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

    1. Под формата на името на променливата, която в асемблера е синоним на адреса.
    2. Ако дадена променлива е масив, тогава обръщението към елемент на масив се осъществява чрез името на променливата и отместването. Има 2 форми за това: [+] и []. Трябва да се има предвид, че офсетът не е индекс в масива, а размер в байтове. Самият програмист трябва да разбере колко да направи промяна в байтове, за да получи желания елемент от масива.
    3. Можете да използвате регистри. За достъп до паметта, в която се съхранява делото, използвайте квадратните скоби: [ebx], [edi].
    4. [] - квадратните скоби позволяват използването на сложни изрази в себе си за изчисляване на адреса: [esi + 2 * eax].

    В асемблерния адрес се предава чрез квадратни скоби. Като се има предвид, че променливата е и адрес, тя може да се използва както с квадратни скоби, така и без тях.

    Освен това в асемблера има съкращения: r за регистрите, m за паметта и i за операнда. Тези съкращения се използват с цифрите 816 и 32 за указване на размера на операнда: r8 m16 i32 и т.н.

    добавят i8 /i16 /i32 m8 /m16 /m32; 108] 

    Mov команда или напред

    Тази инструкция е основната команда за сглобяване. Тя ви позволява да записвате в регистъра стойността на друг случай или клетка от паметта или константа. Тя също така пише в клетката на паметтастойност на регистъра или константа. Синтаксисът на командата:

    MOV,

    В процесора има и други команди за осъществяване на препращане. Например, XCHG е команда за обмен на стойности на операнди. Но от гледна точка на програмиста, всички те се изпълняват чрез командата на основния MOV. Да разгледаме примерите:

    MOV i, 0; Запишете в i стойност 0
    MOV ECX, EBX; Стойност на изпращане EBX на ECX


    Операндът може да действа като регистър и клетка на паметта. Въпреки това, ако съдържанието на два регистъра може да се пренареди, след това две клетки памет - не. Трябва да се внимава операндите да са с еднакъв размер. Също така имайте предвид, че командата MOV не променя стойността на флаговете.

    Toolkit

    По-нататъшно теоретично изследване на монтажника може да бъде трудно, така че трябва да се мисли за инструментите, използвани за разработване на програми с негова помощ. Ето само кратък списък с популярни инструменти:
  • Borland Turbo Assembler (TASM) е един от най-популярните инструменти. Добре е да се развива под DOS и лошо - под Windows.
  • Microsoft Macrom Assembler (MASM) е пакет за разработване на асемблер в средата на Windows. Той съществува както в изолация, така и под формата на вградена функция в средата на Visual Studio. Асемблер и езици на високо ниво често са съвместими. В смисъл, че последният може да използва асемблер директно. Например с ++.
  • Netwide Assembler (NASM) е популярен безплатен асемблер за архитектурата на Intel.
  • Има много налични инструменти. Трябва да се отбележи, че няма нито единстандартен асемблер за синтаксис. Има 2 най-приложими: AT & T-синтаксис, фокусиран върху Intel процесорите и съответно синтаксис на Intel. Въпреки очевидната сложност, асемблерът е прост език за програмиране, за да разбере какво не прави работа. Ето защо е безопасно да се използва образователна литература под формата на "асемблер за манекени" и да се изучава този чудесен език.

    Свързани публикации