Java-tavukoodi

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 23.6.2021 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .

Java-tavukoodi  on joukko ohjeita , jotka Java Virtual Machine suorittaa . Jokainen tavukoodin käyttökoodi  on yksi tavu; kaikkia 256 mahdollista opkoodiarvoa ei käytetä, niistä 51 on varattu tulevaa käyttöä varten.

Java- tai muilla JVM -yhteensopivilla kielillä ohjelmoinnissa ei tarvita tavukoodin ominaisuuksien tuntemusta, mutta ”tavukoodin ymmärtäminen ja Java-kääntäjän luomismekanismien ymmärtäminen auttaa Java-ohjelmoijaa samalla tavalla kuin kokoonpanon tuntemus. kieli auttaa ohjelmoijaa kirjoittamalla C- tai C++ -kielellä » [1] [2] .

Ohjeet

Koodi CA 16 on varattu debuggerin käyttöön, eikä kieli käytä sitä, samoin kuin koodit FE16 ja FF16 , jotka on varattu virtuaalikoneen ja virheenkorjaajien käyttöön. Alueen CB 16 - FD 16 koodeja ei käytetä JVM:n nykyisessä versiossa, ja ne on varattu tulevia lisäyksiä varten.

Ohjeet voidaan jakaa useisiin ryhmiin:

On myös muutamia ohjeita, jotka suorittavat tiettyjä tehtäviä, kuten poikkeuksia, synkronointia ja niin edelleen.

Monissa ohjeissa on etuliitteitä tai jälkiliitteitä, jotka vastaavat niiden operandeja:

etuliite tai pääte operandityyppi
I kokonaisluku
L pitkä
S lyhyt
B tavu
C merkki
F kellua
D kaksinkertainen
A viite

Esimerkiksi operaatio IADD  on kahden kokonaisluvun yhteenlasku, kun taas FADD  on liukulukujen summaus.

Esimerkki

Koodi Java-kielellä :

ulkoinen : for ( int i = 2 ; i < 1000 ; i ++ ) { for ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) jatka ulompaa ; } Järjestelmä . ulos . println ( i ); }

kääntäjä voi kääntää seuraavaksi tavukoodiksi:

0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 44 9: iconst_2 10: istore_2 11: iload_2 12: iload_1 13: if_icmpge 13 : if_icmpge 31_16 : 2ne :5: 9 iload_16 : 2ne : 5 :i 31_16 : 2ne 25: iinc 2 , 1 28: goto 11 31: getstatic #84 ; //Kenttä java/lang/System.out:Ljava/io/PrintStream; 34: iload_1 35: invokevirtual #85 ; //Menetelmä java/io/PrintStream.println:(I)V 38: iinc 1 , 1 41: goto 2 44: return

Sukupolvi

Useimmissa tapauksissa Java-tavukoodi luodaan suoritettaviksi Java- virtuaalikoneessa Java- lähdekoodista . Ainoa natiivi kääntäjä, joka muuntaa Java-koodin Java-tavukoodiksi, on Javac , jonka on luonut Sun Microsystems . Mutta koska kaikki Java-tavukoodimääritykset ovat saatavilla, on olemassa kolmannen osapuolen kääntäjiä, jotka luovat tämän tavukoodin. Esimerkkejä tällaisista kääntäjistä:

  • Jikes  - kääntää Java-koodin Java-tavukoodiksi (kehittäjä IBM , kirjoitettu C++- kielellä ),
  • Espresso - kääntää Java-koodin Java-tavukoodiksi (Java 1.0 -versiolle),
  • GCJ (GNU Compiler for Java) - kääntää Java-koodin Java-tavukoodiksi, pystyy myös kääntämään alkuperäiseen konekoodiin , on osa GNU Compiler Collection -kokoelmaa .

Joissakin projekteissa on kääntäjiä, joiden avulla voit luoda tavukoodin JVM:lle toisen ohjelmointikielen lähdekoodista. Tällaisia ​​projekteja ovat mm.

Suurin osa olemassa olevista JVM-käskyistä on kirjoitettu staattisesti : menetelmän allekirjoitukset niiden kutsupaikoissa tarkistetaan käännösvaiheessa, mutta ei ole mekanismia tämän tarkistuksen siirtämiseksi ajonaikaiseen [3] . JVM:lle on kuitenkin otettu käyttöön useita dynaamisesti kirjoitettuja kieliä .

Muistiinpanot

  1. Peter Haggar, Tavukoodin ymmärtäminen tekee sinusta paremman ohjelmoijan Arkistoitu 8. joulukuuta 2008 Wayback Machinessa // IBM DeveloperWorks, 1. heinäkuuta 2001
  2. Muodollinen johdatus Java-kokoelmaan, Stephan Diehl, "Software - Practice and Experience", Voi. 28(3), sivut 297-327, maaliskuu 1998 . Haettu 25. huhtikuuta 2013. Arkistoitu alkuperäisestä 25. toukokuuta 2013.
  3. Nutter, Charles InvokeDynamic: todella hyödyllinen? (3. tammikuuta 2007). Käyttöpäivä: 25. tammikuuta 2008. Arkistoitu alkuperäisestä 30. huhtikuuta 2013.

Katso myös

  • Java-tavukoodiohjeista

Linkit