Hvad er det hexadecimale talsystem i datalogi. Binært oktalt hexadecimalt talsystem

Det hexadecimale talsystem har et alfabet bestående af 16 cifre:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d, e, f.

Når du skriver et tal i det hexadecimale system, bruges bogstaverne A, B, C, D, E, F henholdsvis til at skrive cifrene, der angiver tallene 10, 11, 12. 13, 14. 15.

Konvertering af tal fra hexadecimal til decimal

Du kan konvertere et hvilket som helst hexadecimalt tal til decimal ved hjælp af den allerede kendte formel

Eksempler.

    AE07 16 =10∙16 3 +14∙16 2 +0∙16 1 +7∙16 0 =44551 10 .

    100 16 =1∙16 2 +0∙16 1 +0∙16 0 =256 10 .

    58 16 =5∙16 1 +8∙16 0 =.88 10 .

    2A 16 =2∙16 1 +10∙16 0 =42 10.

Konvertering af et tal fra decimalsystemet til hexadecimalt udføres på samme måde som til binært.

Konvertering af tal fra hexadecimal til binær og omvendt

Du kan konvertere ethvert hexadecimalt tal til binært som følger. Hvert ciffer i et hexadecimalt tal skrives som et firecifret binært tal - notesbog. Herefter kan nullerne til venstre kasseres.

2) 2A= 0010 1010 2 = 101010 2 .

3) 58 16 = 0101 1000 2 = 1011000 2 .

Omvendt kan du konvertere ethvert binært tal til hexadecimal på samme måde. Hvert fjerde binære ciffer, der tælles fra højre mod venstre, skrives som et hexadecimalt ciffer. Disse tal er også placeret fra højre mod venstre.

Eksempler.

2. 101010 2 = 10 1010 2 = 2A.

3. 1011000 2 = 101 1000 2 = 58 16 .

Oktalt talsystem

Det oktale talsystem har et alfabet bestående af 8 cifre:

0, 1, 2, 3, 4, 5, 6, 7.

Konvertering af et tal fra decimalsystemet til oktal og tilbage udføres på samme måde som konvertering til/fra binær.

Konvertering af tal fra oktale til binære og tilbage

Hvert ciffer i et oktalt tal skrives som et trecifret binært tal - treklang.

Eksempler.

2563 8 = 010 101 110 011 2 =10101110011 2 .

1001101 2 = 001 001 101 2 = 115 8 .

Metodemateriale til laboratorielektion nr. 1

Laboratorieundervisningens emne: Talsystemer. Måle information.

Antal timer: 2.

Eksempler med løsninger

    Oversættelse fras -ært system til 10-ært system. Antag, at vi skal konvertere et tal i et bestemt talsystem til decimal. For at gøre dette skal du repræsentere det i formularen

11100110 2 = 1∙2 7 + 1∙2 6 + 1∙2 5 + 0∙2 4 + 0∙2 3 + 1∙2 2 + 1∙2 1 + 0∙2 0 = 128 + 64 + 32 + 4 + 2 = 230 10 .

2401 5 = 2∙5 3 + 4∙5 2 + 0∙5 1 + 1∙5 0 = 250 + 100 + 0 + 1 = 351.

    Konvertering fra 10-cifret system tils -ichnaya.

2.1 98 10 → X 2.

Vi dividerer tallet med 2. Så dividerer vi den ufuldstændige kvotient med 2. Vi fortsætter indtil den ufuldstændige kvotient bliver mindre end 2, dvs. lig med 1.

    98: 2 = 49. Resten - 0 .

    49: 2 = 24. Resten - 1 .

    24: 2 = 12. Resten - 0 .

    12: 2 = 6. Resten - 0 .

    6: 2 = 3. Resten - 0 .

    3: 2 = 1 . Resten - 1 .

Da den sidste delkvotient er 1, er processen slut. Vi skriver alle de resterende ned fra bund til top, begyndende med den sidste ufuldstændige kvotient, og vi får tallet 1100010. Så 98 10 = 1100010 2.

2.2 2391 10 → X 16.

Divider tallet med 16. Divider derefter delkvotienten med 16. Fortsæt, indtil delkvotienten er mindre end 16.

    2391: 16 = 149. Resten - 7 .

    149: 16 = 9 . Resten - 5 .

Da den sidste delkvotient (9) er mindre end 16, er processen slut. Vi skriver, begyndende fra den sidste ufuldstændige kvotient, alle de resterende fra bund til top, og vi får tallet 957. Så 2391 10 = 957 16.

2.3 12165 10 → X 2.

Konverterer man ved division til det binære system, får man en ret besværlig proces. Du kan først konvertere tallet til oktal, og derefter erstatte de oktale cifre fra højre mod venstre med treklanger.

12165 10 = 27605 8 = 010 111 110 000 101 = 10111110000101.

    Bestemmelse af grundlaget for et talsystems .

En dreng skrev om sig selv: "Jeg har 24 fingre, 5 på hver hånd og 12 på mine fødder." Hvordan kan det være?

Løsning. Det er nødvendigt at bestemme grundlaget for talsystemet s. Da vi ved, at der kun er 10 tæer 10, så 12 s =1∙s+2 = 1010. Herfra får vi ligningen s + 2 = 10  s= 8. Så drengen mente tal i det oktale system. Faktisk er der 24 8 = 2∙8+4 = 20 10 tæer, og 12 8 = 1∙8+2 = 10 10 tæer.

Hexadecimalt talsystem(også kendt som hexadecimal kode) er et positionstalssystem med en heltalsbase på 16. Udtrykket hex (udtales hex, forkortelse for engelsk hexadecimal) bruges også nogle gange i litteraturen. Cifrene i dette talsystem bruges normalt i arabiske tal 0-9, såvel som de første tegn i det latinske alfabet A-F. Bogstaverne svarer til følgende decimalværdier:

  • * A -10;
  • *B—11;
  • *C—12;
  • *D -13;
  • * E - 14;
  • * F - 15.

Ti arabertal, kombineret med seks latinske bogstaver, udgør således systemets seksten cifre.

Forresten, på vores hjemmeside kan du konvertere enhver tekst til decimal, hexadecimal, binær kode ved hjælp af Online Code Calculator.

Ansøgning. Hex kode udbredt i programmering på lavt niveau samt i forskellige computerreferencedokumenter. Systemets popularitet retfærdiggøres af moderne computeres arkitektoniske løsninger: de har en byte (bestående af otte bit) som minimumsenhed af information - og værdien af ​​en byte skrives bekvemt ved hjælp af to hexadecimale cifre. Byteværdien kan variere fra #00 til #FF (0 til 255 i decimalnotation) - med andre ord vha. hexadecimal kode, kan du skrive en hvilken som helst tilstand af byten, mens der ikke er nogen "ekstra" cifre, der ikke bruges i optagelsen.

Kodet Unicode Fire hexadecimale cifre bruges til at registrere tegnnummeret. RGB-farvenotationen (rød, grøn, blå) bruger også ofte hexadecimal kode (for eksempel er #FF0000 en lys rød farvenotation).

En metode til at skrive hexadecimal kode.

Matematisk måde at skrive på. I matematisk notation skrives systemets grundflade i decimalform som en sænkning til højre for tallet. Decimalnotationen af ​​tallet 3032 kan skrives som 3032 10, i det hexadecimale system vil dette tal have notationen BD8 16.

I syntaksen af ​​programmeringssprog. Syntaksen for forskellige programmeringssprog sætter forskelligt formatet til at skrive et tal ved hjælp af hexadecimal kode:

* Syntaksen for nogle varianter af assemblersprog bruger det latinske bogstav "h", som er placeret til højre for tallet, for eksempel: 20Dh. Hvis et tal begynder med et latinsk bogstav, placeres et nul foran det, for eksempel: 0A0Bh. Dette gøres for at skelne værdier ved hjælp af konstanter fra konstanter. hexadecimal kode;

* I andre varianter af assembler, såvel som i Pascal (og dens varianter, såsom Delphi) og nogle grundlæggende dialekter, bruges præfikset "$": $A15;

* I HTML-markeringssproget såvel som i cascading CSS-filer bruges præfikset "#" til at angive en farve i RGB-format med en hexadecimal notation: #00DC00.

Hvordan konverteres hexadecimal kode til et andet system?

Konverter fra hexadecimal til decimal. For at udføre en konverteringsoperation fra det hexadecimale system til det decimale system, skal du repræsentere det oprindelige tal som summen af ​​produkterne af cifrene i cifrene i det hexadecimale tal og potensen af ​​grundtallet.

Binær SS

hex SS

For eksempel skal du oversætte det hexadecimale tal A14: det har tre cifre. Ved at bruge reglen skriver vi den som en sum af potenser med basis på 16:

A14 16 = 10,16 2 + 1,16 1 + 4,16 0 = 10,256 + 1,16 + 4,1 = 2560 + 16 + 4 = 2580 10

Konvertering af tal fra binære til hexadecimale og omvendt.

Et notesbogsbord bruges til oversættelse. For at konvertere et tal fra binær til decimal skal du opdele det i separate tetrads fra højre mod venstre, og derefter, ved hjælp af en tabel, erstatte hver tetrad med det tilsvarende hexadecimale ciffer. Desuden, hvis antallet af cifre ikke er et multiplum af fire, så er det nødvendigt at tilføje det tilsvarende antal nuller til højre for tallet, så det samlede antal binære cifre bliver et multiplum af fire.

Tabel med notesbøger til oversættelse.

For at konvertere fra hexadecimal til binær skal du udføre den omvendte operation: Erstat hvert ciffer med en tetrad fra tabellen.

Binær SS

Octal SS

Eksempel konvertering fra hexadecimal til binær: A5E 16 = 1010 0101 1110 = 101001011110 2

Eksempel konvertering fra binær til hexadecimal: 111100111 2 = 0001 1110 0111 = 1E7 16

I dette eksempel var antallet af cifre i det originale binære tal ikke fire (9), så indledende nuller blev tilføjet for et samlet antal cifre på 12.

Automatisk oversættelse. En hurtig konvertering fra det hexadecimale talsystem til et af de tre populære systemer (binært, oktalt og decimalt), samt den omvendte konvertering, kan udføres ved hjælp af en standardberegner, der følger med Windows OS. Åbn lommeregneren, vælg Vis -> Programmer i menuen. I denne tilstand kan du indstille det nummersystem, der aktuelt er i brug (se menuen til venstre: Hex, Dec, Oct, Bin). I dette tilfælde vil ændring af det aktuelle nummersystem automatisk producere en oversættelse.

For at skrive programmer i Assembly skal du forstå det hexadecimale talsystem. Der er ikke noget kompliceret ved det. Vi bruger decimalsystemet i livet. Jeg er sikker på, at I alle ved det, så jeg vil prøve at forklare det hexadecimale system ved hjælp af en analogi med decimalsystemet.

Så i decimalsystemet, hvis vi tilføjer et nul til et hvilket som helst tal til højre, vil dette tal stige med 10 gange. For eksempel: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 osv. I dette system bruger vi tal fra 0 til 9, dvs. ti forskellige tal (faktisk er det derfor, det kaldes decimal).

I det hexadecimale system bruger vi seksten "cifre". Jeg skrev specifikt ordet "cifre" i anførselstegn, fordi... Den bruger ikke kun tal. Og hvordan kan det egentlig være? Lad mig forklare: fra 0 til 9 tæller vi på samme måde som i decimal, men så bliver det sådan her: A, B, C, D, E, F. Tallet F er ikke svært tæller, vil det være lig med 15 i decimalsystemet (se tabel 1).

Decimaltal

Hexadecimalt tal

Tabel 1. Decimale og hexadecimale systemer.

Således, hvis vi tilføjer et nul til højre for et hvilket som helst tal i det hexadecimale system, så vil dette tal stige med16 enkelt gang.

Eksempel 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000 osv.

Var du i stand til at skelne hexadecimale tal fra decimaltal i eksempel 1? Og fra denne serie: 10, 12, 45, 64, 12, 8, 19? Disse kan være enten hexadecimale eller decimale. For at undgå forvirring og computeren for tydeligt at kunne skelne et tal fra et andet, er det i assembler sædvanligt at placere symbolet h eller H efter et hexadecimalt tal ( H er en forkortelse for engelsk. hexadecimal (hexadecimal). For kortheds skyld kaldes det nogle gange blot Hex ) . Og sæt ikke noget efter decimalen. Fordi tal fra 0 til 9 i begge systemer har samme betydning, så er tallene skrevet som 5 og 5h de samme.

At. Eksempel 1 (se ovenfor) ville være mere korrekt at skrive sådan her: 1 x 16 = 10h; 10 timer x 16 = 100 timer; 100 t x 16 = 1000 t. Eller sådan her: 1h x 10h = 10h; 10 timer x 10 timer = 100 timer; 100 timer x 10 timer = 1000 timer.

Vi vil se på, hvorfor det hexadecimale system er nødvendigt i efterfølgende udgaver. For nu, for vores eksempelprogram, som vil blive diskuteret nedenfor, skal vi vide om eksistensen af ​​hexadecimale tal.

Så lad os opsummere. Det hexadecimale talsystem består af 10 cifre (fra 0 til 9) og 6 bogstaver i det latinske alfabet (A, B, C, D, E, F). Hvis vi tilføjer et nul til højre for et hvilket som helst tal i det hexadecimale system, så vil dette tal stige med16 enkelt gang. Det er meget vigtigt at forstå dette emne, da vi konstant vil bruge det, når vi skriver programmer.

Nu lidt om hvordan jeg vil bygge eksempler i Assembly. Det er ikke helt bekvemt at præsentere dem i HTML-format, så først vil der være selve programkoden med nummererede linjer, og umiddelbart efter vil der være forklaringer og noter.

Sådan:

linjer Program kode
(1) mov ah,9

Forklaringer:

I linje (1) gør vi dette, og i linje (15) gør vi det.

Kæmpe anmodning: Kopier IKKE programmer fra en side til udklipsholderen og indsæt dem derefter i Notesblok (eller andre steder)! Indtast dem manuelt i en teksteditor. Hvis du har en printer, skal du vælge programmet, udskrive det valgte fragment og derefter overføre det til editoren fra papir. Alle eksempler skal skrives selv! Dette vil fremskynde hukommelsen af ​​operatører.

Og videre. Der er ingen forskel mellem små og store bogstaver i assembler. Optegnelser af formularen:

Montøren opfatter dem på samme måde. Du kan selvfølgelig tvinge assembleren til at skelne mellem små og store bogstaver, men det gør vi ikke lige nu. For at gøre programmet lettere at læse, er det bedst at skrive operatorer med små bogstaver og starte navnene på underrutiner og etiketter med store bogstaver. Men det afhænger af, hvem der har det godt.

Så lad os gå videre til vores første program:

(1) CSEG-segment

(2)org 100 timer

(4)Begynd:

(6) mov ah,9

(7) mov dx,offset Besked

(8) inden 21 timer

(10) inden 20 timer

(11)

(12) Besked db "Hej verden!$"

(13)CSEG slutter

(14) slut Begynd

For at forklare alle operatorerne i dette eksempel skal vi bruge flere udgaver. Derfor vil vi blot udelade beskrivelsen af ​​nogle kommandoer på dette stadium. Antag bare, at det er sådan det skal være. Vi vil se nærmere på disse operatører i den nærmeste fremtid. Så linjer nummereret (1), (2) og (13) ignorerer du simpelthen.

Linjerne (3), (5), (9) og (11) forbliver tomme. Dette gøres for klarhedens skyld. Samleren vil simpelthen udelade dem.

Lad os nu gå videre til at overveje de resterende operatører. Programkoden begynder med linje (4). Dette er et mærke, der fortæller assembleren til begyndelsen af ​​koden. Linje (14) indeholder operatorerne ende Begynd ( Begynd engelsk Start; ende ende). Dette er slutningen på programmet. Generelt i stedet for ordet Begynde noget andet kunne have været brugt. For eksempel, Start:. I dette tilfælde er vi nødt til at afslutte programmet Slutstart (14).

Linjer (6) (8) viser meddelelsen Hej, verden!. Her skal vi kort tale om processorregistre (vi vil se nærmere på dette emne i næste nummer).

Et processorregister er en specielt allokeret hukommelse til lagring af et nummer.

For eksempel:

Hvis vi vil tilføje to tal, så skriver vi i matematik sådan her:

A, B og C det er en slags registre (hvis vi taler om en computer), hvori nogle data kan lagres. A=5 kan læses som: Tildel A tallet 5 .

For at tildele et register en værdi, er der en mov-operator i Assembler (fra det engelske move load). Linje (6) skal læses således: Indlæses i registret A.H.nummer 9 (med andre ord, vi tildeler A.H.nummer 9). Nedenfor vil vi se på, hvorfor dette er nødvendigt.

I linje (7) indlæser vi i registret DX beskedadresse for output (i dette eksempel vil det være strengenHej verden!$).

Afbrydelser vil blive dækket i detaljer i efterfølgende udgaver. Her vil jeg sige et par ord.

Afbryde MS-DOS det er en slags underrutine (del MS-DOS), som ligger permanent i hukommelsen og kan kaldes til enhver tid fra ethvert program.

Lad os overveje ovenstående ved at bruge et eksempel (Noter med småt):

Program til at tilføje to tal

Hjemmeprogrammer

A=5 Vi indtaster værdien 5 i variabel A

B=8 i variabel B værdien 8

Opkaldsunderrutiner tilføjelse

nu er C lig med 13

A=10 det samme, bare forskellige tal

B=25

Opkaldsunderrutiner tilføjelse

nu er C lig med 35

Slut på programmet

Subrutine tilføjelse

C=A+B

Returner Fra Subrutine vi vender tilbage til det sted, hvorfra vi ringede

Afslut Subrutine

I dette eksempel kaldte vi subrutinen to gange Tilføjelse, som tilføjede to tal overført til det i variabler A og B . Resultatet placeres i variablen C. Når en subrutine kaldes, husker computeren, hvor den blev kaldt fra, og så, når subrutinen er færdig med at køre, vender computeren tilbage til det sted, hvorfra den blev kaldt. At. Du kan ringe til underrutiner et ubestemt antal gange hvor som helst.

Når vi udfører linje (8) i et Assembly-program, kalder vi en subrutine (i dette tilfælde kaldet en interrupt), som viser linjen på skærmen. Til dette formål placerer vi faktisk de nødvendige værdier i registre. Alt det nødvendige arbejde (output en linje, flytning af markøren) overtages af subrutinen. Denne linje kan læses sådan: ring til den enogtyvende interrupt ( int fra engelsk afbryde afbryde). Bemærk, at der efter tallet 21 er et bogstav h . Dette er, som vi allerede ved, et hexadecimalt tal (33 i decimal). Naturligvis er der intet, der forhindrer os i at udskifte ledningen int 21t til int 33. Programmet vil fungere korrekt. Det er almindelig praksis i Assembler at angive interrupt-nummeret i hexadecimal.

I linje (10) ringer vi, som du måske har gættet, til interrupt 20 h . For at kalde denne afbrydelse behøver du ikke angive nogen værdier i registrene. Den udfører kun én opgave: afslutte programmet (afslutte til DOS). Som et resultat af udførelsen af ​​interrupt 20h vil programmet vende tilbage til det sted, hvor det blev startet fra (indlæst, kaldt). For eksempel i Norton Commander eller DOS Navigator.

Linje (12) indeholder meddelelsen, der skal udsendes. Første ord ( besked meddelelse) meddelelsestitel. Det kan være hvad som helst (f.eks. rod eller snor osv.). OM Vær opmærksom på linje (7), hvor vi indlæser i registret DX vores beskedadresse.

Vi kan oprette en anden linje, som vi vil kalde Rod2. Start derefter fra linje (9) og indsæt følgende kommandoer:

(10) mov dx,offset Mess2

(13) Besked db "Hej verden!$"

(14) Mess2 db "Det er MIG! $"

og samle vores program igen. Jeg håber du kan gætte hvad der kommer til at ske

Vær opmærksom på det sidste tegn i linjerne Besked og Mess2 - $. Det peger mod slutningen af ​​linjen. Hvis vi fjerner det, så 21 h afbrydelsen fortsætter med at udsende, indtil den støder på et tegn et sted i hukommelsen $. På skærmen vil vi se skrald.

Hvis du har en debugger, kan du se, hvordan vores program vil fungere.

Formålet med dette nummer var ikke at forstå i detaljer med hver enkelt operatør. Dette er umuligt, fordi du har ikke nok viden endnu. Jeg tror, ​​at du efter 3-4 udgivelser vil forstå princippet og strukturen i et Assembly-program. Måske virkede forsamlingens sprog ekstremt kompliceret for dig, men tro mig, dette er ved første øjekast.

Hexadecimalt talsystem. vores første program.

For at skrive programmer i Assembly skal du forstå det hexadecimale talsystem. Der er ikke noget kompliceret ved det. Vi bruger decimalsystemet i livet. Jeg er sikker på, at I alle ved det, så jeg vil prøve at forklare det hexadecimale system ved hjælp af en analogi med decimalsystemet.

Så i decimalsystemet, hvis vi tilføjer et nul til et hvilket som helst tal til højre, vil dette tal stige med 10 gange. For eksempel: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 osv. I dette system bruger vi tal fra 0 til 9, dvs. ti forskellige tal (faktisk er det derfor, det kaldes decimal).

I det hexadecimale system bruger vi seksten "cifre". Jeg skrev specifikt ordet "cifre" i anførselstegn, fordi... Den bruger ikke kun tal. Og hvordan kan det egentlig være? Lad mig forklare: fra 0 til 9 tæller vi på samme måde som i decimal, men så bliver det sådan her: A, B, C, D, E, F. Tallet F er ikke svært tæller, vil det være lig med 15 i decimalsystemet (se tabel 1).

Decimaltal

Hexadecimalt tal

Tabel 1. Decimale og hexadecimale systemer.

Således, hvis vi tilføjer et nul til højre for et hvilket som helst tal i det hexadecimale system, så vil dette tal stige med16 enkelt gang.

Eksempel 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000 osv.

Var du i stand til at skelne hexadecimale tal fra decimaltal i eksempel 1? Og fra denne serie: 10, 12, 45, 64, 12, 8, 19? Disse kan være enten hexadecimale eller decimale. For at undgå forvirring og computeren for tydeligt at kunne skelne et tal fra et andet, er det i assembler sædvanligt at placere symbolet h eller H efter et hexadecimalt tal ( H er en forkortelse for engelsk. hexadecimal (hexadecimal). For kortheds skyld kaldes det nogle gange blot Hex ) . Og sæt ikke noget efter decimalen. Fordi tal fra 0 til 9 i begge systemer har samme betydning, så er tallene skrevet som 5 og 5h de samme.

At. Eksempel 1 (se ovenfor) ville være mere korrekt at skrive sådan her: 1 x 16 = 10h; 10 timer x 16 = 100 timer; 100 t x 16 = 1000 t. Eller sådan her: 1h x 10h = 10h; 10 timer x 10 timer = 100 timer; 100 timer x 10 timer = 1000 timer.

Vi vil se på, hvorfor det hexadecimale system er nødvendigt i efterfølgende udgaver. For nu, for vores eksempelprogram, som vil blive diskuteret nedenfor, skal vi vide om eksistensen af ​​hexadecimale tal.

Så lad os opsummere. Det hexadecimale talsystem består af 10 cifre (fra 0 til 9) og 6 bogstaver i det latinske alfabet (A, B, C, D, E, F). Hvis vi tilføjer et nul til højre for et hvilket som helst tal i det hexadecimale system, så vil dette tal stige med16 enkelt gang. Det er meget vigtigt at forstå dette emne, da vi konstant vil bruge det, når vi skriver programmer.

Nu lidt om hvordan jeg vil bygge eksempler i Assembly. Det er ikke helt bekvemt at præsentere dem i HTML-format, så først vil der være selve programkoden med nummererede linjer, og umiddelbart efter vil der være forklaringer og noter.

Sådan:

linjer Program kode
(1) mov ah,9

Forklaringer:

I linje (1) gør vi dette, og i linje (15) gør vi det.

Kæmpe anmodning: Kopier IKKE programmer fra en side til udklipsholderen og indsæt dem derefter i Notesblok (eller andre steder)! Indtast dem manuelt i en teksteditor. Hvis du har en printer, skal du vælge programmet, udskrive det valgte fragment og derefter overføre det til editoren fra papir. Alle eksempler skal skrives selv! Dette vil fremskynde hukommelsen af ​​operatører.

Og videre. Der er ingen forskel mellem små og store bogstaver i assembler. Optegnelser af formularen:

Montøren opfatter dem på samme måde. Du kan selvfølgelig tvinge assembleren til at skelne mellem små og store bogstaver, men det gør vi ikke lige nu. For at gøre programmet lettere at læse, er det bedst at skrive operatorer med små bogstaver og starte navnene på underrutiner og etiketter med store bogstaver. Men det afhænger af, hvem der har det godt.

Så lad os gå videre til vores første program:

(1) CSEG-segment

(2)org 100 timer

(4)Begynd:

(6) mov ah,9

(7) mov dx,offset Besked

(8) inden 21 timer

(10) inden 20 timer

(11)

(12) Besked db "Hej verden!$"

(13)CSEG slutter

(14) slut Begynd

For at forklare alle operatorerne i dette eksempel skal vi bruge flere udgaver. Derfor vil vi blot udelade beskrivelsen af ​​nogle kommandoer på dette stadium. Antag bare, at det er sådan det skal være. Vi vil se nærmere på disse operatører i den nærmeste fremtid. Så linjer nummereret (1), (2) og (13) ignorerer du simpelthen.

Linjerne (3), (5), (9) og (11) forbliver tomme. Dette gøres for klarhedens skyld. Samleren vil simpelthen udelade dem.

Lad os nu gå videre til at overveje de resterende operatører. Programkoden begynder med linje (4). Dette er et mærke, der fortæller assembleren til begyndelsen af ​​koden. Linje (14) indeholder operatorerne ende Begynd ( Begynd engelsk Start; ende ende). Dette er slutningen på programmet. Generelt i stedet for ordet Begynde noget andet kunne have været brugt. For eksempel, Start:. I dette tilfælde er vi nødt til at afslutte programmet Slutstart (14).

Linjer (6) (8) viser meddelelsen Hej, verden!. Her skal vi kort tale om processorregistre (vi vil se nærmere på dette emne i næste nummer).

Et processorregister er en specielt allokeret hukommelse til lagring af et nummer.

For eksempel:

Hvis vi vil tilføje to tal, så skriver vi i matematik sådan her:

A, B og C det er en slags registre (hvis vi taler om en computer), hvori nogle data kan lagres. A=5 kan læses som: Tildel A tallet 5 .

For at tildele et register en værdi, er der en mov-operator i Assembler (fra det engelske move load). Linje (6) skal læses således: Indlæses i registret A.H.nummer 9 (med andre ord, vi tildeler A.H.nummer 9). Nedenfor vil vi se på, hvorfor dette er nødvendigt.

I linje (7) indlæser vi i registret DX beskedadresse for output (i dette eksempel vil det være strengenHej verden!$).

Afbrydelser vil blive dækket i detaljer i efterfølgende udgaver. Her vil jeg sige et par ord.

Afbryde MS-DOS det er en slags underrutine (del MS-DOS), som ligger permanent i hukommelsen og kan kaldes til enhver tid fra ethvert program.

Lad os overveje ovenstående ved at bruge et eksempel (Noter med småt):

Program til at tilføje to tal

Hjemmeprogrammer

A=5 Vi indtaster værdien 5 i variabel A

B=8 i variabel B værdien 8

Opkaldsunderrutiner tilføjelse

nu er C lig med 13

A=10 det samme, bare forskellige tal

B=25

Opkaldsunderrutiner tilføjelse

nu er C lig med 35

Slut på programmet

Subrutine tilføjelse

C=A+B

Returner Fra Subrutine vi vender tilbage til det sted, hvorfra vi ringede

Afslut Subrutine

I dette eksempel kaldte vi subrutinen to gange Tilføjelse, som tilføjede to tal overført til det i variabler A og B . Resultatet placeres i variablen C. Når en subrutine kaldes, husker computeren, hvor den blev kaldt fra, og så, når subrutinen er færdig med at køre, vender computeren tilbage til det sted, hvorfra den blev kaldt. At. Du kan ringe til underrutiner et ubestemt antal gange hvor som helst.

Når vi udfører linje (8) i et Assembly-program, kalder vi en subrutine (i dette tilfælde kaldet en interrupt), som viser linjen på skærmen. Til dette formål placerer vi faktisk de nødvendige værdier i registre. Alt det nødvendige arbejde (output en linje, flytning af markøren) overtages af subrutinen. Denne linje kan læses sådan: ring til den enogtyvende interrupt ( int fra engelsk afbryde afbryde). Bemærk, at der efter tallet 21 er et bogstav h . Dette er, som vi allerede ved, et hexadecimalt tal (33 i decimal). Naturligvis er der intet, der forhindrer os i at udskifte ledningen int 21t til int 33. Programmet vil fungere korrekt. Det er almindelig praksis i Assembler at angive interrupt-nummeret i hexadecimal.

I linje (10) ringer vi, som du måske har gættet, til interrupt 20 h . For at kalde denne afbrydelse behøver du ikke angive nogen værdier i registrene. Den udfører kun én opgave: afslutte programmet (afslutte til DOS). Som et resultat af udførelsen af ​​interrupt 20h vil programmet vende tilbage til det sted, hvor det blev startet fra (indlæst, kaldt). For eksempel i Norton Commander eller DOS Navigator.

Linje (12) indeholder meddelelsen, der skal udsendes. Første ord ( besked meddelelse) meddelelsestitel. Det kan være hvad som helst (f.eks. rod eller snor osv.). OM Vær opmærksom på linje (7), hvor vi indlæser i registret DX vores beskedadresse.

Vi kan oprette en anden linje, som vi vil kalde Rod2. Start derefter fra linje (9) og indsæt følgende kommandoer:

(10) mov dx,offset Mess2

(13) Besked db "Hej verden!$"

(14) Mess2 db "Det er MIG! $"

og samle vores program igen. Jeg håber du kan gætte hvad der kommer til at ske

Vær opmærksom på det sidste tegn i linjerne Besked og Mess2 - $. Det peger mod slutningen af ​​linjen. Hvis vi fjerner det, så 21 h afbrydelsen fortsætter med at udsende, indtil den støder på et tegn et sted i hukommelsen $. På skærmen vil vi se skrald.

Hvis du har en debugger, kan du se, hvordan vores program vil fungere.

Formålet med dette nummer var ikke at forstå i detaljer med hver enkelt operatør. Dette er umuligt, fordi du har ikke nok viden endnu. Jeg tror, ​​at du efter 3-4 udgivelser vil forstå princippet og strukturen i et Assembly-program. Måske virkede forsamlingens sprog ekstremt kompliceret for dig, men tro mig, dette er ved første øjekast.

Hexadecimal notation ("Hex")- en bekvem måde at repræsentere binære værdier. Ligesom det decimale talsystem har en base på ti og det binære talsystem har en base på to, har det hexadecimale talsystem en base på seksten.

Grundtallet 16-talsystemet bruger tallene 0 til 9 og bogstaverne A til F. Figuren viser de ækvivalente decimale, binære og hexadecimale værdier for de binære tal 0000 til 1111. Vi finder det lettere at udtrykke en værdi som én hexadecimalt ciffer end som fire bits

Forstå bytes

Da 8 bits (bytes) er den standard binære gruppering, kan de binære tal 00000000 til 11111111 repræsenteres i hexadecimal notation som tallene 00 til FF. Indledende nuller vises altid for at fuldføre 8-bit repræsentationen. For eksempel ville den binære værdi 0000 1010 i hexadecimal være 0A.

Repræsentation af hexadecimale værdier

Bemærk venligst: Det er vigtigt at skelne hexadecimale værdier fra decimalværdier for tegnene 0 til 9, som vist i figuren.

Hexadecimale værdier er normalt repræsenteret i tekst af en værdi, der er indledt af 0x (såsom 0x73), eller ved at bruge et sænket skrift på 16. Mindre almindeligt kan de efterfølges af bogstavet H, såsom 73H. Men fordi sænket tekst ikke genkendes på kommandolinjen eller i programmeringsmiljøer, indledes de med "0x" (nul X) i den tekniske repræsentation af hexadecimale tal. Derfor vil eksemplerne ovenfor blive vist som henholdsvis 0x0A og 0x73.

Hexadecimal notation bruges til at repræsentere Ethernet MAC-adresser og IP Version 6-adresser.

Hexadecimale konverteringer

Konvertering af tal mellem decimale og hexadecimale værdier er simpelt, men hurtigt at dividere eller gange med 16 er ikke altid praktisk. Hvis sådanne konverteringer er nødvendige, er det normalt nemmere at konvertere en decimal eller hexadecimal værdi til binær og derefter konvertere den binære værdi til decimal eller hexadecimal, afhængigt af hvad du ønsker at få.

Med praksis er det muligt at genkende de binære bitmønstre, der svarer til decimale og hexadecimale værdier. Figuren viser disse mønstre for nogle 8-bit værdier.