I've been working on an Intel 8086 emulator for about a month now. I've decided to start counting cycles to make emulation more accurate and synchronize it correctly with the PIT.
The clock cycles used for each instruction are detailed in Intel's User Manual but I'd like to know how they're calculated. For example, I've deduced the following steps for the XCHG mem8,reg8
instruction - which takes exactly 17 clock cycles according to the manual:
- decode the second byte of the instruction: +1 cycle;
- transfer first operand from memory into a temporary location: +7 cycles;
- transfer second operand from register into memory destination: +8 cycles;
- transfer first operand from temporary location into register destination: +1 cycle.
But I'm probably completely wrong as my reasoning doesn't seem to work for all instructions. For instance, I can't comprehend why the PUSH reg
instruction takes 11 clock cycles, whereas the POP reg
instruction only takes 8 clock cycles.
So, could you tell me how clock cycles are spent in each instruction, or rather a general method to understand where those numbers come from?
Thank you.