|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Hur ser maskinkod ut och hur skiljer sig den från programmeringsspråk på hög nivå?

    Låt oss bryta ner maskinkoden och hur den står i kontrast till programmeringsspråk på hög nivå.

    Hur ser maskinkod ut?

    Maskinkod är programmeringsspråket på lägsta nivå. Den består av råa binära instruktioner (sekvenser av 0s och 1s) att en dators centrala bearbetningsenhet (CPU) direkt kan utföra. Här är en konceptuell look:

    * binär representation: Maskinkodinstruktioner representeras i binär (BASE-2). Varje instruktion är en sekvens av bitar.

    * opcoder och operander: En instruktion har vanligtvis två delar:

    * opcode (driftskod): Anger åtgärden som ska utföras (t.ex. lägg till, subtrahera, flytta data, hoppa till en annan del av programmet). Opkoden är ett binärt nummer.

    * operander: Anger data eller minnesplatser som instruktionen kommer att fungera på. Operander kan vara:

    * Register: Små, höghastighetslagringsplatser inom CPU.

    * Minnesadresser: Platser i datorns huvudminne (RAM).

    * Omedelbara värden: Konstantvärden inbäddade direkt i instruktionen.

    * Exempel (konceptuell):

    Låt oss låtsas att vi har en mycket förenklad maskin:

    * opcode: `0001 'kan betyda" tillägg "

    * Register 1: `001`

    * Register 2: `010`

    * Register 3: `011`

    Maskinkodinstruktionen `0001 001 010 011` kan betyda:" Lägg till innehållet i register 1 i innehållet i register 2 och lagra resultatet i register 3. "

    * hexadecimal representation (vanligt): Eftersom binär är svårt för människor att läsa och skriva, representeras ofta maskinkod i hexadecimal (BASE-16). Hexadecimal använder siffror 0-9 och bokstäver A-F för att representera grupper om 4 bitar. Detta gör det lite mer läsbart, men det är fortfarande väldigt låg nivå. Exemplet ovan kan representeras som något som `1123 'i hexadecimal (varje hex -siffra representerar 4 bitar).

    * Exempel (Intel x86 - Förenklad): En mycket förenklad monteringsrepresentation av maskinkod:

    `` `

    MOV EAX, 10; Flytta värdet 10 till EAX -registret

    lägg till EAX, 5; Lägg till värdet 5 i EAX -registret

    `` `

    Den faktiska maskinkoden för dessa instruktioner skulle vara en serie hexadecimala byte, vilket är extremt svårt att tolka direkt. En demonterare skulle behövas för att konvertera hexen tillbaka till något som monteringsspråket som visas.

    Hur maskinkod skiljer sig från språk på hög nivå

    Här är en tabell som sammanfattar de viktigaste skillnaderna:

    | Funktion | Maskikod | Språk på hög nivå (t.ex. Python, Java, C ++) |

    | ------------------- | ------------------------------------------------------------------------------------------------------- |

    | abstraktion | Mycket låg nivå (ingen abstraktion) | Hög nivå (massor av abstraktion) |

    | läsbarhet | Extremt svårt för människor att läsa | Relativt lätt att läsa och förstå |

    | portabilitet | Inte bärbar (maskinspecifik) | Bärbar (med tolkar eller kompilatorer) |

    | Instruktionsuppsättning | Begränsat, baserat på CPU:s instruktionsuppsättning | Rik, tillhandahåller komplexa operationer |

    | Utvecklingstid | Mycket långsam | Mycket snabbare |

    | felsökning | Extremt svårt | Enklare, med felsökare och felmeddelanden |

    | Minneshantering | Manual (programmerare styrminne) | Ofta automatisk (skräpuppsamling) |

    | Översättning | Ingen översättning behövs (direkt exekvering) | Kräver sammanställning eller tolkning |

    | exempel | `10110000 00001010` (Hypotetisk) | `x =10 + 5` |

    Förklaring av skillnaderna:

    * Abstraktion: Språk på hög nivå ger abstraktioner, som är förenklade representationer av komplexa underliggande processer. Till exempel kan du lägga till två nummer med `+` operatören i Python. Maskinkod kräver att du ladda siffrorna manuellt i register, använder lämplig "lägg till" -instruktion och lagra resultatet.

    * läsbarhet: Språk på hög nivå använder engelskliknande nyckelord och syntax, vilket gör dem lättare att läsa och förstå. Maskinkod är bara en ström av siffror.

    * Portabilitet: Maskinkod är bunden till en specifik CPU -arkitektur (t.ex. Intel X86, ARM). Kod skriven för en arkitektur kommer inte att köras på en annan utan betydande modifiering. Språk på hög nivå är utformade för att vara mer bärbara. De kan sammanställas eller tolkas på olika plattformar.

    * Instruktionsuppsättning: Maskinkod har en begränsad uppsättning instruktioner som direkt motsvarar vad CPU kan göra. Språk på hög nivå har en mycket rikare uppsättning operationer, inklusive komplexa datastrukturer, kontrollflödesuttalanden (IF/annars, slingor) och inbyggda funktioner.

    * Utvecklingstid: Att skriva program direkt i maskinkod är extremt tidskrävande och felaktigt. Språk på hög nivå påskyndar utvecklingen avsevärt.

    * felsökning: Debugging maskinkod är mycket svårt. Du måste analysera råminnesinnehållet och CPU -register för att hitta fel. Språk på hög nivå tillhandahåller felsökare och felmeddelanden som hjälper dig att identifiera och fixa problem.

    * Minneshantering: På vissa språk på hög nivå (som C och C ++) har du manuell kontroll över minnesallokering och återlämnande. I andra (som Java och Python) är minneshantering till stor del automatisk genom en process som kallas skräpsamling. Maskinkodprogrammering kräver att du hanterar minnet direkt.

    * Översättning: Språk på hög nivå kan inte köras direkt av CPU. De måste översättas till maskinkod (eller en mellanliggande bytekod som sedan tolkas) genom en process som kallas sammanställning eller tolkning.

    Varför maskinkod är viktigt (även om du sällan skriver det direkt):

    * Förstå grunderna: Även om du troligen aldrig kommer att skriva maskinkod direkt, ger förståelse av principerna dig en djupare uppskattning för hur datorer fungerar.

    * kompilator/tolkdesign: Att känna till maskinkod hjälper dig att förstå hur kompilatorer och tolkar översätter kod på hög nivå till körbara instruktioner.

    * Prestanda Tuning: I sällsynta fall kan du behöva förstå den genererade maskinkoden för att optimera kritiska delar av ditt program för maximal prestanda. Detta görs ofta inom prestationskänsliga områden som spelutveckling eller vetenskaplig datoranvändning.

    * Säkerhet: Reverse Engineering Machine Code är en vanlig teknik som används i säkerhetsanalys för att identifiera sårbarheter i programvara.

    Sammanfattningsvis är maskinkod det grundläggande språket för datorer, men det är extremt låg nivå och svårt att arbeta med. Språk på hög nivå ger abstraktioner som gör programmering mycket enklare och mer produktiv.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Konvertera Clobs till texter i Oracle
    ·Hur Ren flytelement i CSS
    ·Så här aktiverar ARCHIVELOG läge för Oracle Databas…
    ·Ta bort en mapp i VB.Net
    ·Hur Suppleant flera rader i Apache
    ·Vilka kriterier bör beaktas när man väljer ett progr…
    ·Konvertera SQR data till ETL
    ·Hur man gör ett format Terminal Report
    ·Hur du formaterar decimaler i C #
    ·Ett duplicerat attribut Fel påträffades vid en XML Pa…
    Utvalda artiklarna
    ·Hur man använder LINQ att hitta Max i en lista
    ·Olika sätt att formatera datum i VBA
    ·Hur göra ett Quiz i Visual Basic
    ·Hur man avgör en flerdimensionell array Storlek i Visu…
    ·Skillnad mellan Identifiera och icke-identifierande Rel…
    ·Skaffa läget av en lista i Python
    ·Handledning för DirectX Pixel Shader
    ·MySQL Text Vs . Varchar
    ·Konvertera P12 med keytool
    ·Hur kan jag kontrollera Python Indrag i VIM
    Copyright © Dator Kunskap https://www.dator.xyz