D in een hexadecimaal systeem. Binair octaal hexadecimaal systeem

Hexadecimale invoer ("hex") - een handige manier om binaire waarden te vertegenwoordigen. Net zoals het decimale nummersysteem de basis heeft van tien en binaire - twee, heeft het hexadecimale systeem een \u200b\u200bbasis van zestien.

Het meetsysteem met een basis 16 maakt gebruik van getallen van 0 tot 9 en de brief van A tot F. De figuur toont de equivalente decimale, binaire en hexadecimale waarden voor binaire getallen van 0000 tot 1111. Het is gemakkelijker voor ons om de waarde in de vorm van een hexadecimale figuur dan in de vorm van vier bits.

Byte begrijpen

Gezien het feit dat 8 bits (bytes) standaard binaire groepering zijn, kunnen binaire getallen van 00000000 tot 11111111 worden vertegenwoordigd in hexadecimale record als nummers van 00 tot FF. De eerste nullen worden altijd weergegeven om de 8-bits prestaties te voltooien. Binaire waarde 0000 1010 in hexadecimale vorm zal bijvoorbeeld 0a zijn.

Presentatie van hexadecimale waarden

Opmerking: Het is belangrijk om hexadecimale waarden te onderscheiden van decimale waarden voor tekens van 0 tot 9, zoals getoond in de figuur.

Hexadecimale waarden worden meestal weergegeven in de tekstwaarde waarop 0x wordt voorafgegaan (bijvoorbeeld 0x73), of met behulp van de lagere index 16. Minder vaak kunnen ze vergezeld worden door de letter H, bijvoorbeeld 73h. Aangezien de tekst van de lagere index niet wordt herkend in de opdrachtregel, noch in programmeeromgevingen, in de technische weergave van hexadecimale nummers voorafgaand aan "0x" (nul X). Daarom worden respectievelijk voorbeelden hierboven weergegeven in de vorm 0x0A en 0x73.

Hexadecimal wordt gebruikt om de Ethernet Mac-adressen en IP-versie 6-adressen weer te geven.

Hexadecimale transformaties

De transformatie van de nummers tussen decimale en hexadecimale waarden is eenvoudig, maar de snelle divisie of vermenigvuldiging door 16 is niet altijd handig. Als dergelijke conversies nodig zijn, is het meestal gemakkelijker om een \u200b\u200bdecimale of hexadecimale waarde te converteren naar binair, en vervolgens binaire waarde converteren naar decimaal of hexadecimaal, afhankelijk van wat nodig is om te krijgen.

Met de praktijk is het mogelijk om binaire bitsjablonen te herkennen die overeenkomen met decimale en hexadecimale waarden. De tekening toont deze sjablonen voor sommige 8-bits waarden.

Is ontstaan \u200b\u200bin het oude Babylon. In India werkt het systeem in de vorm van een positionele decimale nummering met behulp van nul, de hindoe heeft een bepaald systeem van cijfers Arabische natie, ze hebben op hun beurt Europeanen nodig. In Europa begon dit systeem Arabisch te bellen.

Positioneersysteemopmerking - De waarde van alle nummers is afhankelijk van de positie (ontslag) van deze figuur is een van.

VoorbeeldenHet standaard decimale nummersysteem is een positiesysteem. Stel dat het een nummer krijgt453 . Cijfer 4 Geeft honderden aan en komt overeen met het nummer400, 5 - Aantal tientallen en komt overeen met de waarde50 , maar 3 - eenheden en betekenissen3 . Het is gemakkelijk om op te merken dat met toenemende afvoer de waarde verhoogt. Dus het opgegeven aantal noteert400+50+3=453.

Hex-nummersysteem.

Hex-nummer (hexadecimale nummers) - een positioneel nummersysteem. De basis van een hexadecimaal nummersysteem is het nummer 16.

Door de nummers in het octale nummersysteem te schrijven, krijgen we vrij compacte uitdrukkingen, maar in het hexadecimale systeem verkrijgen we uitdrukkingen compacter.

De eerste tien nummers van zestien hexadecimale nummers zijn het standaardinterval 0 - 9 Daaropvolgende zes cijfers worden uitgedrukt met behulp van de eerste letters van het Latijnse alfabet: EEN., B., C., D., E., F.. Overdracht van een hexadecimaal systeem naar een binair systeem en in de tegenovergestelde richting zijn op dezelfde manier gemaakt met het proces voor het octale systeem.

Het gebruik van een hexadecimaal nummersysteem.

Een hexadecimale nummersysteem is vrij goed gebruikt in moderne computers, bijv. Hiermee geeft u de kleur aan: #Ffffff. - Witte kleur.

Vertaling van nummers van het ene nummer systeem naar de andere.

Vertaling van nummers van een hexadecimaal systeem in decimaal.

Om een \u200b\u200bhexadecimaal getal mee te vertalen naar decimaal, moet een bepaald aantal worden gehouden aan het type van de hoeveelheid grades van de basis van een hexadecimaal nummersysteem aan de overeenkomstige cijfers in de lozingen van een hexadecimaal getal.

bijvoorbeeld, Vertaal hexadecimaal nummer 5A3in decimaal Hier 3 Figuren. Op basis van de bovenstaande regels geven we het aan het type van de hoeveelheid graden met de basis 16:

5A3 16 \u003d 3 · 16 0 + 10 · 16 1 + 5 · 16 2 \u003d 3 · 1 + 10 · 16 + 5 · 256 \u003d 3 + 160 + 1280 \u003d 1443 10

Vertaling van nummers van een binair systeem tot hexadecimaal en vice versa.

Om een \u200b\u200bbinair getal van meerdere gewaardeerde binaire getal naar een hexadecimale systeem over te dragen, is het noodzakelijk om het op de tetrades naar rechts te verdelen en alle tetrads van het overeenkomstige hexadecimale aantal te wijzigen. Om het nummer over te dragen van een hexadecimaal systeem tot binair, is het noodzakelijk om elke cijfers te wijzigen in de bijbehorende notebooks van de vertaaltabel, die u hieronder vindt.

bijvoorbeeld:

010110100011 2 \u003d 0101 1010 0011 \u003d 5A3 16

Number Translation Table.

Het algoritme voor de vertaling van nummers van het ene nummersysteem naar de andere.

1. Van het decimale nummersysteem:

  • we verdelen het nummer op basis van het vertaalde nummersysteem;
  • we vinden het saldo van het delen van het hele deel van het nummer;
  • we schrijven alle restanten van delen in de omgekeerde volgorde;

2. Vanuit het binaire nummer:

  • om over te zetten naar een decimaal nummersysteem, vinden we het bedrag van de producten van de basis 2 tot de juiste mate van ontslag;
  • om het nummer over te brengen naar het octale, deel het nummer op de triads.

Bijvoorbeeld 1000110 \u003d 1 000 110 \u003d 1068

  • om het nummer van het binaire nummersysteem naar hexadecimaal over te brengen, verdelen we het aantal in groepen van 4 categorieën.

Bijvoorbeeld 1000110 \u003d 100 0110 \u003d 4616.

Tabellen voor vertaling:

Binary SS

Hexadecimaal

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Binary SS

Veel gebruikers van computers begrijpen dat de computer werkt in een binair nummersysteem. Traditioneel wordt de staat van het binaire systeem vertegenwoordigd door figuren 0 en 1, hoewel, als we nauwkeuriger spreken, elke staat de aanwezigheid of afwezigheid van een signaal geeft, dat wil zeggen, het zal de staten correct "en" inclusief "of" nee "en" ja ". De staat is "UIT" of "NEE" komt overeen met het nummer 0 en de "ingeschakelde" of "ja" staat van het cijfer 1. Simple-gebruikers hebben meestal niet nodig om het computerapparaat volledig te begrijpen, maar het binaire nummersysteem maakt het nodig om te weten als verschillende beperkingen op basis van graad. Een meer compacte versie van het binaire systeem wordt hexadecimaal genoemd. Het nummer zestien is de vierde graad van twee. Hieruit volgt dat het voldoende is om gewoon lange binaire sequenties van nullen en eenheden in korte hexadecimale te vertalen. Om dit te doen, is het genoeg om de binaire sequentie in groepen van vier cijfers (cijfers) te breken, beginnend met de jongere ontlading (rechts) en elke groep te vervangen door de overeenkomstige hexadecimale waarde.

Het hexadecimale systeem is gebruikelijk om te gebruiken voor het gemak van de perceptie van binaire gegevens, omdat de vertalingen van het hexadecimale systeem in binair en rug eenvoudig worden vervangen door rijen. De computer werkt uitsluitend met binaire sequenties, en de hexadecimale opname van deze reeks is vier keer compact, omdat dit systeem een \u200b\u200bbasis 16 (2 16) en binary 2. De binaire reeks kan behoorlijk omslachtig zijn. Een 513-opname vereist bijvoorbeeld tien binaire lozingen (10.000.0001) en in hexadecimale slechts drie (201). Er zijn echter zestien verschillende symbolen vereist om alle hexadecimale nummers weer te geven, en niet tien, die worden gebruikt in het gebruikelijke decimale nummersysteem. De eerste tien tekens zijn symbolen in het bereik van 0 tot 9, de rest is de letters van het Latijnse alfabet in het bereik van A door F.-letters meestal (maar niet altijd) in de hoofdletters (titel) in een hexadecimale opname van het aantal. De eerste tien tekens (van 0 tot 9) worden op dezelfde manier geregistreerd als nummers in het decimale nummersysteem en komen overeen met deze. De letters in het interval van een software komen overeen met de waarden in het bereik van 10 tot 15.

Overweeg de correspondentie van de nummers van 0 tot 15 hexadecimale en binaire nummeringssystemen.

Decimaal record Hexadecimaal Binaire opname
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 EEN. 1010
11 B. 1011
12 C. 1100
13 D. 1101
14 E. 1110
15 F. 1111

Records 10, 11, enz. In decimaal komen binaire en hexadecimale systemen niet overeen met elkaar. Overweeg een klein voorbeeld. Laten we een hexadecimaal nummer 1a5e hebben. Om over te zetten naar binaire record, is het genoeg om simpelweg hexadecimale lozingen op de overeenkomstige binaire groepen te vervangen. Het blijkt 0001 1010 0101 1110. Als u onbeduidende nullen voor het nummer verwijdert en het kunt schrijven zonder scheiders, verkregen we 1101001011110. Voor de return Translation, delen we het nummer in groepen van vier cijfers die beginnen met de jongere (aan de rechterkant van vier cijfers kant), evenals voor het gemak, voeg onbelangrijke nullen toe in de oudere groep tot 4 cijfers. We verkrijgen 0001 1010 0101 1110. Vervang de groep terug naar de overeenkomstige hexadecimale waarden, we verkrijgen 1A5E.

Om een \u200b\u200bhexadecimaal nummer over te dragen naar een decimale weergave, kunt u het schema gebruiken waarvoor we decimale nummers schrijven. In het decimale getal duidt elke ontlading de juiste mate van het aantal tien te beginnen met nul met een toename van het rechtsboven. Een decimaal nummer 123 geeft bijvoorbeeld aan 1 * 10 2 + 2 * 10 1 + 3 * 10 0. Evenzo brengen we het nummer 1A5E over naar een decimaal nummersysteem. In een hexadecimale nummersysteem, evenals in een decimaal, geeft elke categorie de overeenkomstige mate van het getal zestien te beginnen met nul met een toename van het rechtsboven. Symbolen 1 en 5 in een hexadecimale nummersysteem komen overeen met waarden 1 en 5 in decimaal, en symbolen A en E - 10 en 14. Dan kan 1a5e worden weergegeven in een decimaal nummersysteem als 1 * 16 3 + 10 * 16 2 + 5 * 16 1 + 14 * 16 0 \u003d 6750. Het is echter niet nodig om ze in decimaal te vertalen om hexadecimale nummers te evalueren. Regels van vergelijking, toevoeging en vermenigvuldiging in dit systeem zijn hetzelfde als in het decimaal, het belangrijkste is niet te vergeten dat elke categorie waarden van 0 tot 15 kan bevatten. Voor een snellere vertaling van het nummer tussen het nummersysteem, U kunt de standaardcalculator in Windows gebruiken, genoeg om dit te doen in de geavanceerde calculatormodus Selecteer een nummersysteem, voert u het nummer in en selecteert u het gewenste nummersysteem waarin het resultaat moet worden weergegeven.

Aangezien hexadecimale getallen die alleen uit cijfers bestaan, gemakkelijk in de war raken met decimaal, worden ze meestal getest zodat het duidelijk is dat hexadecimaal wordt gebruikt. Hexadecimale records worden meestal bestempeld door de kleine letter "H" of de console "0x" toe te voegen voordat u het nummer invoert. Aldus kan het hexadecimale nummer 1a5e worden opgenomen als 1A5EH of 0X1A5E, waarbij "H" aan het einde of "0x" in het begin aangeeft dat hexadecimale record wordt gebruikt.

Voor de presentatie van getallen in de gebruikte microprocessor binair nummersysteem.
In dit geval kan elk digitaal signaal twee stabiele toestanden hebben: "hoog niveau" en "laag niveau". In het binaire nummersysteem voor het beeld van elk nummer twee cijfers worden respectievelijk gebruikt: 0 en 1. Willevens-nummer x \u003d A N A N-1 ..A 1 A 0, A -1 A -2 ... A -M zal worden vastgelegd in het binaire nummersysteem als

x \u003d een · 2 N + A N-1 · 2 N-1 + ... + A 1 · 2 1 + A 0 · 2 0 + A -1 · 2 -1 + A -2 · 2 -2 +. .. + A -M · 2 -M

waar een I. - binaire getallen (0 of 1).

Octaal nummersysteem

In het octale toeslagsysteem zijn de basisnummers getallen van 0 tot 7. 8 eenheden van de jongere afvoer worden gecombineerd tot een enkele senior.

Hex-nummer

In een hexadecimale systeem zijn de basisnummers getallen van 0 tot 15 inclusief. Voor de aanwijzing van basisnummers, meer dan 9 met één symbool, behalve Arabische nummers 0 ... 9, worden de letters van het Latijnse alfabet gebruikt in een hexadecimaal nummersysteem:

10 10 \u003d A 16 12 10 \u003d C 16 14 10 \u003d E 16
11 10 \u003d B 16 13 10 \u003d D 16 15 10 \u003d F16.

Het nummer 175 10 in een hexadecimale nummersysteem wordt bijvoorbeeld opgenomen als AF 16. Werkelijk,

10 · 16 1 + 15 · 16 0 \u003d 160 + 15 \u003d 175

De tabel toont de cijfers van 0 tot 16 in decimale, binaire, octale en hexadecimale chirurgische systemen.

Decimale Binair Octaal Hexadecimaal
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 EEN.
11 1011 13 B.
12 1100 14 C.
13 1101 15 D.
14 1110 16 E.
15 1111 17 F.
16 10000 20 10

Binaire octale en binaire hexadecimale transformaties

Het binaire nummersysteem is handig voor het uitvoeren van rekenkundige acties door hardware-microprocessor, maar ongemakkelijk voor perceptie door de mens, omdat het een groot aantal lozingen vereist. Daarom is in een binair nummeringssysteem in computationele technologie een brede aanvraag gevonden voor een octale en hexadecimale nummersysteem voor een compactere weergave van nummers.

Drie afvoer van het octale nummersysteem implementeert alle mogelijke combinaties van octale cijfers in een binair nummersysteem: van 0 (000) tot 7 (111). Om een \u200b\u200bbinair getal naar het octale te converteren, moet u binaire getallen combineren in groepen van 3 categorieën (triaden) in twee kanten, variërend van de scheider van het hele en fractionele deel. Indien nodig, links van het oorspronkelijke nummer, moet u nietwaarschijnlijk nullen toevoegen. Als het nummer een fractioneel onderdeel bevat, kunt u ook onbelangrijke nullen toevoegen aan de vulling van alle triaden. Dan wordt elke triade vervangen door een octaal cijfer.

Voorbeeld: Converteer het nummer 1101110.01 2 naar het octale nummersysteem.

We combineren binaire getallen in de triad aan de rechterkant. Te ontvangen

001 101 110,010 2 = 156,2 8 .

Om een \u200b\u200bnummer van het octale systeem naar binair te vertalen, moet u het elk octaal cijfer schrijven naar de binaire code:

156,2 8 = 001 101 110,010 2 .

Vier afvoer van een hexadecimale nummersysteem implementeert alle mogelijke combinaties van hexadecimale cijfers in een binair nummersysteem: van 0 (0000) tot F (1111). Om een \u200b\u200bbinair getal naar hexadecimaal te converteren, moet u binaire getallen combineren in groepen van 4 categorieën (notebooks) in twee kanten, variërend van de scheider van het hele en fractionele deel. Indien nodig, links van het oorspronkelijke nummer, moet u nietwaarschijnlijk nullen toevoegen. Als het nummer een fractioneel onderdeel bevat, moet u ook onbeduidende nullen toevoegen aan de vulling van alle tetrad. Vervolgens wordt elke tetade vervangen door een hexadecimaal getal.

Voorbeeld: Nummer 1101110,11 2 converteren naar een hexadecimaal nummersysteem.

We combineren binaire getallen in de tetrad aan de rechterkant. Te ontvangen

0110 1110.1100 2 \u003d 6E, C 16.

Om het nummer over te dragen van het hexadecimale systeem naar binair, moet u het elk hexadecimaal cijfer naar de binaire code schrijven.

Om programma's op de assembler te schrijven, is het noodzakelijk om te gaan met een hexadecimaal nummersysteem. Er is niets ingewikkeld in het. We gebruiken een decimaal systeem in het leven. Ik weet zeker dat jullie haar allemaal kennen, dus ik zal proberen het hexadecimale systeem uit te leggen, een analogie met decimaal uit te leggen.

Dus, in het decimale systeem, als we toevoegen aan een recht om nul toe te voegen, zal dit aantal met 10 keer toenemen. Bijvoorbeeld: 1 x 10 \u003d 10; 10 x 10 \u003d 100; 100 x 10 \u003d 1000, etc. In dit systeem gebruiken we nummers van 0 tot 9, d.w.z. Tien verschillende nummers (eigenlijk, dus het wordt decimaal genoemd).

In het hexadecimale systeem gebruiken we respectievelijk zestien "cijfers". Ik schreef specifiek het woord "cijfers" in citaten, omdat Het gebruikt niet alleen cijfers. En in feite, hoe gaat het? Ik leg uit: we beschouwen van 0 tot 9, evenals in decimaal, maar het zal zo zijn: A, B, C, D, E, F. Het nummer F, zo niet moeilijk bereken, het is gelijk aan 15 in het decimale systeem (zie tabel 1).

Decimaal getal

Hexadecimaal

Tabel 1. decimaal en hexadecimaal systeem.

Dus, als we een nummer in het hexadecimale systeem zijn om toe te voegen aan het recht van nul, neemt dit nummer in16 tijd.

Voorbeeld 1: 1 x 16 \u003d 10; 10 x 16 \u003d 100; 100 x 16 \u003d 1000, etc.

Ben je in staat geweest om te onderscheiden van 1 hexadecimale nummers van decimaal? En van deze rij: 10, 12, 45, 64, 12, 8, 19? Het kan zowel hexadecimaal als decimaal zijn. Om geen verwarring, en de computer kan zeker enkele nummers van anderen onderscheiden, in de assembler, werd het aanvaard na het hexadecimale nummer om het H of H-symbool ( H deze vermindering van het Engels. hexadecimaal (hexadecimaal). Voor de beknoptheid wordt het soms eenvoudig genoemd Hex. ) . En na het decimaal om niets te doen. Omdat Nummers van 0 tot 9 in beide systemen hebben dezelfde waarden, de getallen die zijn opgenomen als 5 en 5H zijn hetzelfde.

Zo Voorbeeld 1 (zie hierboven) zal correct opnemen als volgt: 1 x 16 \u003d 10H; 10H x 16 \u003d 100H; 100u x 16 \u003d 1000h. Hetzij als volgt: 1u x 10h \u003d 10H; 10u x 10h \u003d 100h; 100u x 10h \u003d 1000h.

Waarvoor u een hexadecimaal systeem nodig heeft, zullen we overwegen in latere releases. En op dit moment, voor ons voorbeeld, moeten we hieronder worden besproken, we moeten weten over het bestaan \u200b\u200bvan hexadecimale nummers.

Dus, vat samen. Het hexadecimale nummersysteem bestaat uit 10 cijfers (van 0 tot 9) en 6 letters van het Latijnse alfabet (A, B, C, D, E, F). Als u aan een bepaald aantal in het hexadecimale systeem aan de rechterkant toevoegt, zal dit nummer toenemen16 tijd. Het is erg belangrijk om dit onderwerp te begrijpen.Omdat we het voortdurend zullen gebruiken bij het schrijven van programma's.

Nu een beetje over hoe ik voorbeelden op de assembler zal bouwen. Het is niet helemaal handig om ze in een HTML-formaat te brengen, dus het zal eerst de programmacode zelf zijn met genummerde lijnen, en onmiddellijk nadat het uitleg en notities is.

Zoals dat:

Rij Programmacode
(1) mOV AH, 9

Verklaringen:

In de string (1) doen we iets, en in de lijn (15) dat.

Enorme aanvraag: Kopieer de software niet van de pagina naar de buffer en plaats ze vervolgens niet in de notebook (of ergens anders)! Herdruk ze handmatig in een teksteditor. Als er een printer is, selecteert u het programma, drukt u een geselecteerd fragment af en overbelast u vervolgens naar de papiereditor. Alle voorbeelden moeten onafhankelijk worden gescoord! Dit zal de memorisatie van operators versnellen.

En verder. De kleine letters en hoofdletters in de assembler verschillen niet. Records van het formulier:

Assembler wordt even gezien. Natuurlijk is het mogelijk om de assembler te dwingen om kleine letters en hoofdletters te onderscheiden, maar we zullen dit nog niet doen. Voor het gemak van het lezen van het programma worden de beste operators afgedrukt met kleine letters en starten de namen en labels uit de hoofdstad. Maar dit is hoe het handig zal zijn.

Dus, ga naar ons eerste programma:

(1) CSEG-segment

(2) org 100h

(4) Begin:

(6) MOV AH, 9

(7) MOV DX, offsetbericht

(8) int 21h

(10) int 20h

(11)

(12) Bericht DB "Hallo, World! $"

(13) CSEG eindigt

(14) einde begint

Om alle exploitanten van dit voorbeeld uit te leggen, hebben we verschillende problemen nodig. Daarom beschrijven we eenvoudigweg enkele opdrachten in dit stadium. Van mening dat het zo zou moeten zijn. In de zeer nabije toekomst zullen we deze operators in detail bekijken. Dus, lijnen met cijfers (1), (2) en (13) negeren u gewoon.

Rijen (3), (5), (9) en (11) blijven leeg. Dit gebeurt voor de duidelijkheid. Assembler zal eenvoudigweg worden weggelaten.

We wenden nu tot de overweging van de resterende operatoren. Van de string (4) begint de programmacode. Dit is een label dat de assembler aan het begin van de code aangeeft. In regel (14) staan \u200b\u200bhet einde beginnen met uitspraken (Begin Eng. Begin; Einde. einde). Dit is het einde van het programma. In het algemeen, in plaats van het woordBeginnen. het zou mogelijk zijn om iets anders te gebruiken. Bijvoorbeeld,Begin:. In dit geval zouden we het programma moeten voltooienEindstart (14).

Rijen (6) (8) Geef het bericht weer Hello, World!. Hier moet u het kort vertellen over de registers van de processor (in meer detail dit onderwerp zullen we naar het volgende probleem kijken).

Processor Register is een speciaal aangewezen geheugen voor het opslaan van een nummer.

Bijvoorbeeld:

Als we twee nummers willen vouwen, zullen we schrijven in de wiskunde als deze:

A, B en C dit is een soort registers (als we het hebben over een computer) waarin sommige gegevens kunnen worden opgeslagen. A \u003d 5 kan worden gelezen als: We toewijzen een nummer 5 .

Om een \u200b\u200bwaarde aan het register toe te wijzen, is er een MOV-operator in de assembler (van de DUT. Verplaatsen Download). De tekenreeks (6) moet zo worden gelezen: Download in register AH.nummer 9 (Simpel gezegd, wij wijzen toe AH.nummer 9). Hieronder zal kijken waarom het noodzakelijk is.

In lijn (7) laden in het registerDx Berichtadres voor uitvoer (in dit voorbeeld is het een touwHallo, World! $).

Onderbrekingen zullen in detail worden beschouwd in latere problemen. Hier zal ik een paar woorden vertellen.

Onderbreken MS-DOS. Dit is een soort subroutine (deel MS-DOS)die constant in het geheugen is en op elk moment van elk programma kan worden gebeld.

Overweeg het voorgaande in het voorbeeld (klein lettertype wijst opmerkingen toe):

Programma van toevoeging van twee nummers

Beginprogramma

A \u003d 5. in een variabele A Voert u de waarde van 5 in

B \u003d 8. in de variabele B-waarde 8

Daagverslaving uit

nu met gelijken 13

A \u003d 10. dezelfde, alleen andere nummers

B \u003d 25.

Daagverslaving uit

nu met gelijken 35

Eindprogramma

Programma-toevoeging

C \u003d A + B

Returnsprogramma terug naar de plaats waar veroorzaakt

Eindprogramma

In dit voorbeeld noemden we tweemaal een subroutine Toevoegingdie twee getallen opgevouwen in variabelen verzondenA en B. . Het resultaat wordt in de variabele S. geplaatst. Wanneer de subroutine wordt genoemd, onthoudt de computer zich uit welke ruimte het werd genoemd en toen het subroutine werk werk, keert de computer terug naar de plaats waar het werd genoemd. Zo U kunt subroutines een onbepaald aantal keren van overal bellen.

Bij het uitvoeren van een string (8) van het Assembler-programma noemen we een subroutine (in dit geval wordt het onderbreking genoemd), dat een tekenreeks naar het scherm weergeeft. Hiervoor plaatsen we eigenlijk de nodige waarden in de registers. Al het nodige werk (intrekking van de string, beweging van de cursor) neemt de subroutine over. Deze regel is zo te vinden: bel twintig eerste onderbreking (int van Engels. Onderbreken. onderbreken). Merk op dat na het nummer 21 de brief ish. . Dit, zoals we al weten, hexadecimaal nummer (33 in het decimale systeem). Natuurlijk voorkomen we ons niet van het vervangen van de string Int 21h op int 33. Het programma werkt correct. Net in de assembler is het gebruikelijk om het onderbrekingsnummer in het hexadecimale systeem aan te geven.

In de rij (10) veroorzaken wij, zoals u al geraden hebt, onderbreking 20h. . Om deze interrupt te bellen, hoeft u geen waarden in registers op te geven. Het voert slechts één taak uit: verlaat het programma (uitgang naar DOS). Als gevolg van de implementatie van de interrupt 20H, keert het programma terug naar waar het is gestart (geladen, veroorzaakt). Bijvoorbeeld inNorton Commander of DOS Navigator.

Rij (12) bevat een bericht om uit te voeren. Eerste woord (bericht bericht) Berichtnaam. Het kan iedereen zijn (bijvoorbeeldpuinhoop of string, enz.). OVER borst online (7), waarin we naar het register downloadenDx adres van ons bericht.

Je kunt een andere regel maken die ons laten bellenMess2. Begin vanaf de tekenreeks (9) de volgende opdrachten:

(10) MOV DX, OFFSET MESS2

(13) Bericht DB "Hallo, World! $"

(14) Mess2 DB "Dit is mij! $"

en assembleer ons programma opnieuw. Ik hoop dat je al hebt geraden wat er zal gebeuren

Let op het laatste symbool in lijnenBericht en Mess2 - $. Het geeft het einde van de lijn aan. Als we het verwijderen, dan 21h. onderbreking zal de uitvoer voortzetten totdat het symbool ergens in het geheugen is $. Op het scherm zullen we zien onzin .

Als u een foutopsporing hebt, kunt u zien hoe ons programma werkt.

Het doel van dit probleem werd niet begrepen in detail bij elke operator. Het is onmogelijk, omdat Je hebt nog steeds geen kennis. Ik geloof dat u na 3-4 problemen het principe en de structuur van het Assembler-programma zult begrijpen. Misschien leek je de assembler-taal buitengewoon moeilijk, maar dat, geloof me, op het eerste gezicht.