Heksadesimal systemtabell. Binært oktalt heksadesimalt tallsystem

For å skrive programmer i Assembler, må du forstå det heksadesimale tallsystemet. Det er ikke noe komplisert med det. Vi bruker desimalsystemet i livet vårt. Jeg er sikker på at dere alle vet det, så jeg skal prøve å forklare det heksadesimale systemet analogt med desimal.

Så, i desimalsystemet, hvis vi legger til null til et hvilket som helst tall til høyre, vil dette tallet øke 10 ganger. For eksempel: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 osv. I dette systemet bruker vi tall fra 0 til 9, dvs. ti forskjellige sifre (faktisk er det derfor det kalles desimal).

I heksadesimal bruker vi henholdsvis seksten "siffer". Jeg skrev med vilje ordet "siffer" i anførselstegn, tk. den bruker mer enn tall. Faktisk, hvordan er det? Jeg forklarer: vi teller fra 0 til 9 på samme måte som i desimal, men da blir det slik: A, B, C, D, E, F. Tallet F, uansett hvor vanskelig det er telle, vil det være lik 15 i desimalsystem (se tabell. 1).

Desimal

Heksadesimalt tall

Tabell 1. Desimal- og heksadesimale systemer.

Hvis vi legger null til høyre til et hvilket som helst tall i det heksadesimale systemet, vil dette tallet øke med16 en gang.

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

Klarte du å skille mellom heksadesimale og desimale tall i eksempel 1? Og fra denne raden: 10, 12, 45, 64, 12, 8, 19? Den kan være enten heksadesimal eller desimal. For å unngå forvirring, og datamaskinen unikt kan skille noen tall fra andre, er det vanlig i Assembler å sette tegnet h eller H etter et heksadesimalt tall ( H er forkortelse for engelsk. heksadesimal (heksadesimal). For korthets skyld kalles det noen ganger ganske enkelt Hex ) . Og etter desimal ikke legg noe. Fordi tall fra 0 til 9 i begge systemene har samme betydning, da er tallene skrevet som 5 og 5h de samme.

At. Eksempel 1 (se ovenfor) ville vært mer korrekt å skrive som følger: 1 x 16 = 10t; 10 t x 16 = 100 t; 100 t x 16 = 1000 t. Eller slik: 1t x 10t = 10t; 10 t x 10 t = 100 t; 100 t x 10 t = 1000 t.

Hva det heksadesimale systemet er til for vil bli diskutert i fremtidige utgivelser. For øyeblikket, for eksempelprogrammet vårt, som vil bli diskutert nedenfor, trenger vi å vite om eksistensen av heksadesimale tall.

Så la oss oppsummere. Det heksadesimale tallsystemet består av 10 sifre (fra 0 til 9) og 6 bokstaver i det latinske alfabetet (A, B, C, D, E, F). Hvis vi legger til null til et hvilket som helst tall i det heksadesimale systemet til høyre, vil dette tallet øke med16 en gang. Det er veldig viktig å forstå dette emnet., siden vi vil bruke det hele tiden når vi skriver programmer.

Nå litt om hvordan jeg skal bygge eksempler i Assembler. Det er ikke veldig praktisk å ta dem i HTML-format, så først vil det være selve programkoden med nummererte linjer, og umiddelbart etter den vil det være forklaringer og notater.

Slik:

strenger Programkode
(1) mov ah, 9

Forklaringer:

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

Stor forespørsel: IKKE kopier programmer fra siden til utklippstavlen og lim dem deretter inn i Notisblokk (eller andre steder)! Skriv dem på nytt for hånd i et tekstredigeringsprogram. Hvis du har en skriver, velg programmet, skriv ut utvalget og overfør det til redaktøren fra papir. Du må skrive inn alle eksemplene selv! Dette vil øke hastigheten på memoreringen av operatører.

Og videre. Små og STORE bokstaver skilles ikke i Assembler. Registreringer av skjemaet:

De oppfattes på samme måte av montøren. Du kan selvfølgelig tvinge Assembleren til å skille mellom små og store bokstaver, men vi vil ikke gjøre det foreløpig. For bedre lesbarhet av programmet er det best å skrive setninger med små bokstaver, og starte navnene på underrutiner og etiketter med store bokstaver. Men dette er hvordan alle vil være komfortable.

Så la oss gå videre til vårt første program:

(1) CSEG-segment

(2) org 100t

(4) Begynn:

(6) mov ah, 9

(7) mov dx, offset Melding

(8) innen 21 timer

(10) innen 20 timer

(11)

(12) Melding db "Hei, verden! $"

(13) CSEG avsluttes

(14) slutt Begynn

Vi trenger flere utgaver for å forklare alle operatørene i dette eksemplet. Derfor vil vi ganske enkelt utelate beskrivelsen av noen kommandoer på dette stadiet. Bare tenk på at det skal være slik. I nær fremtid vil vi vurdere disse operatørene i detalj. Så du ignorerer bare linjene med tallene (1), (2) og (13).

Linjene (3), (5), (9) og (11) forblir tomme. Dette gjøres for klarhet. Montøren vil ganske enkelt utelate dem.

La oss nå gå videre til å vurdere resten av operatørene. Linje (4) starter programkoden. Dette er en etikett som peker Assembleren til begynnelsen av koden. Linje (14) inneholder slutten Start ( Begynn eng. Start; slutt slutten). Dette er slutten på programmet. Generelt, i stedet for et ord Begynne kunne ha brukt noe annet. For eksempel, Start :. I dette tilfellet må vi avslutte programmet. Slutt Start (14).

Linjer (6) (8) viser meldingen Hallo, verden !. Her må vi kort snakke om prosessorregistre (vi vil se på dette emnet mer detaljert i neste utgivelse).

Et prosessorregister er et spesielt utpekt minne for lagring av et nummer.

For eksempel:

Hvis vi vil legge til to tall, så skriver vi i matematikk slik:

A, B og C dette er en slags registre (hvis vi snakker om en datamaskin) der noen data kan lagres. A = 5 kan leses som: Gi A tallet 5 .

For å tildele en verdi til et register, er det en mov-operator i Assembler (fra det engelske move to load). Linje (6) bør leses slik: Last inn i registeret AHnummer 9 (med andre ord, vi tildeler AHnummer 9). Nedenfor vil vi vurdere hvorfor dette er nødvendig.

I linje (7) laster vi inn i registeret DX adressen til meldingen som skal vises (i dette eksemplet vil det være linjenHei verden! $).

Avbrudd vil bli diskutert i detalj i påfølgende utgivelser. Her vil jeg si noen få ord.

Avbryte MS-DOS det er en slags subrutine (del MS-DOS), som er permanent i minnet og kan kalles når som helst fra et hvilket som helst program.

Vurder det ovenfor ved å bruke et eksempel (velg notatene med liten skrift):

Programmet for å legge til to tall

Startprogrammer

A = 5 inn i variabelen A legger vi inn verdien 5

B = 8 til variabel B-verdi 8

CallRoutines Addisjon

nå er C 13

A = 10 det samme, bare forskjellige tall

B = 25

CallRoutines Addisjon

nå er C 35

Slutt på programmet

Subrutine tillegg

C = A + B

Return FromRoutines vi går tilbake til stedet de ringte fra

SluttRutiner

I dette eksemplet kalte vi subrutinen to ganger Addisjon, som la til de to tallene som ble sendt til den i variabler A og B ... Resultatet plasseres i variabel C. Når en subrutine kalles opp, husker datamaskinen hvor den ble kalt fra, og så når subrutinen er ferdig å kjøre, går datamaskinen tilbake til stedet der den ble kalt. At. subrutiner kan kalles på ubestemt tid fra hvor som helst.

Når vi kjører linje (8) i et Assembler-program, kaller vi en subrutine (i dette tilfellet kalt et avbrudd) som skriver ut strengen til skjermen. For dette legger vi faktisk de nødvendige verdiene i registre. Alt nødvendig arbeid (linjeutgang, markørbevegelse) overtas av subrutinen. Denne linjen kan leses slik: ring det tjueførste avbruddet ( int fra engelsk. avbryte avbryte). Vær oppmerksom på at det er en bokstav etter tallet 21 h ... Dette er, som vi allerede vet, et heksadesimalt tall (33 i desimal). Selvfølgelig er det ingenting som hindrer oss i å erstatte ledningen int 21t til int 33. Programmet vil fungere riktig. Det er bare det at det er vanlig i Assembler å angi avbruddsnummeret i heksadesimalt system.

I linje (10), du gjettet riktig, kaller vi avbrudd 20 h ... For å kalle dette avbruddet, trenger du ikke spesifisere noen verdier i registrene. Den gjør bare én ting: avslutte programmet (avslutt til DOS). Som et resultat av å utføre avbrudd 20h, vil programmet gå tilbake til stedet der det ble startet (lastet, kalt). For eksempel i Norton Commander eller DOS Navigator.

Linje (12) inneholder meldingen som skal vises. Det første ordet ( beskjed melding) navnet på meldingen. Det kan være hva som helst (f.eks. rot eller snor osv.). O Vær oppmerksom på linje (7), der vi laster inn i registeret DX adressen til meldingen vår.

Vi kan opprette en annen linje, som vi vil ringe Rot2. Deretter, start på linje (9), sett inn følgende kommandoer:

(10) mov dx, offset Mess2

(13) Melding db "Hei, verden! $"

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

og sette sammen programmet vårt. Håper du gjettet hva som vil skje

Vær oppmerksom på det siste tegnet i linjene Melding og rot2 - $. Det peker mot slutten av linjen. Hvis vi fjerner det, så 21 h avbruddet vil fortsette å sendes ut til det møter et tegn et sted i minnet $. På skjermen vil vi se søppel .

Hvis du har en debugger, kan du se hvordan programmet vårt vil fungere.

Hensikten med denne saken var ikke å forstå i detalj med hver operatør... Dette er umulig, fordi du har ikke nok kunnskap ennå. Jeg tror at etter 3-4 utgaver vil du forstå prinsippet og strukturen til et Assembler-program. Kanskje du syntes samlingsspråket var ekstremt vanskelig, men tro meg, ved første øyekast.

Tallsystemet som er kjent for en person er desimal. Det er basert på ti sifre fra 0 til 9. Det heksadesimale systemet kjennetegnes ved tilstedeværelsen av de første seks bokstavene i det latinske alfabetet for registrering av tall i tillegg til de grunnleggende sifrene. Det vil si etter at tallet 9 følges av tegnet "A", som tilsvarer tallet 10 for desimalsystemet. Følgelig er F i heksadesimal 16 i desimal. Bruken av seksten tegn i systemet er ikke et tilfeldig valg.

Enheten for informasjon er litt. Åtte biter danner en byte. Det er et konsept som et maskinord - det er en dataenhet som er to, det vil si seksten biter. Dermed kan du ved å bruke seksten forskjellige symboler beskrive all informasjon som vil være den minste partikkelen når du utveksler data. Med dem kan du utføre alle aritmetiske operasjoner, henholdsvis resultatet vil også bli oppnådd i det heksadesimale systemet.

For å skille at tallet er skrevet i heksadesimalt system, skriv bokstaven "h" eller underskriftet "16" etter det.

applikasjon

Den mest utbredte bruken av det heksadesimale tallsystemet er feilkoder for programvareprodukter, for eksempel operativsystemet. Tallene i disse kodene er standardiserte. Ved å ha en spesiell tabell kan du alltid finne ut hva denne eller den feilen betyr.

På lavnivåspråk som er så nær maskinkoder som mulig, brukes det heksadesimale systemet til å skrive programmer. Mange programmerere bruker det når de jobber med høynivåspråk, fordi tall i dette systemet, ved hjelp av en spesiell korrespondansetabell, lett oversettes til et binært system, som arbeidet med all digital teknologi er basert på. All informasjon på en datamaskin, enten det er en musikkfil eller et tekstdokument, etter oversettelse er representert av en sekvens av den originale binære koden, og det er mer praktisk å se det med tegnene i det heksadesimale systemet.

En av bruken av heksadesimale tegn er også beskrivelsen av fargeskjemaer, det vil si at de tre komponentene R, G, B er beskrevet på en måte som passer til dette systemet. Denne tilnærmingen til skriving kalles heksadesimal farge.

Muligheten til å se programmet i heksadesimal kode lar deg feilsøke det, gjøre endringer, og nettkriminelle bruker denne tilnærmingen til å hacke programmer.

Oppsto i det gamle Babylon. I India fungerer systemet i form av posisjonell desimalnummerering ved bruk av null, den arabiske nasjonen lånte dette tallsystemet fra indianerne, og europeerne tok det på sin side fra dem. I Europa begynte dette systemet å bli kalt arabisk.

Posisjonssystemregning- betydningen av alle sifre avhenger av plasseringen (rangeringen) til det gitte sifferet i tallet.

Eksempler av, er standard desimaltallsystemet et posisjonssystem. La oss si at det er gitt et tall453 ... Nummer 4 står for hundrevis og tilsvarer tallet400, 5 - antall tiere og tilsvarer verdien50 , a 3 - enheter og verdi3 ... Det er lett å se at når utslippet øker, øker verdien. Dermed skriver vi det gitte tallet som summen400+50+3=453.

Heksadesimalt tallsystem.

Heksadesimalt tallsystem(heksadesimale tall) - posisjonstallsystem. Heksadesimal base er tallet 16.

Ved å skrive tall i oktalsystem får vi ganske kompakte uttrykk, men i heksadesimale system får vi mer kompakte uttrykk.

De første ti sifrene av seksten heksadesimale sifre er standardmellomrom 0 - 9 , de neste seks sifrene uttrykkes med de første bokstavene i det latinske alfabetet: EN, B, C, D, E, F... Konvertering fra heksadesimalt system til binært system og vice versa gjøres på samme måte som for oktalt system.

Anvendelse av det heksadesimale tallsystemet.

Det heksadesimale tallsystemet brukes ganske godt i moderne datamaskiner, for eksempel med sin hjelp angi fargen: #FFFFFF- Hvit farge.

Konvertering av tall fra ett tallsystem til et annet.

Konvertering av tall fra heksadesimal til desimal.

For å konvertere et heksadesimalt tall til desimal, må du konvertere det spesifiserte tallet til formen av summen av produktene av potensene til basen til det heksadesimale tallsystemet med de tilsvarende sifrene i sifrene i det heksadesimale tallet.

For eksempel, la oss oversette det heksadesimale tallet 5A3 til desimal. Her 3 tall. Basert på regelen ovenfor bringer vi den til formen av summen av grader med base 16:

5A3 16 = 3 16 0 + 10 16 1 + 5 16 2 = 3 1 + 10 16 + 5 256 = 3 + 160 + 1280 = 1443 10

Konvertering av tall fra binære til heksadesimale og omvendt.

For å oversette et flersifret binært tall til et heksadesimalt system, må du dele det inn i tetrader fra høyre til venstre og endre alle tetradene med det tilsvarende heksadesimale sifferet. For å konvertere et tall fra et heksadesimalt system til et binært, må du endre hvert av alle tallene til de tilsvarende tetrader fra oversettelsestabellen, som du finner nedenfor.

For eksempel:

010110100011 2 = 0101 1010 0011 = 5A3 16

Tallkonverteringstabell.

Algoritme for å konvertere tall fra ett tallsystem til et annet.

1. Fra desimaltallsystemet:

  • del tallet med grunntallet av tallsystemet som skal oversettes;
  • finn resten av å dele heltallsdelen av tallet;
  • skriv ned alle restene av divisjonen i omvendt rekkefølge;

2. Fra det binære tallsystemet:

  • for å konvertere til desimaltallsystemet, finner vi summen av produktene til grunntallet 2 ved den tilsvarende graden av sifferet;
  • for å konvertere tallet til oktal deler vi tallet i treklanger.

For eksempel, 1000110 = 1000 110 = 1068

  • for å konvertere et tall fra binært til heksadesimalt tall deler vi tallet inn i grupper med 4 sifre.

For eksempel, 1000110 = 100 0110 = 4616.

Oversettelsestabeller:

Binær SS

Heksadesimal SS

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Binær SS

Heksadesimalt tallsystem. Vårt første program.

For å skrive programmer i Assembler, må du forstå det heksadesimale tallsystemet. Det er ikke noe komplisert med det. Vi bruker desimalsystemet i livet vårt. Jeg er sikker på at dere alle vet det, så jeg skal prøve å forklare det heksadesimale systemet analogt med desimal.

Så, i desimalsystemet, hvis vi legger til null til et hvilket som helst tall til høyre, vil dette tallet øke 10 ganger. For eksempel: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000 osv. I dette systemet bruker vi tall fra 0 til 9, dvs. ti forskjellige sifre (faktisk er det derfor det kalles desimal).

I heksadesimal bruker vi henholdsvis seksten "siffer". Jeg skrev med vilje ordet "siffer" i anførselstegn, tk. den bruker mer enn tall. Faktisk, hvordan er det? Jeg forklarer: vi teller fra 0 til 9 på samme måte som i desimal, men da blir det slik: A, B, C, D, E, F. Tallet F, uansett hvor vanskelig det er telle, vil det være lik 15 i desimalsystem (se tabell. 1).

Desimal

Heksadesimalt tall

Tabell 1. Desimal- og heksadesimale systemer.

Hvis vi legger null til høyre til et hvilket som helst tall i det heksadesimale systemet, vil dette tallet øke med16 en gang.

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

Klarte du å skille mellom heksadesimale og desimale tall i eksempel 1? Og fra denne raden: 10, 12, 45, 64, 12, 8, 19? Den kan være enten heksadesimal eller desimal. For å unngå forvirring, og datamaskinen unikt kan skille noen tall fra andre, er det vanlig i Assembler å sette tegnet h eller H etter et heksadesimalt tall ( H er forkortelse for engelsk. heksadesimal (heksadesimal). For korthets skyld kalles det noen ganger ganske enkelt Hex ) . Og etter desimal ikke legg noe. Fordi tall fra 0 til 9 i begge systemene har samme betydning, da er tallene skrevet som 5 og 5h de samme.

At. Eksempel 1 (se ovenfor) ville vært mer korrekt å skrive som følger: 1 x 16 = 10t; 10 t x 16 = 100 t; 100 t x 16 = 1000 t. Eller slik: 1t x 10t = 10t; 10 t x 10 t = 100 t; 100 t x 10 t = 1000 t.

Hva det heksadesimale systemet er til for vil bli diskutert i fremtidige utgivelser. For øyeblikket, for eksempelprogrammet vårt, som vil bli diskutert nedenfor, trenger vi å vite om eksistensen av heksadesimale tall.

Så la oss oppsummere. Det heksadesimale tallsystemet består av 10 sifre (fra 0 til 9) og 6 bokstaver i det latinske alfabetet (A, B, C, D, E, F). Hvis vi legger til null til et hvilket som helst tall i det heksadesimale systemet til høyre, vil dette tallet øke med16 en gang. Det er veldig viktig å forstå dette emnet., siden vi vil bruke det hele tiden når vi skriver programmer.

Nå litt om hvordan jeg skal bygge eksempler i Assembler. Det er ikke veldig praktisk å ta dem i HTML-format, så først vil det være selve programkoden med nummererte linjer, og umiddelbart etter den vil det være forklaringer og notater.

Slik:

strenger Programkode
(1) mov ah, 9

Forklaringer:

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

Stor forespørsel: IKKE kopier programmer fra siden til utklippstavlen og lim dem deretter inn i Notisblokk (eller andre steder)! Skriv dem på nytt for hånd i et tekstredigeringsprogram. Hvis du har en skriver, velg programmet, skriv ut utvalget og overfør det til redaktøren fra papir. Du må skrive inn alle eksemplene selv! Dette vil øke hastigheten på memoreringen av operatører.

Og videre. Små og STORE bokstaver skilles ikke i Assembler. Registreringer av skjemaet:

De oppfattes på samme måte av montøren. Du kan selvfølgelig tvinge Assembleren til å skille mellom små og store bokstaver, men vi vil ikke gjøre det foreløpig. For bedre lesbarhet av programmet er det best å skrive setninger med små bokstaver, og starte navnene på underrutiner og etiketter med store bokstaver. Men dette er hvordan alle vil være komfortable.

Så la oss gå videre til vårt første program:

(1) CSEG-segment

(2) org 100t

(4) Begynn:

(6) mov ah, 9

(7) mov dx, offset Melding

(8) innen 21 timer

(10) innen 20 timer

(11)

(12) Melding db "Hei, verden! $"

(13) CSEG avsluttes

(14) slutt Begynn

Vi trenger flere utgaver for å forklare alle operatørene i dette eksemplet. Derfor vil vi ganske enkelt utelate beskrivelsen av noen kommandoer på dette stadiet. Bare tenk på at det skal være slik. I nær fremtid vil vi vurdere disse operatørene i detalj. Så du ignorerer bare linjene med tallene (1), (2) og (13).

Linjene (3), (5), (9) og (11) forblir tomme. Dette gjøres for klarhet. Montøren vil ganske enkelt utelate dem.

La oss nå gå videre til å vurdere resten av operatørene. Linje (4) starter programkoden. Dette er en etikett som peker Assembleren til begynnelsen av koden. Linje (14) inneholder slutten Start ( Begynn eng. Start; slutt slutten). Dette er slutten på programmet. Generelt, i stedet for et ord Begynne kunne ha brukt noe annet. For eksempel, Start :. I dette tilfellet må vi avslutte programmet. Slutt Start (14).

Linjer (6) (8) viser meldingen Hallo, verden !. Her må vi kort snakke om prosessorregistre (vi vil se på dette emnet mer detaljert i neste utgivelse).

Et prosessorregister er et spesielt utpekt minne for lagring av et nummer.

For eksempel:

Hvis vi vil legge til to tall, så skriver vi i matematikk slik:

A, B og C dette er en slags registre (hvis vi snakker om en datamaskin) der noen data kan lagres. A = 5 kan leses som: Gi A tallet 5 .

For å tildele en verdi til et register, er det en mov-operator i Assembler (fra det engelske move to load). Linje (6) bør leses slik: Last inn i registeret AHnummer 9 (med andre ord, vi tildeler AHnummer 9). Nedenfor vil vi vurdere hvorfor dette er nødvendig.

I linje (7) laster vi inn i registeret DX adressen til meldingen som skal vises (i dette eksemplet vil det være linjenHei verden! $).

Avbrudd vil bli diskutert i detalj i påfølgende utgivelser. Her vil jeg si noen få ord.

Avbryte MS-DOS det er en slags subrutine (del MS-DOS), som er permanent i minnet og kan kalles når som helst fra et hvilket som helst program.

Vurder det ovenfor ved å bruke et eksempel (velg notatene med liten skrift):

Programmet for å legge til to tall

Startprogrammer

A = 5 inn i variabelen A legger vi inn verdien 5

B = 8 til variabel B-verdi 8

CallRoutines Addisjon

nå er C 13

A = 10 det samme, bare forskjellige tall

B = 25

CallRoutines Addisjon

nå er C 35

Slutt på programmet

Subrutine tillegg

C = A + B

Return FromRoutines vi går tilbake til stedet de ringte fra

SluttRutiner

I dette eksemplet kalte vi subrutinen to ganger Addisjon, som la til de to tallene som ble sendt til den i variabler A og B ... Resultatet plasseres i variabel C. Når en subrutine kalles opp, husker datamaskinen hvor den ble kalt fra, og så når subrutinen er ferdig å kjøre, går datamaskinen tilbake til stedet der den ble kalt. At. subrutiner kan kalles på ubestemt tid fra hvor som helst.

Når vi kjører linje (8) i et Assembler-program, kaller vi en subrutine (i dette tilfellet kalt et avbrudd) som skriver ut strengen til skjermen. For dette legger vi faktisk de nødvendige verdiene i registre. Alt nødvendig arbeid (linjeutgang, markørbevegelse) overtas av subrutinen. Denne linjen kan leses slik: ring det tjueførste avbruddet ( int fra engelsk. avbryte avbryte). Vær oppmerksom på at det er en bokstav etter tallet 21 h ... Dette er, som vi allerede vet, et heksadesimalt tall (33 i desimal). Selvfølgelig er det ingenting som hindrer oss i å erstatte ledningen int 21t til int 33. Programmet vil fungere riktig. Det er bare det at det er vanlig i Assembler å angi avbruddsnummeret i heksadesimalt system.

I linje (10), du gjettet riktig, kaller vi avbrudd 20 h ... For å kalle dette avbruddet, trenger du ikke spesifisere noen verdier i registrene. Den gjør bare én ting: avslutte programmet (avslutt til DOS). Som et resultat av å utføre avbrudd 20h, vil programmet gå tilbake til stedet der det ble startet (lastet, kalt). For eksempel i Norton Commander eller DOS Navigator.

Linje (12) inneholder meldingen som skal vises. Det første ordet ( beskjed melding) navnet på meldingen. Det kan være hva som helst (f.eks. rot eller snor osv.). O Vær oppmerksom på linje (7), der vi laster inn i registeret DX adressen til meldingen vår.

Vi kan opprette en annen linje, som vi vil ringe Rot2. Deretter, start på linje (9), sett inn følgende kommandoer:

(10) mov dx, offset Mess2

(13) Melding db "Hei, verden! $"

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

og sette sammen programmet vårt. Håper du gjettet hva som vil skje

Vær oppmerksom på det siste tegnet i linjene Melding og rot2 - $. Det peker mot slutten av linjen. Hvis vi fjerner det, så 21 h avbruddet vil fortsette å sendes ut til det møter et tegn et sted i minnet $. På skjermen vil vi se søppel .

Hvis du har en debugger, kan du se hvordan programmet vårt vil fungere.

Hensikten med denne saken var ikke å forstå i detalj med hver operatør... Dette er umulig, fordi du har ikke nok kunnskap ennå. Jeg tror at etter 3-4 utgaver vil du forstå prinsippet og strukturen til et Assembler-program. Kanskje du syntes samlingsspråket var ekstremt vanskelig, men tro meg, ved første øyekast.

Det heksadesimale tallsystemet har et alfabet på 16 sifre:

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

Når du skriver et tall i et heksadesimalt system, brukes bokstavene A, B, C, D, E, F for å skrive tallene som angir henholdsvis tallene 10, 11, 12. 13, 14. 15.

Konvertering av tall fra heksadesimal til desimal

Du kan konvertere et hvilket som helst heksadesimalt tall til desimal ved å bruke den allerede kjente formelen

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 av et tall fra desimal til heksadesimal utføres på samme måte som i binær.

Konvertering av tall fra heksadesimale til binære og omvendt

Du kan konvertere et hvilket som helst heksadesimalt tall til binært som følger. Hvert siffer i den heksadesimale notasjonen til et tall er skrevet i et firesifret binært tall - notisbok... Etter det kan nullene til venstre forkastes.

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

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

Omvendt kan du konvertere et hvilket som helst binært tall til heksadesimalt på samme måte. Hvert fjerde binære siffer, tellende fra høyre til venstre, skrives med ett heksadesimalt siffer. Disse tallene er også plassert fra høyre til venstre.

Eksempler.

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

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

Oktalt tallsystem

Det oktale tallsystemet har et alfabet som består av 8 sifre:

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

Konvertering av et tall fra desimal til oktal og omvendt utføres i analogi med konvertering til binær / fra binær.

Konvertering av tall fra oktale til binære og omvendt

Hvert siffer i den oktale representasjonen av et tall er skrevet i et tresifret binært tall - triade.

Eksempler.

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

1001101 2 = 001 001 101 2 = 115 8 .

Metodisk materiale for laboratorieklasse nr. 1

Labemne: Tallsystemer. Måle informasjon.

Antall timer: 2.

Eksempler med løsninger

    Oversettelse fras -ært system til et 10-ært. La det være nødvendig å oversette et tall i et bestemt tallsystem til desimal. For å gjøre dette, må du representere det i skjemaet

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.

    Overføring fra 10-årsystemet tils -ichny.

2.1 98 10 → X 2.

Del tallet på 2. Del så den ufullstendige kvotienten med 2. Fortsett til den ufullstendige kvotienten blir mindre enn 2, dvs. lik 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 .

Siden den siste ufullstendige kvotienten er 1, er prosessen over. Vi skriver alle restene fra bunn til topp, og starter med den siste ufullstendige kvotienten, og vi får tallet 1100010. Så 98 10 = 1100010 2.

2.2 2391 10 → X 16.

Del tallet på 16. Del deretter den ufullstendige kvotienten med 16. Fortsett til den ufullstendige kvotienten er mindre enn 16.

    2391: 16 = 149. Resten er 7 .

    149: 16 = 9 ... Resten - 5 .

Siden siste ufullstendige kvotient (9) er mindre enn 16, er prosessen over. Vi skriver, starter med den siste ufullstendige kvotienten, alle restene fra bunn til topp og vi får tallet 957. Så 2391 10 = 957 16.

2.3 12165 10 → X 2.

Hvis det oversettes ved inndeling til et binært system, får du en ganske tungvint prosess. Du kan først konvertere tallet til det oktale systemet, og deretter erstatte de oktale sifrene fra høyre til venstre med treklanger.

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

    Bestemme grunnlaget for tallsystemets .

En gutt skrev om seg selv: "Jeg har 24 fingre, 5 på hver hånd og 12 på føttene". Hvordan kan dette være?

Løsning. Det er nødvendig å bestemme grunnlaget for tallsystemet s... Siden vi vet at det bare er 10 10 tær, så 12 s =1∙s+2 = 10 10. Fra dette får vi ligningen s + 2 = 10  s= 8. Så gutten mente tall i oktalsystemet. Faktisk er det 24 8 fingre totalt = 2 ∙ 8 + 4 = 20 10, og på bena - 12 8 = 1 ∙ 8 + 2 = 10 10.