Статията ще обсъди основите на асемблерния език по отношение на архитектурата win32. Той представлява символичен запис на машинни кодове. На всеки компютър най-ниското ниво е хардуерът. Тук управлението на процеса се извършва чрез команди или инструкции на машинен език. Именно в тази област асемблерът трябва да работи.
Програмиране на асемблер
Регистри
Съществуват следните видове регистри:
Стек
Идентификатори, цели числа, символи, коментари, еквивалентност
EQU
Така в програмата всички събития ще бъдат заменени с
& lt; script & gt; (adsbygoogle = window.adsbygoogle || []). push ({});
Директиви за данните
Типични са езиците на високо ниво (C ++, Pascal). Това означава, че те използват данни от определен тип, има функции на тяхната обработка и т.н. В езика за програмиране няма асемблер. Има само 5 директиви за дефиниране на данни:
- DB - Byte: изберете 1 байт за променливата.
- DW-Word изберете 2 байта.
- DD - Двойна дума изберете 4 байта.
- DQ - Quad дума за избор на 8 байта.
- 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");
Етикетът: задължително завършва с двоеточие и може подредени в отделен ред. Етикетите се използват за позоваване на команди вътре в програмата.
Инструкциите уточняват операцията, която трябва да се извърши. В асемблер операции са представени под формата на азбучни съкращения за улесняване на разбирането. Инструкциите също могат да се наричат мнемонични кодове.
Следните операнди могат да действат като операнди:
- регистри, които са адресирани към техните имена;
- константи;
- адреси.
Повече за адреси
Адресите могат да се предават по няколко начина:
- Под формата на името на променливата, която в асемблера е синоним на адреса.
- Ако дадена променлива е масив, тогава обръщението към елемент на масив се осъществява чрез името на променливата и отместването. Има 2 форми за това: [+] и []. Трябва да се има предвид, че офсетът не е индекс в масива, а размер в байтове. Самият програмист трябва да разбере колко да направи промяна в байтове, за да получи желания елемент от масива.
- Можете да използвате регистри. За достъп до паметта, в която се съхранява делото, използвайте квадратните скоби: [ebx], [edi].
- [] - квадратните скоби позволяват използването на сложни изрази в себе си за изчисляване на адреса: [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. Въпреки очевидната сложност, асемблерът е прост език за програмиране, за да разбере какво не прави работа. Ето защо е безопасно да се използва образователна литература под формата на "асемблер за манекени" и да се изучава този чудесен език.