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
Kategorier: