Assembly-sprog og x86-systemprogrammering på lavt niveau · Lektion

Datarepræsentation og typer

Lær, hvordan heltal, tegn og andre datatyper lagres i hukommelsen og manipuleres ved hjælp af Assembly-instruktioner.

Lektion 3 af 411 trin

Datarepræsentation og typer er en gratis Assembly-sprog og x86-systemprogrammering på lavt niveau-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Assembly-sprog og x86-systemprogrammering på lavt niveau, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset indeholder 4 lektioner i alt.

Hvad er datatyper?

I assemblysprog arbejder vi direkte med rå bits og bytes. Men hvordan ved vi, om en sekvens af bytes repræsenterer et tal, et tegn eller noget andet?

Det er her, datatyper kommer ind i billedet! De giver de rå data betydning og hjælper både dig og CPU'en med at forstå, hvordan oplysningerne skal fortolkes og behandles.

Almindelige datastørrelser

x86-assembly definerer standardstørrelser for data. De svarer direkte til, hvor meget hukommelsesplads et stykke data optager:

  • BYTE: 8 bit
  • WORD: 16 bit (2 bytes)
  • DWORD: Doubleword, 32 bit (4 bytes)
  • QWORD: Quadword, 64 bit (8 bytes)

Disse størrelser er grundlæggende, når du erklærer variable og arbejder med registre.

Definition af data: DB, DW, DD, DQ

For at gemme data i hukommelsen bruger vi direktiver til datadefinition. De fortæller assemblere at reservere plads og eventuelt initialisere den med en værdi.

  • DB: Define Byte (8 bit)
  • DW: Define Word (16 bit)
  • DD: Define Doubleword (32 bit)
  • DQ: Define Quadword (64 bit)

Du vil ofte se disse, når du opretter variable i dine programmer.

Ufortegnede heltal

Et ufortegnet heltal er et tal, der altid er positivt eller nul. Alle dets bit bruges til at repræsentere tallets størrelse.

Et 8-bit ufortegnet byte kan for eksempel indeholde værdier fra 0 til 255. Et 16-bit ufortegnet word kan indeholde værdier fra 0 til 65,535.

Når du ikke har brug for negative tal, er ufortegnede typer ideelle og giver dig et større positivt interval.

Fortegnede heltal (toerkomplement)

Fortegnede heltal kan repræsentere både positive og negative værdier. Én bit, normalt den mest betydende bit (MSB), bruges til at angive fortegnet (0 for positivt, 1 for negativt).

Negative tal repræsenteres typisk ved hjælp af toerkomplement. Dette system får aritmetiske operationer til at fungere problemfrit for både positive og negative værdier.

Et 8-bit fortegnet byte går fra -128 til +127.

Tegndata: ASCII

Tegn som 'A', 'b' eller '7' gemmes også som tal! Den mest almindelige standard til dette er ASCII (American Standard Code for Information Interchange).

Hvert tegn tildeles en unik numerisk værdi på 8 bit (1 byte). Tegnet 'A' repræsenteres for eksempel af decimalværdien 65 (eller hexadecimalværdien 0x41).

Du kan definere enkelte tegn eller hele strenge ved hjælp af direktivet DB.

Kode: Definition og adgang til data

Dette eksempel viser, hvordan du definerer forskellige datatyper og derefter indlæser deres værdier i CPU-registre. Det demonstrerer, hvordan assembly behandler disse navngivne hukommelsesplaceringer.

section .data
    ; Define various data types
    myByte  db 10        ; An 8-bit unsigned integer
    myWord  dw 256       ; A 16-bit unsigned integer
    myDword dd 65536     ; A 32-bit unsigned integer
    myChar  db 'X'       ; An 8-bit character (ASCII value 88)
    myString db "Hello", 0 ; A string (null-terminated)

section .text
    global _start

_start:
    ; Move byte into AL register
    mov al, [myByte]

    ; Move word into BX register
    mov bx, [myWord]

    ; Move dword into ECX register
    mov ecx, [myDword]

    ; Move char into DL register
    mov dl, [myChar]

    ; Exit gracefully (Linux syscall)
    mov eax, 1           ; sys_exit syscall number
    xor ebx, ebx         ; Exit code 0
    int 0x80             ; Invoke kernel

Fordele ved datajustering

Datajustering betyder, at data placeres i hukommelsen på en adresse, der er et multiplum af datastørrelsen. Et DWORD (4 bytes) kan for eksempel være justeret til en adresse, der ender på 0, 4, 8 eller C (hexadecimal).

Selvom det ikke er strengt nødvendigt på alle CPU'er, kan korrekt justering forbedre ydeevnen betydeligt. CPU'en kan hente justerede data mere effektivt, ofte med én enkelt hukommelsesadgang, så ekstra arbejde undgås.

Assemblere stiller nogle gange direktiver som ALIGN til rådighed for at hjælpe med at sikre korrekt justering.

Hvorfor datatyper er vigtige

Det er afgørende at forstå datatyper, fordi de bestemmer:

  • Hukommelsesforbrug: Hvor meget plads dine data optager.
  • Valg af instruktion: Hvilke assemblyinstruktioner (f.eks. ADD, MOV) der passer til datastørrelsen.
  • Fortolkning: Om CPU'en behandler 0xFF som 255 (ufortegnet) eller -1 (fortegnet).

Omhyggeligt valg af type forebygger fejl og sikrer, at dine programmer opfører sig som forventet på det laveste niveau.

Hurtigt tjek: Datastørrelser

Du har lært om almindelige datastørrelser, og hvordan de defineres. Lad os teste din viden!

Opsummering: Datarepræsentation

Flot klaret! Du har udforsket de grundlæggende begreber inden for datarepræsentation i x86-assembly.

  • Vi definerer data ved hjælp af direktiver som DB, DW, DD og DQ til forskellige størrelser.
  • Heltal kan være fortegnede (positive/negative) eller ufortegnede (kun positive).
  • Tegn gemmes ved hjælp af standarden ASCII, hvor hvert tegn har en numerisk værdi.
  • En forståelse af datajustering kan hjælpe med at optimere ydeevnen.

Derefter bygger vi videre på denne viden for at udføre mere komplekse operationer!

Gratis at komme i gang

Lær Assembly med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Datarepræsentation og typer” gratis?

Ja — hele teksten til “Datarepræsentation og typer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset, skal du opgradere til CoddyKit PRO. Assembly-sprog og x86-systemprogrammering på lavt niveau-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Datarepræsentation og typer”?

Lær, hvordan heltal, tegn og andre datatyper lagres i hukommelsen og manipuleres ved hjælp af Assembly-instruktioner. Du øver dig i Assembly-sprog og x86-systemprogrammering på lavt niveau med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Assembly-sprog og x86-systemprogrammering på lavt niveau?

Der kræves ingen tidligere erfaring. Assembly-sprog og x86-systemprogrammering på lavt niveau på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Datarepræsentation og typer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Assembly-sprog og x86-systemprogrammering på lavt niveau-lektion?

Ja. Alle Assembly-sprog og x86-systemprogrammering på lavt niveau-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. x86-registre forklaret
  2. Hukommelsesadresseringstilstande
  3. Datarepræsentation og typer
  4. FLAGS-registret og statusbits
← Tilbage til Assembly-sprog og x86-systemprogrammering på lavt niveau