W artykule omówiono podstawy języka asemblera w odniesieniu do architektury win32. Reprezentuje symboliczny zapis kodów maszynowych. W każdym komputerze najniższym poziomem jest sprzęt. Tutaj kontrola procesu odbywa się za pomocą poleceń lub instrukcji w języku maszynowym. Właśnie w tym obszarze asembler ma działać.
Programowanie asemblera
Pisanie programu asemblera jest niezwykle trudnym i kosztownym procesem. Aby stworzyć skuteczny algorytm, potrzebujesz głębokiego zrozumienia pracy komputera, znajomości szczegółów zespołu, a także większej uwagi i dokładności. Wydajność jest krytycznym parametrem dla programowania asemblera.
Główną zaletą języka asemblera jest to, że pozwala on tworzyć krótkie i szybkie programy. Z tego powodu stosuje się go z reguły do rozwiązywania wysoce wyspecjalizowanych zadań. Wymagany jest kod działający wydajnie ze składnikami sprzętowymi lub program wymagający pamięci lub środowiska wykonawczego.
Rejestry
Rejestry w asemblerze językowym zwane komórkami pamięci umieszczonymi bezpośrednio na krysztale za pomocą jednostki ALU (procesor). Osobliwością tego rodzaju pamięci jest szybkość jej obiegu, która jest znacznie szybsza niż pamięć RAM komputera. Jest również nazywany superszybką pamięcią RAM (SRAM lub SRAM).
Istnieją następujące rodzaje rejestrów:
Rejestry ogólne (RON). Flagi. Wskaźnik poleceń. Segmentuje rejestry.Jest 8 rejestrów ogólnego przeznaczenia, każdyrozmiar 32 bity. Dostęp do rejestrów EAX, ECX, EDX, EBX można wykonać w trybie 32-bitowym, 16-bitowym AX, BX, CX, DX i 8-bitowym AH i AL, BH i BL, itp. Litera " E "w nazwach rejestrów oznacza Rozszerzony (rozszerzony). Same nazwy są powiązane z ich nazwami w języku angielskim:
Rejestr akumulatorów (AX) - dla operacji arytmetycznych. Rejestr liczników (CX) - dla zmian i cykli. Rejestr danych (DX) - dla operacji arytmetycznych i operacji we /wy. Rejestr podstawowy (BX) - dla wskaźnika do danych. Rejestr wskaźnika stosu (SP) - dla wskaźnika stosu górnego. Rejestr wskaźnika bazy stosu (BP) - dla wskaźnika podstawowego stosu. Rejestr indeksu źródeł (SI) - dla indeksu nadawcy (źródło). Rejestr indeksu celu (DI) - dla odbiorcy.Specjalizacja asemblera języka RON jest warunkowa. Mogą być używane w dowolnej operacji. Jednak niektóre polecenia są w stanie zastosować tylko niektóre rejestry. Na przykład polecenia pętli używają ESX do przechowywania wartości licznika. Rejestr flag. Odnosi się to do bajtu, który może przyjąć wartości 0 i 1. Zbiór wszystkich flag (około 30) wskazuje stan procesora. Przykłady flag: Carry Flag (CF) - flaga transferu, flaga przepełnienia (OF) - przepełnienie, flaga zagnieżdżona (NT) - flaga zadań zagnieżdżania i wiele innych. Flagi są podzielone na 3 grupy: stan, zarządzanie i system.
Command Point (EIP - Wskaźnik instrukcji). Ten rejestr zawiera adres instrukcji, który musi zostać wykonany w następnej kolejności, jeśli nie ma innych warunków. Rejestry segmentów (CS, DS, SS, ES, FS, GS). Ich obecność w asemblerze jest podyktowana specjalną kontrolą pamięci operacyjnej, aby ją zwiększyćużywać w programach. Dzięki nim możesz zarządzać pamięcią do 4 GB. W architekturze Win32 zniknęła potrzeba segmentów, ale nazwy rejestrów są zachowywane i używane inaczej.
Stack
Jest to obszar pamięci przeznaczony do pracy z procedurami. Cechą stosu jest to, że ostatnie zapisane w nim dane są odczytywalne jako pierwsze. Lub innymi słowy: pierwsze rekordy stosu są wyodrębniane przez ostatnie. Wyobraź sobie ten proces jako wieżę warcabów. Aby uzyskać kontroler (dolny pionek na podstawie wieży lub inny w środku), musisz najpierw usunąć wszystkie kłamstwa z góry. I odpowiednio, ten ostatni jest umieszczony na wieży kontrolera, podczas gdy parsowanie wieży jest usuwane jako pierwsze. Taka zasada organizowania pamięci i pracy z nią dyktowana jest przez jej gospodarkę. Stos jest stale czyszczony iw każdej chwili używa go jedna procedura.
Identyfikatory, całkowite liczby, symbole, komentarze, równoważność
Identyfikator w języku programowania asemblera ma takie samo znaczenie jak w każdym innym. Dozwolone jest używanie łacińskich liter, cyfr i znaków "_", ".", "?", "@", "$". Duże i małe litery są równoważne, a kropka może być tylko pierwszym znakiem identyfikatora. Liczby całkowite w asemblerze można określić w systemach odniesienia o podstawie 2810 i 16. Każdy inny wpis liczbowy będzie uważany za identyfikator przez kompilator asemblera. W zapisie danych symbolicznych dozwolone jest stosowanie zarówno apostrofów, jak i cytatów. Jeśli musisz podać jeden z nich w ciągu znaków, wówczas następujące zasady:
na linii,apostrofami, cudzysłów wskazują raz apostrof - dwukrotnie: „może„t”,«powiedział: «Być albo nie być»»; do linii podjętej nóg, pleców reguł, powielane cytaty , apostrofy są określane jako: „nie może”, „Mój ulubiony bar jest” „Black Cat” „-” Użyjmy komentarze na początku „, komentując instrukcje w asemblerze wykorzystuje średnik.”. linia, a po zespole. Koniec linii comment feed. dyrektywę równoważności używany w podobny sposób jak w innych językach wskazywać konstantnыe wyraz. equi alentnist wyświetlane w następujący sposób:
EQU,
W ten sposób program wszystkie zdarzenia zostanie zastąpiony przez, w miejscu, gdzie jest to możliwe punktu całkowitej . adres linia lub dyrektywą EQU nazwa jest podobna do pracy w #define języku C ++
Związek pośredni. Script asynchroniczny = „//pagead2.googlesyndication.com/pagead/js /adsbygoogle.js">
& lt; skrypt & gt; (adsbygoogle = window.adsbygoogle || []). push ({});
,
Dyrektywa Danych
języki wysokiego poziomu (C ++, Pa) został naciśnięty. Oznacza to, że używają danych określonego typu, istnieją funkcje ich przetwarzania itp. W języku programowania nie ma asemblera. Istnieje tylko 5 dyrektyw dotyczących definicji danych:
- DB - Bajt: wybierz 1 bajt dla zmiennej.
- DW-Word wybierz 2 bajty.
- DD - Double word select 4 bytes.
- DQ - Quad słowo, aby wybrać 8 bajtów.
- DT - dziesięć bajtów: wybierz 10 bajtów dla zmiennej.
Litera D oznacza Zdefiniuj.
Do zadeklarowania jakichkolwiek danych i tablic można zastosować dowolną dyrektywę. Jednak w przypadku ciągów zalecamy używanie DB.
program
DQ, [ ]
, jako argumenty operacji dopuszcza się stosowanie numerów a znak zapytania "?" oznacza zmienną bez inicjalizacji. Rozważmy następujący przykład:
real1 DD 1234
znak db 'C'
dB Ar2 '123456' 0; Tablica 7 bajt
num1 dB 11001001b; liczba binarna
nr 2 dw 7777o; liczba ósemkowa
liczba3 dd -890d; liczba dziesiętna
num4dd 0beah; liczba szesnastkowa
var1 dd? ; zmienna bez wartości początkowej
ar3 dd 50 dup
; inicjowane Tablica 50 E-nia
, Ar4 dq 5 dup (011,25); tablicą 15 E-ing inicjowane powtórzeń 0 1 i 125
zespoły (instrukcje)
,
składni poleceń montażu lub asemblera instrukcji w następujący sposób:
, (74 )
Związek pośredni typu skrypt = "text /JavaScript" & gt;
zmienna blockSettings13 = {blockID "R-A-116722-13" renderTo "yandex_rtb_R A-116722-13" horizontalAlign :! 1async :! 0};
jeżeli (document.cookie.indexOf ("abmatch =") i GT = 0) {
blockSettings13 = {blockID "RA 116722-13" renderTo „yandex_rtb_R A-116722- 13”horizontalAlign :! 1statId: 7async :! 0};
}
! Zastosowanie (a, b, c, d, e) {A [c] = a [c] || [] do [C] .Push (funkcja () {Ya .Context.AdvManager.render (blockSettings13)}), e = b.getElementsByTagName ("scenariusz")d = b.createElement ("scenariusz") d.type = "text /JavaScript" d.src = "//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");
,
etykiet (label :) zawsze kończy okrężnicy i może ułożone w osobnej linii. Etykiety są używane w odniesieniu do poleceń wewnątrz programu.
Instrukcje określają operację do wykonania. W asemblerze operacje są przedstawiane w formie skrótów alfabetycznych w celu ułatwienia zrozumienia. Instrukcje można również nazwać kodami mnemonicznymi.
W adresie asemblera jest przesyłany w nawiasach kwadratowych. Biorąc pod uwagę, że zmienna jest również adresem, może być używana zarówno w nawiasach kwadratowych, jak i bez.
Ponadto nacięcia asemblera są następujące: R - do rejestru, m - dla pamięci i - dla argumentu. Skróty stosowane są z numerami 816 i 32 w celu wskazania wielkości operandu. R8 M16 i32 i tak dalej D.
instrukcji jest to główne zespoły montażowe. Pozwala na zapisanie w rejestrze wartości innego przypadku lub komórki pamięci lub stałej. Ona również pisze do komórki pamięcirejestruj wartość lub stałą. Składnia polecenia:
W procesorze są inne polecenia do wykonania przekazywania. Na przykład XCHG jest poleceniem do wymiany wartości operandów. Ale z punktu widzenia programisty wszystkie są realizowane za pomocą polecenia podstawowego MOV. Spójrzmy na przykłady: