Käännös heksadesimaalista desimaalilukuohjelmaan. Desimaalilukujen muuntaminen heksadesimaalilukuiksi - Assembler. Muuttujien varaus ja alustus muistissa

1. Perusnumerojärjestelmät. Assembler-tietoilmoitukset

Työn tavoite: opiskelijoiden tutustuttaminen numerojärjestelmiin - binääri, oktaali, heksadesimaali; tietojen esittäminen tietokoneen muistissa, muistinvarausohjeet.

Teoreettinen osa

Pienin tietoyksikkö, joka voidaan tallentaa tietokoneeseen, on bitti (eng. bitti - bi nary digi t ), eli 0 tai 1. Bitti on informaatioatomi, eikä sitä voida jakaa. Bitit on ryhmitelty 8:lla ja ne muodostavat tavun. Tieto, jota tietokone käsittelee, on binäärilukujen merkkijono. 8 bitistä voidaan muodostaa 256 yhdistelmää. Näitä yhdistelmiä käytetään koodaamaan suuria ja pieniä kirjaimia, numeroita ja erikoismerkkejä.

Tietojen mittaamiseen tietokoneella käytetään seuraavia suureita:

1 kilotavu = 1 kilotavu = 2 10 tavua = 1024 tavua;

1 megatavu = 1 megatavu = 2 20 tavua = 1024 kt;

1 gigatavu = 1 gigatavu = 2 30 tavua = 1024 megatavua.

Numerojärjestelmät

Numerojärjestelmä on joukko sääntöjä ja numeroita numeroiden esittämiseksi. Missä tahansa paikkalukujärjestelmässä esitettävän numeron määrä on yhtä suuri kuin lukujärjestelmän kanta, esimerkiksi binäärijärjestelmän kantaluku on luku 2, joten kaksi numeroa 0 ja 1 tarvitaan esittämään numeroita, heksadesimaalilukujärjestelmässä se on 0, 1, 2, ..., 9, A, B, C, D, E, F, jossa kirjaimet vastaavat arvoja 10, 11, 12, 13, 14, ja 15, vastaavasti.

Numerojärjestelmien erottamiseksi numero päättyy kirjaimeen: B on binääri, Q oktaali, D desimaali ja H heksadesimaali. Desimaaliluvulle D on valinnainen.

Jos luku kirjoitetaan b-aarilukujärjestelmään muodossa

Nr(b) = C n C n-1 C n-2 … C 2 C 1 C 0, D 1 D 2 D 3 …,

sitten desimaalilukujärjestelmässä sen arvo voidaan esittää numeroiden summana kerrottuna numerojärjestelmän kannassa potenssiin, joka on yhtä suuri kuin luvun numeron paikkanumero (numerointi alkaa 0:sta, oikealta vasemmalle) :

Nr(10) = Cn *bn +C n-1 *b n-1 +…+C 2 *b 2 +C 1 *b 1 +C 0 *b 0 +D 1 *b -1 +D 2 * b –2 +D 3 *b –3 +...

Esimerkiksi:

Olkoon kaksi binaarilukua 11b, 1100011b. Muunnetaan nämä luvut desimaalilukujärjestelmäksi:

11b = 1 * 2 1 + 1 * 2 0 = 3;

11100011b = 1*2 7 +1*2 6 +1*2 5 +0*2 4 +0*2 3 +0*2 2 +1*2 1 +1*2 0 = 227.

Harkitse esimerkkejä oktaaliluvun kääntämisestä desimaalilukujärjestelmäksi:

11q = 1 * 8 1 + 1 * 8 0 = 9;

210q = 2*8 2 +1*8 1 +0*8 0 =136.

Esimerkki heksadesimaalilukujen muuntamisesta desimaalilukuiksi:

11h = 1*161 +1*160 =17;

CA0h= C*162 +A*161 +0*160 = 3232

Muuntaa numeroita desimaalijärjestelmä kokonaislukujakoa käytetään binääri- tai heksadesimaalilukuihin. Luku jaetaan lukujärjestelmän kannalla, kunnes saadaan jakamaton jäännös. Jaosta saatu osamäärä jaetaan jälleen ja prosessi päättyy, kun osamäärästä tulee myös jakamaton. Jakamalla saadut jäännökset kirjoitetaan käänteisessä järjestyksessä. Kaavio näyttää luvun 25 muuntamisen binäärilukujärjestelmäksi, jonka tuloksena saamme luvun 11001b, sekä luvun 418 muuntamisen heksadesimaalilukujärjestelmäksi, jonka tuloksena saamme luvun 1A2h, koska numero kymmenen on A.

Lukujen muuntamiseksi heksadesimaaliluvuista binäärilukuihin ja päinvastoin käytetään seuraavaa tosiasiaa: jokainen heksadesimaaliluku vastaa nelibittistä binaarilukua ja päinvastoin, kuten taulukosta näkyy. Siksi, kun muunnetaan heksadesimaalijärjestelmästä binäärijärjestelmään, on tarpeen kirjoittaa muistiin sen binäärikoodi jokaiselle heksadesimaalinumerolle, ja takaisin muunnettaessa binääriluku jaetaan oikealta vasemmalle neljän numeron ryhmiin ja heksadesimaalivastaavuus. on tallennettu heille.

Heksadesimaalilukujen ja binäärilukujen vastaavuustaulukko.

Käännetään esimerkiksi luku 1FDh binääriesitykseen:

1FDh = 0001-1111-1101b = 111111101b

Muunnetaan binääriluku 1110100101b heksadesimaalimuodossa: 0011-1010-0101b = 3A5.

Kokonaislukujen esitys tietokoneen muistissa

Binäärijärjestelmää käytetään tietojen esittämiseen tietokoneessa. Kokonaislukujen tallentamiseen käytetään tiukasti kiinteää määrää bittejä: 8, 16, 32, 64. N binääripaikkaan voit kirjoittaa etumerkillisen kokonaisluvun välillä -2 n-1 - 2 n-1 -1. Paikat on numeroitu 0 - n-1 oikealta vasemmalle. Esimerkiksi numero 67 kahdeksassa binääripaikassa esitetään muodossa 01000011b. Etumerkittömiä numeroita voidaan esittää välillä 0 - 2n-1.

Kokonaisluku voidaan tallentaa suorana tai kahden komplementtikoodina. Etumerkkibittiä käytetään edustamaan luvun etumerkkiä. Se on paikassa n-1 ja on luvun merkittävin bitti. Positiivisille luvuille tämä bitti on nolla, negatiivisille luvuille yksi.

Suora koodi käytetään positiivisten tai etumerkittömien lukujen tallentamiseen.

Lisäkoodi käytetään varastointiin negatiivisia lukuja. Numeron esityksen saamiseksi lisäkoodissa etsitään ensin numeron moduulin suora koodi, sitten sen käänteiskoodi. Käänteinen koodi saadaan kääntämällä jokainen bitti luvun binääriesityksessä: 0 muunnetaan 1:ksi ja 1 0:ksi. Viimeisessä vaiheessa käänteiseen koodiin lisätään 1.

Esimerkiksi numeron -65 edustamiseksi meillä on:

01000001b suora numero +65

10111110b palautuskoodi

10111111b lisänumerokoodi -65

Kahden komplementtikoodia käytetään korvaamaan kokonaislukujen vähennysoperaatio yhteenlaskuoperaatiolla kahdesta komplementtikoodissa esitetyllä numerolla. Tässä tapauksessa prosessorin ei tarvitse suorittaa kokonaislukujen vähennystoimintoa.

Tietotyypit

TAVU. Tämä tietotyyppi vie 1 tavun (8 bittiä). Tämän tyypin avulla voit koodata etumerkillisen kokonaisluvun välillä -128 - +127 tai etumerkittömän kokonaisluvun välillä 0 - 255, minkä tahansa ASCII-merkin, joka on myös koodattu kokonaisluvuksi. Määritelmädirektiivi − D.B.(Määritä tavu).

SANA. Tämä tietotyyppi vie 2 tavua (16 bittiä). muuttujaksi tämän tyyppistä voit laittaa kokonaisluvun välillä -32768 - +32767 tai 0 - 65535, kaksi ASCII-merkkiä tai suhteellisen lähellä muistia olevaa osoitetta. Tässä tapauksessa muistiin syöttö suoritetaan seuraavasti: numeron alaosa sijaitsee alimmassa osoitteessa ja ylin osa on korkeimmassa. Tämä pätee myös muihin tietotyyppeihin. Jos esimerkiksi heksadesimaalikokonaisluku 1234h sijaitsee osoitteessa 1000h, arvon 34h alaosa sijaitsee osoitteessa 1000h ja 12h osoitteessa 1001h. Määritelmädirektiivi − DW(Määrittele sana).

DWORD– 4 tavua (2 sanaa) voi sisältää etumerkillisen tai etumerkittömän 32-bittisen kokonaisluvun, liukulukuluvun, 32-bittisen muistiosoitteen tai 4 ASCII-merkkiä. Osoitetta tallennettaessa segmentin osoite sijaitsee muistin kahdessa korkeassa tavussa ja siirtymä kahdessa matalassa tavussa. Määritelmädirektiivi − DD(Määrittele kaksoissana).

QWORD– 8 tavua. Voi olla etumerkillinen tai etumerkitön kokonaisluku, kaksinkertainen tarkkuusluku tai liukuluku. Määritelmädirektiivi − DQ(Määritä Quad).

TEN-TAVUA- 10 tavua. Käytetään tietojen tallentamiseen päämuistiin tai apuprosessoriin. Voidaan pakata BCD, laajennettu kokonaisluku tai laajennettu liukuluku. Määritelmädirektiivi - DT(Määritä kymmenen tavua).

Yleinen syntaksi tietojen määrittämiseen on:

< Nimi> < tyyppi> < listaarvot>

< Nimi> < tyyppi> < määrä>dup(ilmaisu),

Missä Nimi- tunniste, tyyppi- yksi edellä käsitellyistä muistinvarausdirektiiveistä, arvoluettelo– luettelo, joka voi sisältää merkki- tai numeerisia vakioita. Se voi sisältää myös symbolin ? , jos arvoa ei ole määritetty tai osoite on muuttujan nimi tai tunniste, ASCII-merkkijono lainausmerkeissä tai heittomerkeissä. Direktiivi dup määrää annettujen lausekkeiden määrittämien arvojen toistamisen <число> kerran. Ilmaisu voi olla vakio, vakiot, yhdistetyt aritmeettiset operaattorit, arvoluettelo tai symboli ? jos arvoa ei ole määritelty.

Esimerkiksi,

var_a db 2dup(0, 3dup(1)) ; vastaa var_a db 0,1,1,1,0,1,1,1 var_b db 1, 2, 3, ?, ? adr_a dw var_a adr_b3 dd var_b+3

Määritetään kullekin seuraavista muuttujista varatun muistin määrä:

m1 db 4, 5, 1, 6; 4*1=4 tavua m2 db “xzyqw” ; 5*1=5 tavua m3 dw 12 dup(?) ; 12*2=24 tavua m4 dd 345h, 234h; 2*4=8 tavua

m1 db 4, 5, 1, 6; 4*1=4 tavua m2 db “xzyqw” ; 5*1=5 tavua m3 dw 12 dup(?) ; 12*2=24 tavua m4 dd 345h, 234h; 2*4=8 tavua

Näiden ohjeiden allokoitujen tavujen kokonaismäärä on 41 tavua. Muuttuja m1 sijaitsee suhteellisessa osoitteessa 00h, m2 on 04h, m3 on 09h ja m4 on 021h.

Yksittäiset tehtävät:

1. Muunna desimaaliluvut binääri-, heksadesimaali- ja oktaalilukujärjestelmiksi:

1)42;31;113 5 )46;35;119 9 ) 49;30;103 13 )29;37;97
2 )45;81;89 6)66;25;110 10 )19;53;101 14 )21;87;98
3 )12;38;118 7 )17;63; 96 11)34;50;107 1 5) 28;45;130
4 )11;43;67 8 )13;69;88 1 2 )14;70;99 16)15;72;100

2. Muunna heksadesimaaliluvut binäärijärjestelmäksi:

1) A45; 12; 56B 5)7C;72EB;31DB 9) 34A; 6AB; 9AD 13) 2B9; 6F1; 81B
2) 1EF3; 5AB; 46F 6) 3EB; 4D8; A61 10)5AB;79F;AB8 14) 7CD; 2A1; B53
3)A56;5E9;CDE 7) 6A3; 9D0; 8BE 11)9A;4DE;EF7 15) 10B; 87F; CD9
4)3B8;DE1;BAE 8) BC; 7F9; 78A 12)AB;8E4;C17 16) 38E; 9C7; B89

3. Muunna binääriluvut oktaali- ja heksadesimaalilukujärjestelmiksi:

1) 00101011; 00100110;
01110011
5 ) 11110010; 01101010;
11111100;
9 ) 10000101; 11100010;
11001011
13 ) 00011101; 11111001;
00111101
2 ) 01100001; 01101110;
11110011
6) 00110110; 00111011;
10001100
10 ) 00011101; 01010110;
10110010
14 ) 00011100; 01001100;
01101110
3) 11100100; 01011100; 11000001 7 ) 11010010; 01001100; 11000111 11) 11100010; 10100001; 10001110 1 5 ) 10101001; 11010101; 111001100
4 ) 00001111; 10100101; 10010001 8 ) 11100000 11111000; 01000011 1 2 ) 10100101; 01101100; 11100001 16) 11100111; 01100101; 10110010;

4. Anna seuraavat numerot lisäkoodissa:

1)-42;-31;-96 5)-46;-35;-94 9) -49;-30;-103 13)-29;-37;-97
2)-52;-41;-93 6)-66;-25;-85 10)-19;-53 ; -101 14)-21;-87;-98
3)-12;-38;-93 7)-17;-63;-99 11)-34;-50;-94 15)-28;-45;-95
4)-11;-43;-67 8)-13;-69;-88 12)-14;-70;-99 16)-15;-72;-89

5. Seuraavat muuttujien määritelmät annetaan:

1) a db 45,16,76,-6
bdb "abcd"
cdw 15dup(0),3,3
dd 345h
2) Lisää 2.24
b db “aaa”,-8,23h,11101b
c db 6 dup(0), 45, 6
d dw -7.4Dh.8 dup(0)
3) a db "Salut", 10,13
b db -16,-20,13h,2 dup(0)
c dw 62,34,-15
d dd 456C9h,4567
4) a dd 92,45h,90,-54,-67
b db 10 dup('$'),10,13
c db "amdto",10,13,'$'
d dw 5dup(?),7,-80h
5) a db "lucrarea_1",10,13
b db 2 dup(0)
c dw 38,-15,78,41,12
d dd 678EFh, 3489.456
6) a db 12.24 "sss"
b db “ab”,-8.23h
c dd 6 dup(0),45
d dw -7,5 dup(0)
7) a db 35,53
b db 10 dup(' '),10,13,"$"
c dw 5 dup(0)
dd 555h
8) a db 34,6,3,-8,-2
b db "Hei",'$'
c dw 6 dup(0),'$',10,13
d dw -68.46h.7 dup(0)
9) a db 45.16
b db 5 dup(?),10,13,"$"
c dw 55 dup(0)
dd 34567h
10) a db 76,87,92,45h
b db 20 dup('$'),10,13
c db "qwert"
d dw 10 dup(0)
11) a dd 78,34,67
b db "Result",'$'
c db 16 dup(0),'$',10,13
12) a db 73,74,75,77,78,-67
b db 15 dup('?'),10,13
cdd 777h
13) a db 24.76,-56
b db “abc”,11101b
c dd 45.4 dup(?)
d dw 4 dup(0),8,3
14) a db “testul_nr_2”,13,10
b db -18,-22,18h,2 dup(0)
c dw 81,-16,44,18
dd 568ABh
15) a dd 87.45h,-9
b db 10 dup(?)
c db "test_1$"
d dw 4 dup(0),2,7
16) a db "Mathematica",10,13
b db 10,20h,2 dup(0)
c dw 60,30,-10,-20,-50
dd 56789Bh

a) määrittää, kuinka monta tavua näillä ohjeilla on varattu;
b) määrittää osoitteet, joissa kukin muuttuja sijaitsee.


Binääri-, oktaali-, desimaali- ja heksadesimaalilukujärjestelmät ovat paikkatietoja. Paikkalukujärjestelmä on sellainen, jossa numeron arvo riippuu sen paikasta numerossa, numeroiden paikkoja luvussa kutsutaan järjestyksiksi tai numeroiksi. Paikkalukujärjestelmän perustana on pistemäärä, jonka saavuttaessa täytetään seuraava numerojärjestys. Muussa tapauksessa numerojärjestelmän kanta on yhtä suuri kuin niiden numeroiden lukumäärä, mukaan lukien nolla, jotka edustavat kyseisen järjestelmän numeroita.

Kokoonpanija sallii numeroiden käytön binääri-, oktaali-, desimaali- tai heksadesimaalimuodossa. Assembler käsittelee oletusarvoisesti kaikkia ohjelman lukuja desimaalilukuina. Voit osoittaa luvun perustan nimenomaisesti käyttämällä tunnisteita (MASM32-versio 11): b tai y - binääriluvuille; o tai q on oktaali; d tai t desimaaliluvuille; h - heksadesimaaliluvuille. Tunniste kirjoitetaan numeron loppuun yhdessä numeron kanssa. Jos numerossa käytetään aakkosmerkkejä (heksadesimaalilukuja), alkuun kirjoitetaan nolla - kokoajan sääntöjen mukaan numeroiden merkinnät on aloitettava numerolla. Esimerkiksi:

.data var1 tavu 00001111b ; 15 binäärimuodossa var2 tavu 00001111y ; 15 binääriesityksessä var3 tavu 17o ; 15 oktaalisessa var4-tavussa 17q; 15 oktaalivar5-tavussa 15d; 15 desimaaliluvulla var6 tavu 15t ; 15 desimaalimuodossa var7 tavu 0Fh ; 15 heksadesimaalimuodossa

Voit asettaa ohjelmassa käytettävien numeroiden tyypin käskyt-osiossa lomakkeen ohjeella

.RADIX (kanta)

jossa luvun kanta on osoitettu desimaaliluvulla. Esimerkiksi ohjeiden mukaan

.RADIX 16

Binääri- ja desimaalilukujen tagien kahden muunnelman olemassaolo johtuu MASM32:n aikaisempien versioiden yhteensopivuudesta, joissa ei ollut mahdollisuutta kirjoittaa numeroita heksadesimaalimuodossa, myöhempien versioiden kanssa. Heksadesimaaliluvuille arabialaiset numerot eivät riitä, joten numeroriviä täydennetään kirjaimilla:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

On helppo nähdä, että MASM32 - b ja d - aiempien versioiden tagit vastaavat heksadesimaalilukuja, mikä tekee mahdottomaksi käyttää niitä .RADIX 16 -direktiivin kanssa. o-tunniste kopioidaan q-tunnisteella, koska edellinen on samanlainen kuin nolla. Näistä syistä tunnisteet y, q, t ovat edullisia.

Tietokoneessa kaikki luvut tallennetaan nollien ja ykkösten sarjoina. Kun kirjoitamme minkä tahansa numeron ohjelman tekstiin, kokoaja kääntää sen koneellisesti luettavaksi esitykseksi ja suoritettava tiedosto tämä numero kirjoitetaan oikeaan (binäärimuotoon). Mutta meidän on itse järjestettävä numeron tulos ohjelmasta muotoon, joka on jo ymmärrettävä käyttäjälle, mikä tarkoittaa, että jos on tarpeen näyttää käyttäjälle numero, meidän on tehtävä ohjelmassa seuraava: a) muuntaa luku binäärijärjestelmästä desimaaliksi - koneesittelystä ihmiseksi; b) korvaa tuloksena saatu desimaaliluku sen symbolilla, eli numeroa vastaavalla kuvalla, koska näyttö näyttää kuvia, ei numeroita.

Koneluvun muuntaminen määrätyksi numerojärjestelmäksi suoritetaan jakamalla tämä luku peräkkäin ja tuloksena saatu tulos halutun numerojärjestelmän perusteella. Jaon loppuosa syötetään vähiten merkitsevällä numerolla, osamäärä jaetaan jälleen numerojärjestelmän kannassa, jäännös syötetään seuraavaan numeroon - ja niin edelleen, kunnes jako saavuttaa nollan. Oletetaan, että haluat muuntaa desimaaliluvun 250 heksadesimaaliluvuksi:
250 / 16 = 15 , jäännös = A (10),
15 / 16 = 0, jäännös = F (15),
siis 250 (desimaali) = FA (heksadesimaali).

Enimmäismäärä, joka voidaan kirjoittaa tavulle, on 255. Jos ohjelman tulosten mukaan yksitavuisesta muuttujasta on tarpeen näyttää luku desimaalimuodossa, tämä luku tulee jakaa 10:llä enintään kolme kertaa - 255 on kolme desimaalista järjestystä. SISÄÄN tyyppisiä muuttujia sana (kaksi tavua) maksimiarvo on 65 535, kaksoissanatyyppisissä muuttujissa (neljä tavua) - 4 294 967 295. Vastaavasti desimaalimuotoon muunnettava numerosana jaetaan 10:llä enintään viisi kertaa, kaksinkertainen sana - ei yli kymmenen kertaa.

Merkkinumeroiden koodit ovat: "0" - 48; "1" - 49; "2" - 50; "3" - 51; "4" - 52; "5" - 53; "6" - 54; "7" - 55; "8" - 56; "9" - 57. On selvää, että numeron arvon muuttamiseksi symboliseen muotoon riittää, että siihen lisätään 48.

Ohjelman fragmentti, joka kääntää tavumuuttujan desimaalimerkkimuotoon:

.datan jakajatavu 10 ; jakaja puskuri_dec tavu 3 dup (?) parametritavu 255 ... .koodin alku: ... ; saada parametritavun arvot desimaalisymbolimuodossa mov AH, 0 ; nollaa AH mov AL, parametri ; kopioi tavumuuttuja AL DIV -jakajaan; jaa AX 10:llä mov buffer_dec, AH ; kopioi loput jaosta kohtaan buffer_dec mov AH, 0 ; nollaa AH DIV -jakaja ; jaa AX 10:llä mov buffer_dec, AH ; kopioi loput jaosta kohtaan buffer_dec mov buffer_dec, AL ; kopioi osamäärä puskurin_dec:iin ADD buffer_dec, 48 ; add 48 - hanki numeromerkki "2" ADD buffer_dec, 48 ; add 48 - hanki numeromerkki "5" ADD buffer_dec, 48 ; lisää 48 - hanki numeron "5" merkki

Lisää kommentti

Heksadesimaalilukujärjestelmä(myös heksadesimaalikoodi) on paikkalukujärjestelmä, jonka kokonaislukukanta on 16. Joskus kirjallisuudessa käytetään myös termiä hex (lausutaan "hex", lyhenne englannin sanasta heksadesimaali). Tämän numerojärjestelmän numerot ovat yleisesti käytettyjä arabialaisia ​​numeroita 0-9 sekä latinalaisten aakkosten A-F ensimmäisiä merkkejä. Kirjaimet vastaavat seuraavia desimaaliarvoja:

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

Siten kymmenen arabialaista numeroa yhdessä kuuden latinalaisen kirjaimen kanssa muodostavat järjestelmän kuusitoista numeroa.

Muuten, verkkosivustollamme voit muuntaa minkä tahansa tekstin desimaali-, heksadesimaali- tai binäärikoodiksi käyttämällä online-koodilaskinta.

Sovellus. Hex-koodi käytetään laajalti matalan tason ohjelmoinnissa sekä erilaisissa tietokoneiden viiteasiakirjoissa. Järjestelmän suosio perustellaan arkkitehtonisilla ratkaisuilla nykyaikaiset tietokoneet: niissä on tavu (joka koostuu kahdeksasta bitistä) tiedon vähimmäisyksikkönä - ja on kätevää kirjoittaa tavun arvo käyttämällä kahta heksadesimaalilukua. Tavuarvo voi vaihdella välillä #00 - #FF (0 - 255 desimaalimuodossa) - toisin sanoen käyttämällä heksadesimaalikoodi, voit kirjoittaa minkä tahansa tavun tilan, kun taas tallennuksessa ei ole "ylimääräisiä" numeroita.

Koodattu Unicode neljää heksadesimaalinumeroa käytetään edustamaan merkkinumeroa. Myös RGB (Red, Green, Blue) -värimerkintä käyttää usein heksadesimaalikoodia (esimerkiksi #FF0000 on kirkkaan punainen merkintä).

Tapa kirjoittaa heksadesimaalikoodi.

Matemaattinen tapa kirjoittaa. Matemaattisessa merkinnässä järjestelmän kanta kirjoitetaan desimaalimuodossa alaindeksiin luvun oikealle puolelle. 3032:n desimaalimerkintä voidaan kirjoittaa heksadesimaalimuodossa 3032 10 annettu numero on merkintä BD8 16 .

Ohjelmointikielten syntaksissa. Eri ohjelmointikielten syntaksi määrittää muodon numeron kirjoittamiselle heksadesimaalikoodi:

* Joidenkin kokoonpanokielen muotojen syntaksissa käytetään latinalaista kirjainta "h", joka sijoitetaan numeron oikealle puolelle, esimerkiksi: 20Dh. Jos numero alkaa latinalainen kirjain, sen edessä on nolla, esimerkiksi: 0A0Bh. Tämä tehdään arvojen erottamiseksi vakioista käyttämällä heksadesimaalikoodi;

* Muut assembler-muodot, samoin kuin Pascal (ja sen lajikkeet, kuten Delphi) ja jotkin perusmurteet, käyttävät "$"-etuliitettä: $A15;

* HTML-kuvauskielellä sekä peräkkäin css-tiedostoja, määrittääksesi värin RGB-muoto heksadesimaalimerkinnällä käytetään etuliitettä "#": #00DC00.

Kuinka kääntää heksadesimaalikoodi toiseen järjestelmään?

Muunna heksadesimaalista desimaaliksi. Muunnosoperaation suorittamiseksi heksadesimaalijärjestelmästä desimaaliksi on esitettävä alkuperäinen luku heksadesimaaliluvun numeroissa olevien numeroiden tulojen summana kantaluvun mukaan.

Binäärinen SS

heksadesimaali ss

Esimerkiksi sinun on käännettävä heksadesimaaliluku A14: siinä on kolme numeroa. Sääntöä käyttämällä kirjoitamme sen potenssien summana kantaluvulla 16:

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

Numeroiden muuntaminen binääriluvuista heksadesimaalilukuiksi ja päinvastoin.

Kääntämiseen käytetään muistikirjojen taulukkoa. Jos haluat muuntaa luvun binääristä desimaalilukuksi, se on jaettava erillisiin tetradeihin oikealta vasemmalle ja korvattava sitten jokainen tetradi vastaavalla heksadesimaaliluvulla taulukon avulla. Tässä tapauksessa, jos numeroiden määrä ei ole neljän kerrannainen, on tarpeen lisätä vastaava määrä nollia luvun oikealle puolelle, jotta binäärinumeroiden kokonaismäärästä tulee neljän kerrannainen.

Käännettävien muistikirjojen taulukko.

Jos haluat muuntaa heksadesimaalista binäärimuotoon, sinun on suoritettava käänteinen toiminto: korvaa jokainen numero taulukon tetradilla.

Binäärinen SS

Octal SS

Esimerkki muuntaminen heksadesimaalista binäärimuotoon: A5E 16 = 1010 0101 1110 = 101001011110 2

Esimerkki muuntaminen binääristä heksadesimaaliksi: 111100111 2 = 0001 1110 0111 = 1E7 16

Tässä esimerkissä alkuperäisen binääriluvun numeroiden määrä ei ollut neljä (9), joten loput nollia lisättiin numeroiden kokonaismääräksi 12.

Automaattinen käännös. Nopea muunnos heksadesimaalista johonkin kolmesta suositusta järjestelmästä (binääri, oktaali ja desimaali) sekä käänteinen käännös voidaan suorittaa käyttämällä Windowsin mukana toimitettua vakiolaskinta. Avaa laskin ja valitse valikosta Näytä -> Ohjelmoija. Tässä tilassa voit asettaa käytettävän numerojärjestelmän Tämä hetki(katso valikko vasemmalla: Hex, Dec, Oct, Bin). Tässä tapauksessa nykyisen numerojärjestelmän muuttaminen käännetään automaattisesti.

Hei! Siellä on tämä rivi:

VarBD 2,2,3,3,4,4; 223344 6-numeroinen desimaaliluku pakkaamattomassa muodossa parannetulla tarkkuudella (ASCII-muoto)

Miten tämä numero 223344 voidaan muuntaa heksadesimaaliksi? Löysin tämän koodin, joka muuntaa 1- ja 2-numeroisen desimaalin 16-numeroiseksi:

; Var. 17. Takaisin. 1. Kirjoita aliohjelma, joka muuntaa desimaalien joukon; ASCII-tavut. BCD-tavujen joukkoon. Käytä tätä aliohjelmaa kahden taulukon käsittelemiseen; Käytä pinoa parametrien välittämiseen. Nimi Ohjelma ; Vakioiden kuvaus; Muuttujien kuvaus Datasegmentti x1 db 2h db 1h db 3h db 1h db 4h db 1h ; numerot ASCII-muodossa y1 db 3 dup (?) ; taulukko BCD-muodossa x2 db 8h ;98 db 9h db 5h ;95 db 9h db 7h ;87 db 8h db 2h ;92 db 9h ; desimaalitaulukko ASCII-tavut Y2 db 4 dup (?); desimaalitaulukko BCD-tavut Data päättyy Pino SEGMENTTI DW 16 dup(?) StkTOp LABEL sana Pinon päät Koodi SEGMENTTI OLE CS: Koodi, DS: Data, ES: Data, SS: Pino ; Tässä kuvatut alirutiinit ovat abc proc push bp mov bp, sp ; napsauttaa pinon alkuun mov cx, ; parametrien lukeminen pinosta (lukumäärä) mov di, ; muuttujan Y1 osoite mov si, ; X1-muuttujan M1 osoite: mov al, +1 ; lataa ensimmäinen numero ASCII-muodossa shl ax, 1 ; siirrä oikealle 4 numerolla shl axe, 1 shl axe ,1 shl axe, 1 or al, ; palauta muistisi numero mov , al ; kirjoita numero BCD-muodossa inc si ; siirry toiseen numeroon inc si inc di ; muokata BCD-osoitenumeroita dec cx; vähentää numeroiden määrää jnz M1 ; jos ne eivät ole loppuneet, siirry M1 pop BP ret 6 abc endp ; Pääohjelma Aloitus: mov AX, Data mov DS, AX mov ES, AX mov Ax, Pino mov SS, AX mov SP, offset StkTop ; ladata parametrit pinoon tehtäväehdon mukaisesti mov ax, offset x1 ; lataa ensimmäisen taulukon osoite push ax mov ax, offset Y1 ; kuormitustulos osoite push ax mov ax, 3 ; numeroiden määrä push ax call abc ; aliohjelman kutsu mov ax, offset x2 ; lataa toisen taulukon osoite push ax mov ax, offset Y2 ; kuormitustulos osoite push ax mov ax, 4 ; numeroiden määrä push ax call abc ; aliohjelman kutsukoodi päättyy lopetus alkaa

Tämä artikkeli on enimmäkseen täysin aloittelijoille. Jos olet hyvin perehtynyt numerojärjestelmiin, voit kiinnittää huomiota vain artikkelin lopussa oleviin FASM-kokoonpanon syntaksiominaisuuksiin.

Itse asiassa prosessori toimii vain ykkösistä ja noloista koostuvien binäärilukujen kanssa 🙂 Minkä tahansa ohjelman kaikki tiedot ja komennot tallennetaan ja käsitellään binäärilukujen muodossa. Numeroiden binäärimerkintä on kuitenkin liian hankalaa ja hankalaa ihmisille, joten assembler-ohjelmissa käytetään muita lukujärjestelmiä: desimaali-, heksadesimaali- ja oktaalilukuja.

Vähän teoriaa

Ensinnäkin selvitetään, mikä ero on numerojärjestelmien välillä. Mikä tahansa desimaaliluku voidaan esittää tässä muodossa:

123 10 = 1 10 2 + 2 10 1 + 3 10 0

Alareunassa oleva indeksi osoittaa, että se on desimaaliluku. Kunkin numeron numero kerrotaan 10:llä numeroluvun potenssilla laskettuna nollasta oikealta vasemmalle. Yleisemmin:

abc r= a r 2 + b r 1 + c r 0 ,

jossa a, b ja c ovat joitain lukuja ja r on lukujärjestelmän kanta. Desimaalijärjestelmälle r= 10, binäärille - r= 2, kolmiosainen r= 3 jne. Esimerkiksi sama numero muissa järjestelmissä:

443 5 = 4 5 2 + 4 5 1 + 3 5 0 = 4 25 + 4 5 + 3 1 = 123 10 (kvinaarijärjestelmä)

173 8 = 1 8 2 + 7 8 1 + 3 8 0 = 1 64 + 7 8 + 3 1 = 123 10 (oktaali)

1111011 2 = 1 2 6 + 1 2 5 + 1 2 4 + 1 2 3 + 0 2 2 + 1 2 1 + 1 2 0 = 1 64 + 1 32 + 1 16 + 1 8 + 0 4 + 1 2 + 1 1 = 123 10 (binääri)

Heksadesimaalijärjestelmä

Heksadesimaalimuodossa kirjaimia A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 käytetään merkitsemään numeroita, jotka ovat suurempia kuin 9. Esimerkki:

C7 16 = 12 16 1 + 7 16 0 = 12 16 + 7 1 = 199 10

Heksadesimaalijärjestelmän mukavuus on, että siihen on erittäin helppo muuntaa binäärilukuja (ja myös päinvastoin). Binääriluvun (tetrad) neljää numeroa edustaa yksi heksadesimaaliluku. Kääntämiseksi riittää jakaa luku 4 bitin ryhmiin ja korvata jokainen tetradi vastaavalla heksadesimaaliluvulla.

Binääri
tetradi
Heksadesimaali
määrä
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

Yhden tavun kirjoittamiseen tarvitaan vain 2 heksadesimaalilukua:

0101 1011 2 = 5B 16

0110 0000 2 = 60 16

1111 1111 2 = 16 FF

Oktaalijärjestelmä

Oktaalijärjestelmä on myös kätevä binäärilukujen esittämiseen, vaikka sitä käytetään paljon harvemmin kuin heksadesimaalilukua. Nopeaa käännöstä varten sinun on jaettava binääriluku 3-numeroisiin ryhmiin (tripletteihin tai kolmikkoihin).

Binääri
kolmikko
oktaali
määrä
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Esimerkki: 001 110 101 2 = 165 8

FASM-asentajasyntaksi

Oletusarvoisesti kokoaja havaitsee ohjelman numeron desimaalilukuna. Binääriluvun merkitsemiseksi sinun on lisättävä sen loppuun symboli "b". Oktaaliluku merkitään samalla tavalla symbolilla 'o'. Heksadesimaaliluvun kirjoittamiseen FASM tukee kolmea merkintämuotoa:

  • symbolit kirjoitetaan ennen numeroa '0x'(kuten C/C++:ssa);
  • symboli kirjoitetaan ennen numeroa ’$’ (kuten Pascalissa);
  • numeron perään kirjoitetaan symboli 'h'. Jos heksadesimaaliluku alkaa kirjaimella, sinun on lisättävä alkuun nolla (muuten ei ole selvää, onko tämä numero vai tarran nimi).

Tätä syntaksia käytetään sekä datan määrittelyissä että komennoissa. Tässä on esimerkkejä numeroiden kirjoittamisesta kaikissa neljässä järjestelmässä:

mov ax , 537 ; Desimaalijärjestelmä mov bl , 11010001b ;Binäärijärjestelmä mov ch , 57o ;oktaalijärjestelmä mov dl , $ C2 ;\ mov si , 0x013A ; \ mov ah , 18h ; / Heksadesimaali mov al , 0FFh ;/ mov al , FFh ;Virhe!

mov ax,537 ;Desimaali mov bl,11010001b ;Binääri mov ch,57o ;Oktaali mov dl,$C2 ;\ mov si,0x013A ; \ mov ah,18h ; / Hex mov al,0FFh ;/ mov al,FFh ;Virhe!