IJVM

IJVM är en instruktionsuppsättningsarkitektur skapad av Andrew Tanenbaum för sin MIC-1- arkitektur. Det används för att lära ut monteringsgrunderna i hans bok Structured Computer Organization .

IJVM är mestadels en delmängd av JVM assemblerspråket som används i Java-plattformen . Denna instruktionsuppsättning är så enkel att det är svårt att skriva komplexa program i den (till exempel finns inga skiftinstruktioner) .

IJVM-instruktioner

Mnemonisk Operander Beskrivning
BIPUSH byte Skjut en byte på stack
DUP N/A Kopiera översta ord på stack och tryck på stack
FELA N/A Skriv ut ett felmeddelande och stoppa simulatorn
GÅ TILL etikettens namn Ovillkorligt hopp
STANNA N/A Stoppa simulatorn
JAG LÄGGER TILL N/A Poppa två ord från högen; pressa deras summa
JAG OCH N/A Poppa två ord från högen; tryck boolesk AND
IFEQ etikettens namn Pop ord från stack och gren om det är noll
IFLT etikettens namn Pop ord från stack och gren om det är mindre än noll
IF_ICMPEQ etikettens namn Poppa två ord från stack och gren om de är lika
IINC variabelnamn, byte Lägg till ett konstant värde till en lokal variabel
ILOAD variabelnamn Tryck lokal variabel på stack
I N/A Läser ett tecken från tangentbordsbufferten och skjuter in det i stapeln. Om inget tecken är tillgängligt trycks 0
INVOKEVIRTUELLT metodnamn Anropa en metod, poppar objektreferens och valfritt poppar argument från stack.
IOR N/A Poppa två ord från högen; tryck på Boolean ELLER
JAG ÅTERVÄNDER N/A Retur från metod med heltalsvärde
ISTORE variabelnamn Pop ord från stack och lagra i lokal variabel
ISUB N/A Poppa två ord från högen; subtrahera det översta ordet från det andra till det översta ordet, tryck på skillnaden;
LDC_W konstant namn Tryck konstant från konstant pool till stapeln
NEJ N/A Göra ingenting
UT N/A Lägg ut ord från stapeln och skriv ut det till standardutskrift
POP N/A Ta bort ord från toppen av stapeln
BYTA N/A Byt ut de två översta orden på högen
BRED N/A Prefixinstruktion; nästa instruktion har ett 16-bitars index

Det finns också en uppsättning speciella ARRAY-instruktioner.

Instruktion Stapla innan* Stapla efter Beskrivning
NEWARRAY räkna arrayref Skapa ny array på heapen. Antalet måste vara av typen int. Den fälls av operandstapeln. Antalet representerar antalet element i arrayen som ska skapas. Baserat på Sun JVM-spec. Parametern atype utelämnas.
IALOAD index. arrayref värde Ladda från int array. Arrayref måste vara av typreferens och måste referera till en array vars komponenter är av typen int. Indexet måste vara av typen int. Både arrayref och index tas bort från operandstacken. Int-värdet i komponenten av arrayen vid index hämtas och skjuts in på operandstacken. En del av Sun JVM Spec.
IASTORE värde, index, arrayref ... Förvara i int array. Arrayref måste vara av typreferens och måste referera till en array vars komponenter är av typen int. Både index och värde måste vara av typen int. Arrayref, index och värde tas bort från operandstacken. Int-värdet lagras som komponenten i arrayen indexerad med index. En del av Sun JVM Spec.
W_OUT värde ... Poppa värdet från stapeln och skriv en decimalrepresentation av det till displayen. För felsökningsändamål. Inte en del av JVM-specifikationen.

*där det första värdet trycktes på stacken först, så toppen av stacken är operanden längst ner på listorna som visas ovan.

Operand beskrivningar

  • byte: En numerisk literal, i oktalt (032 - inledande noll), decimalt (26 - inga inledande siffror) eller hexadecimalt (0x1A - inledande noll-x) format. Tecken bokstaver ('M - ledande enstaka citattecken) är också tillåtna. Kompilerad till en 1-byte konstant.
  • etikettnamn: Strängnamnet på en etikett. Kompilerad till en 2-byte offset.
  • variabelnamn: Strängnamnet för en lokal variabel. Kompilerat till ett 1-byte-värde, vilket indikerar en offset i den lokala variabelramen.
  • metodnamn: Strängnamnet för en metod. När den sammanställs beräknas metodens adress och placeras i konstantpoolen. Denna operand ersätts sedan med 2-byte index (i den konstanta poolen) för adressen.
  • konstantnamn: Strängnamnet för en konstant. Sammanställt till ett 2-byte index.
  • N/A: Denna instruktion tar inga operander.

externa länkar

  • mic1 Gratis och öppen källkod MIC-1 mikroarkitektursimulator och IJVM assembler.
  • emuIJVM Öppen källkod och gratis, med en stackanimerad IJVM-simulator utvecklad av studenter vid University of Catania (för Windows, Mac, Linux)
  • En kursuppgift från Vrije Universiteit Amsterdam om implementering av en tolk/emulator för IJVM-instruktionsuppsättningen