Maskinkod som ett programmeringsspråk. Assembler-språk

datorer

Monteringsspråket (eller monteringsenheten) ärprogrammeringsspråket på låg nivå för en dator eller annan firmware, där det finns en korrelation mellan språket och instruktionen av arkitekturens maskinkod. Varje maskinorienterat språk (i professionell terminologi - "samlare") hänvisar till en specifik datorarkitektur. Däremot är de flesta programmeringsspråken på hög nivå tvärplattform, men kräver tolkning eller sammanställning.

Plattforminriktad kod kan ocksåring ett symboliskt språk eller uppsättning instruktioner som exekveras direkt av datorns centrala processor. Varje program som utförs av processorn består av en serie instruktioner. Maskinkod, per definition, är den lägsta programmeringsgraden synlig för en programmerare.

maskinkod

användningen av

Många operationer kräver en eller fleraoperander som kan bygga fullständiga instruktioner, och många montörer kan acceptera uttryck av tal och konstanter, samt register och etiketter som operander. Detta frigör specialisten i programmering på språket för maskinkoden från tråkiga repetitiva beräkningar. Beroende på arkitekturen kan dessa element också kombineras för specifika instruktioner eller adresseringslägen med hjälp av förskjutningar eller annan data, såväl som fasta adresser. Många "samlare" erbjuder ytterligare mekanismer för att underlätta programutveckling, styra byggprocessen och felsöka stöd.

Historiskt perspektiv

Det första monteringsspråket utvecklades 1947Kathleen Booth för ARC2 vid Birkbeck University of London medan han arbetade med John von Neumann och Herman Goldstin vid Institute for Advanced Study. SOAP (Symbolic Optimal Assembly Program) var ett monteringsspråk för IBM 650, skapat av Stan Pole 1955.

Historiskt har många mjukvarulösningar varitskrivs endast i assembler. OS: er skrivs uteslutande i detta språk före införandet av Burroughs MCP (1961), som skrevs i Executive Systems Problem Oriented Language (ESPOL). Många kommersiella applikationer skrevs på ett maskinorienterat språk, inklusive ett stort antal IBM-huvudframesprogram som skapades av IT-jättar. COBOL och FORTRAN så småningom trångt ut det mesta av arbetet, även om många stora organisationer behöll monteringsapplikationsinfrastrukturer på 1990-talet.

vad är binär kod

De flesta av de tidiga mikrodatorer var baseradepå monteringsspråk med manuell kodning, inklusive de flesta operativsystem och storskaliga applikationer. Detta beror på det faktum att dessa maskiner hade svåra resursbegränsningar, laddat individuellt minne och visningsarkitektur och tillhandahöll begränsade systemtjänster med fel. Kanske viktigare var avsaknaden av förstklassiga språkkompilatorer på hög nivå som var lämpliga för användning i en mikrodator, vilket gjorde att datorns kodkod var svår.

Tillämpningsområde

Sammansättningsspråk eliminerar det mesta av problemet,tråkig och tidskrävande programmering på montering av första generationen, nödvändig på de tidigaste datorerna. Detta frigör programmerare från rutinen för att memorera numeriska koder och beräkna adresser. I inledningsskedet användes "montörer" allmänt för alla typer av programmering. Men i slutet av 1980-talet. deras användning har i stor utsträckning ersatts av språk på högre nivå på jakt efter förbättrad programmeringsprestanda. Idag används assembler-språket fortfarande för direkt hårdvaruutveckling, tillgång till specialiserade processorinstruktioner, eller för att lösa kritiska prestandaproblem. Typiska applikationer inkluderar drivrutiner, lågnivåbaserade inbyggda system och realtidsparametrar.

Prover av ansökan

Typiska exempel på stora program på monteringsspråk är IBM PC DOS-operativsystem, Turbo Pascal-kompilator och tidiga applikationer som Lotus 1-2-3-kalkylarkprogram.

opkoder

Maskinorienterat språk - Primärt språkutveckling för många populära hemdatorer från 1980-talet och 1990-talet (som MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga och Atari ST). Detta beror på att de tolkade BASIC-dialogen på dessa system gav låg exekveringshastighet, samt begränsade möjligheter till fullständig användning av befintlig utrustning. Vissa system har till och med en integrerad utvecklingsmiljö (IDE) med högutvecklade felsökningsverktyg och makroobjekt. Vissa kompilatorer tillgängliga för Radio Shack TRS-80 och dess efterträdare har haft möjlighet att kombinera den inbyggda byggkällan med högnivåprogram. Efter sammanställning genererade inline-monteraren inline binär kod.

Maskinkod för dummies. terminologi

Assemblerprogrammet skapar driftskoder avöversättning av mnemoniska och syntaktiska regler för operationer och adresseringslägen i deras numeriska ekvivalenter. Denna representation innefattar typiskt en operationskod, såväl som andra kontrollbitar och data. Monteraren beräknar också konstanta uttryck och definierar symboliska namn för minnesplatser och andra objekt.

Monteringsmaskinens instruktionskoder kan ocksåutföra några enkla typer av optimering beroende på kommandosatsen. Ett specifikt exempel på detta kan vara de populära x86 "samlarna" från olika leverantörer. De flesta av dem kan utföra övergångskommandoutbyten i ett antal pass, på begäran. Det kan också utföra enkla omgrupperingar eller införande av instruktioner, som till exempel vissa montörer för RISC-arkitekturer, som kan hjälpa till att optimera intelligent kommandotidsplanering för att maximera användningen av CPU-rörledningen.

Liksom tidiga programmeringsspråk somFortran, Algol, Cobol och Lisp, montörer har varit tillgängliga sedan 1950-talet, som de första generationerna av textbaserade datorgränssnitt. Samlarna uppträdde emellertid först eftersom de är mycket enklare att skriva än kompilatorer för högnivå språk. Detta beror på det faktum att varje mnemonic, såväl som adresseringslägen och operandor av instruktioner, översätts till numeriska representationer av varje specifik instruktion utan ett stort sammanhang eller en analys. Det fanns också ett antal klasser av översättare och halvautomatiska kodgeneratorer med egenskaper som liknar både församlingar och språk på hög nivå, och hastighetskoden är förmodligen ett av de mest kända exemplen.

Antal pass

Det finns två typer av programmering i assembler, baserat på antalet passeringar genom källan (med antalet försök att läsa) för att skapa en objektfil.

maskinspråk
Enkeltpassmonterare går igenom källkoden en gång. Alla tecken som används före definitionen kräver errata i slutet av objektkoden.
Multi-pass assemblers skapa tabeller med alla tecken och deras värden i de första passagerna och använd sedan tabellen i efterföljande pass för att generera kod.

Ursprunglig anledning till användningen-pass samlare hade monteringshastighet - ofta krävde det andra passet återspolning och återläsning av programkällan till tejp. Senare datorer med mycket större mängder minne (speciellt för att lagra diskar) hade utrymme att utföra all nödvändig bearbetning utan omläsning. Fördelen med en multi-pass assembler är att frånvaron av fel leder till det faktum att bindningsprocessen (eller laddning av programmet, om assembleren direkt skapar körbar kod) är snabbare.

Vad är binär kod?

Program skrivet i monteringsspråkbestår av en serie processorer, mnemonic instruktioner och meta-operatörer (kända som direktiv, pseudo-instruktioner och pseudo-ops), kommentarer och data. Sammansättning språkinstruktioner består vanligtvis av en opcode mnemonic. Det följs av en lista över data, argument eller parametrar. De översätts av montören till maskinens språkinstruktioner som laddas i minnet och körs ut.

Till exempel berättar anvisningarna nedanx86 / IA-32 processor flyttar 8-bitars värde för att registrera. Den binära koden för detta kommando är 10110, följt av en 3-bitars identifierare för vilken registret används. AL-identifieraren är 000, så följande kod laddar AL-registret med data 01100001.

Frågan uppstår: Vad är binär kod? Detta är ett kodningssystem med binära siffror "0" och "1" för att representera ett brev, nummer eller annan symbol på en dator eller annan elektronisk enhet.

Exempel på maskinkod: 10110000 01100001.

Tekniska egenskaper

Konvertera ett monteringsspråk till maskinkod ärmonteringsjobb. Den omvända processen utförs med hjälp av en disassembler. Till skillnad från språk på hög nivå finns en en-till-en-korrespondens mellan uppsättningen enkla monteringsoperatörer och maskinens språkinstruktioner. I vissa fall kan samlaren dock tillhandahålla pseudoinstruktioner (makron). De täcker flera instruktioner för maskinens språk för att tillhandahålla allmänt nödvändig funktionalitet. De flesta kompletterande montörer ger också ett rikt makro språk som används av säljare och programmerare för att generera mer komplexa koder och datasekvenser.

programmering i assembler

Varje datorarkitektur har sin egeneget maskinspråk. Datorer skiljer sig åt i antal och typer av operationer som de stöder, i olika storlekar och i antalet register samt i datapresentationer i förvaret. Medan de flesta allmänt tillgängliga datorer kan utföra nästan samma funktionalitet, är de sätt på vilka de gör det annorlunda. De respektive monteringsspråken speglar dessa skillnader.

Många uppsättningar mnemonics eller syntax påAssembler kan existera för en enda uppsättning kommandon, vanligtvis skapad i olika program. I dessa fall är den mest populära i regel den som tillhandahålls av tillverkaren och används i dess dokumentation.

Design Language

Det finns en stor grad av mångfald iSom författare klassificerar samlare de tillämpningar och nomenklaturer som de använder. I synnerhet beskriver en del allt som skiljer sig från en maskin eller utökad mnemonic, som en pseudo-operation. Den grundläggande monteringsordlistan består av ett system av kommandon - tre huvudtyper av instruktioner som används för att definiera programvaruoperationer:

  • opcode mnemonics;
  • datadefinitioner;
  • kollektivdirektiv.

Opcode mnemonics och extended mnemonics

Instruktioner skrivna i monteringsspråkelementär, till skillnad från på hög nivå språk. I regel är mnemonics (godtyckliga tecken) en symbol för en enda körbar kodinstruktion. Varje instruktion består vanligen av en opcode plus noll eller flera operander. De flesta kommandon hänvisar till ett eller två värden.

Utökad mnemonik används ofta förspecialiserad användning av instruktioner - för syften inte uppenbart från manualens namn. Till exempel har många processorer inte en explicit NOP-instruktion, men har inbyggda algoritmer som används för detta ändamål.

plattformsorienterad kod

Många samlare stöder elementära inbäddade makron som kan generera två eller flera maskininstruktioner.

Datadirektiv

Det finns instruktioner förartikeldefinitioner för lagring av data och variabler. De definierar datatyp, längd och justering. Dessa anvisningar kan också avgöra tillgängligheten av information för externa program (samlas separat) eller endast för det program där datasektionen är definierad. Vissa montörer definierar dem som pseudooperatörer.

Monteringsdirektiv

Kollektörsdirektiv, även kallade pseudokodereller pseudo-ops, är kommandon som tillhandahålls till monteringsenheten och riktar den för att utföra andra operationer än monteringsanvisningar. Direktiv påverkar monteringsarbetarens arbete och kan påverka objektkoden, symboltabellen, listningsfilen och värdena för de interna monteringsparametrarna. Ibland är termen pseudokod reserverad för direktiv som genererar objektkod.

Pseudo-ops namn börjar ofta med en punkt,att skilja sig från maskinkommandon. En annan vanlig användning av pseudo-ops är att reservera lagringsområden för runtime data och eventuellt initiera innehållet till kända värden.

kommandosystem

Självdokumentationskod

Karaktärsbyggare tillåter programmerareassociera godtyckliga namn (etiketter eller tecken) med minnesceller och olika konstanter. Ofta är varje konstant värde och variabel tilldelat sitt eget namn, så instruktioner kan referera till dessa platser med namn, vilket bidrar till självdokumenteringskoden. I exekverbar kod motsvarar namnet på någon subrutin sin ingångspunkt, så alla samtal till subrutinen kan använda sitt namn. Inuti rutinerna tilldelas etiketter GOTO. Många samlare stöder lokala tecken som är lexiskt annorlunda än vanliga tecken.

NASM-montörer ger flexiblateckenhantering, så att programmerare hanterar olika namnområden, beräknar automatiskt förskjutningar i datastrukturer och tilldelar etiketter som hänvisar till bokstavliga värden eller resultatet av enkla beräkningar som utförs av en assembler. Genvägar kan också användas för att initiera konstanter och variabler med flyttbara adresser.

Sammansättningsspråk, som de flesta andra språkdator, tillåter dig att lägga till kommentarer till källkoden för programmet, vilket kommer att ignoreras under byggprocessen. Rättslig kommentar är viktig i monteringsspråket, eftersom definitionen och syftet med en sekvens binära maskininstruktioner är svår att bestämma. "Obehandlad" (utan att kommentera) monteringsspråk som skapats av kompilatorer eller disassembler är ganska svårt att läsa när förändringar behöver göras.