Idea: emulate subset of IA32, so that we can run on real old i386 hardware, without floating point opcode bits R0 EAX 0 R1 ECX 1 R2 EDX 2 R3 EBX 3 R4 ESP 4 R5 EBP 5 R6 ESI 6 R7 EDI 7 EIP EFLAGS have only a minimal set of operations: mov add sub and or not xor neg cmp je/jne/ja/jae/jb/jbe ror shr pop push call/jsr ret jmp this is special stuff not really needed in the high-level language, but we need it in order to write an operating system on a PC (Oberon puts those things into a system module in order to keep it away from the general purpose language): cli sti reti in out hlt int nop may be useful for patchable binary formats and timing issues (implementing loops with known timing) early output, e.g. PC port 0x80 POST usual abbreviations, they make code more compact or/and execution faster: xor eax, eax -> mov eax, 0 inc eax -> add eax, 1 test eax, eax -> cmp eax, 0 lea -> mov, add, etc. links ----- http://pages.cs.wisc.edu/~markhill/cs354/Fall2008/notes/Pentium.html