IJVM was not byte-code compatible with JVM, it simply took some concepts from PicoJava, itself a simplified version of the Java virtual machine v1, and used them to create the ideal teaching platform precisely for courses where it makes sense to show how the CPU works.
Even microcoded!
IJVM has several implementations, the first version we came across in 2000s laboratories was taken from the book and was called "MIC1", where "MIC" means "microcoded", first version.
IJVM is a machine that emphasizes "clean" separation of code space from data space, which is further separated into constant (i.e. read-only) space, temporary working space (RW, only in advanced MIC versions), and stack space, which is the primary working space.
The 2000s implementations from MIC1 to MIC4 are all strongly and rigorously "strickly stack-based", which is described at multiple levels, starting from the hardware level, on which the laboratory activities involve the study and writing of "micro - code" first, and then macrocode.
I remember there were to tools for that, a micro-assembler, and a macro-assembler, both written in Java-v1, and provided as .jar in both CLI and GUI version.
Both provided with the Tanenbaum's book.
All ISA level instructions are implemented this way, with all the necessary details and examples.
So you can see what's behind an "iadd" (integer add) doing
- stack_push (A)
- stack_push (B)
- stack_pop (A+B)
iadd does all these steps one-shot. You have to describe these steps in details in macro-assembly.
And in particular the stack approach is highlighted, the Reverse Polish Notation is introduced, as an alternative to the "recursive descend parser" (used in general purpose CPUs, not strictly stack-based), for the unraveling of simple mathematical expressions.
Today... much less importance is given, and instead of the micro and macro levels, the Intel 8088 ISA is directly introduced, saying "intel has implemented these instructions, which do this, and that, see the Intel manual for reference, it it doesn't matter how they were implemented"
It will no longer be necessary to work on micro and macro assemblers!
No more examples of microcoded implementations described in detail!
There are still some in the book, and the suggested approach is for a few superficial quotes, exhausted in less than 4 hours of the course! Against two months of laboratory activities that were held in 2000!
You understand that if the level is this, it almost makes no sense to make any distinction below the ISA.
And, worse, the clear separation between the "constant-pool" and workspace is no longer emphasized.
And since 8088 is not even a strictly stack-based architecture(1), I leave you to imagine how much emphasis is lost even on the reverse Polish notation approach.
(1) to be able to use memory in a linear way, you need to evolve MIC1 to level 5, MIC5. It was done in the advanced laboratories, and you spit blood to get there, and you could ONLY do it after having understood and overcome the previous laboratories.