This a page of stuff related to IJVM. Ijvm is a simplified assembly language that originated with the book _Structured Computer Organization_, as a way of teaching assembly language programming and microcode without all the cruft of an actual assembly language. I learned it as part of my CSE 220 course.

Unfortunately, IJVM is missing many important instuctions. Therein lies the challenge. Many instructions that would be available on an actual processor are simply missing in IJVM, so getting done some tasks that would be simple in other environments is hard under IJVM. And, in a perverse way, that appeals to me.

So, I put together this page, with some of my efforts related to IJVM.

Please note I'm not interested in answering what are obviously homework questions. Such messages, when emailed to me, will be ignored or mocked at my discretion.

To use my stuff, you'll probably need version 1.0d or greater of mic1. That package contains the IJVM assembler, as well as a mic1 simulator.

Interesting Programs

This page contains various IJVM and RURI programs I have written on my own. (As opposed to writing them to satisfy class requirements.


Idbg is my unix-based IJVM execution environment and debugger. I wrote it to help me understand the workings of my code. It includes stack dump and disassembler functionality. It's written in C++ and requires the readline, history, and ncurses libraries. It emulates IJVM at the ISA level, unlike mic1sim which emulates the hardware at a microcode level.

Version 0.2 adds IJVMA support to idbg.

Version 0.3 fixed a problem with the IJVMA support. (The ALLOCA instruction allocated one less byte than it should have.)

The current version is 0.3 which was released 5 May 2000.

All released versions are still available on the web.


IJVMA is a four instruction extenstion to IJVM. It adds support for arbitrary memory access to the basic IJVM instruction set. It can be implemented in mic1sim using updated microcode, and is also supported by Idbg and ruri.

This is the second version of the microcode, fixing the iput instruction.