|  
CPU Simulation
 |  | 
| ปรับปรุง : 2562-02-01 (ปรับ template)
 | 
| จำลองการทำงาน (Simulation) ของหน่วยประมวลผลของคอมพิวเตอร์ยุค 8 Bit
 | 
| 
ขั้นตอนการทดสอบโปรแกรม : 
- Download: computer80286.zip หรือ computer1_en50.zip
- เปิดโปรแกรม
- กด F2 เข้าส่วนของ Data
- กด F4 เพื่อ Load แฟ้มตัวอย่าง
- พิมพ์ชื่อแฟ้มที่มีอยู่เช่น add_8bit.cpu
- กด ESC กลับสู่ส่วนการ Data
- กด ESC กลับสู่ Main Menu
- กด F3 เข้าสู่ Editor แสดง Simulation
- กด F5 หรือ F6 ไปบรรทัดที่ต้องการ
- กด F3 เพื่อพิมพ์ภาษา Assembly แทนตำแหน่งเดิม
- กด F2 เพื่อทำ Simulation [add_8bit.cpu]
* Control Bus ชี้ที่ IP
 - ย้าย IP ซึ่งชี้อยู่ที่ 01 เข้า Address Bus
 - IP เปลี่ยนเป็น 02 ทันที เพราะมีการเลื่อน IP
 - ย้าย 47 จาก Code Segment เข้า OP-Code => Mnemonic คือ mov a,[c]
 - ย้าย IP ซึ่งชี้อยู่ที่ 02 เข้า Address Bus
 - ย้าย 80 จาก Code Segment ซึ่งชี้อยู่ที่ 02 เข้า Address Bus
 - ย้ายข้อมูลมีค่า 37 จาก Data Segment ที่ตำแหน่ง 80 เข้าไป ALU
 - ย้ายข้อมูลจาก ALU เข้า Register A
 * ย้าย IP ซึ่งชี้อยู่ที่ 03 เข้า Address Bus
 | Sample code for SIM. IP: OP-Code  Mnemonic
 01: 47 80  MOV A,[80]
 03: 67 88  ADD A,[88]
 05: 3B 90  MOV [90],A
 07: 47 80  MOV A,[80]
 Screen 1
 
   | 
| Screen 2 
   | Screen 3 
   | Screen 4 
   | 
| Screen 5 
   | Screen 6 
   | Screen 7 
   | 
| OpCode of Intel Assembly 80x86 Mnemonics
 From :http://www.jegerlehner.ch/intel/opcode.html
 TRANSFER
 
 
| Name | Comment | Syntax |  
| MOV | Move (copy) | MOV Dest,Source |  
| XCHG | Exchange | XCHG Op1,Op2 |  
| STC | Set Carry | STC |  
| CLC | Clear Carry | CLC |  
| CMC | Complement Carry | CMC |  
| STD | Set Direction | STD |  
| CLD | Clear Direction | CLD |  
| STI | Set Interrupt | STI |  
| CLI | Clear Interrupt | CLI |  
| PUSH | Push onto stack | PUSH Source |  
| PUSHF | Push flags | PUSHF |  
| PUSHA | Push all general registers | PUSHA |  
| POP | Pop from stack | POP Dest |  
| POPF | Pop flags | POPF |  
| POPA | Pop all general registers | POPA |  
| CBW | Convert byte to word | CBW |  
| CWD | Convert word to double | CWD |  
| CWDE | Conv word extended double | CWDE |  
| IN | Input | IN Dest, Port |  
| OUT | Output | OUT Port, Source |  ARITHMETIC
 
 
| Name | Comment | Syntax |  
| ADD | Add | ADD Dest,Source |  
| ADC | Add with Carry | ADC Dest,Source |  
| SUB | Subtract | SUB Dest,Source |  
| SBB | Subtract with borrow | SBB Dest,Source |  
| DIV | Divide (unsigned) | DIV Op |  
| IDIV | Signed Integer Divide | IDIV Op |  
| MUL | Multiply (unsigned) | MUL Op |  
| IMUL | Signed Integer Multiply | IMUL Op |  
| INC | Increment | INC Op |  
| DEC | Decrement | DEC Op |  
| CMP | Compare | CMP Op1,Op2 |  
| SAL | Shift arithmetic left | SAL Op,Quantity |  
| SAR | Shift arithmetic right | SAR Op,Quantity |  
| RCL | Rotate left through Carry | RCL Op,Quantity |  
| RCR | Rotate right through Carry | RCR Op,Quantity |  
| ROL | Rotate left | ROL Op,Quantity |  
| ROR | Rotate right | ROR Op,Quantity |  LOGIC
 
 
| Name | Comment | Syntax |  
| NEG | Negate (two-complement) | NEG Op |  
| NOT | Invert each bit | NOT Op |  
| AND | Logical and | AND Dest,Source |  
| OR | Logical or | OR Dest,Source |  
| XOR | Logical exclusive or | XOR Dest,Source |  
| SHL | Shift logical left | SHL Op,Quantity |  
| SHR | Shift logical right | SHR Op,Quantity |  MISCELLANEOUS
 
 
| Name | Comment | Syntax |  
| NOP | No operation | NOP |  
| LEA | Load effective adress | LEA Dest,Source |  
| INT | Interrupt | INT Nr |  JUMPS (general)
 
 
| Name | Comment | Syntax |  
| CALL | Call subroutine | CALL Proc |  
| JMP | Jump | JMP Dest |  
| JE | Jump if Equal | JE Dest |  
| JZ | Jump if Zero | JZ Dest |  
| JCXZ | Jump if CX Zero | JCXZ Dest |  
| JP | Jump if Parity (Parity Even) | JP Dest |  
| JPE | Jump if Parity Even | JPE Dest |  
| RET | Return from subroutine | RET |  
| JNE | Jump if not Equal | JNE Dest |  
| JNZ | Jump if not Zero | JNZ Dest |  
| JECXZ | Jump if ECX Zero | JECXZ Dest |  
| JNP | Jump if no Parity (Parity Odd) | JNP Dest |  
| JPO | Jump if Parity Odd | JPO Dest |  JUMPS unsigned (Cardinal)
 
 
| JA | Jump if Above | JA Dest |  
| JAE | Jump if Above or Equal | JAE Dest |  
| JB | Jump if Below | JB Dest |  
| JBE | Jump if Below or Equal | JBE Dest |  
| JNA | Jump if not Above | JNA Dest |  
| JNAE | Jump if not Above or Equal | JNAE Dest |  
| JNB | Jump if not Below | JNB Dest |  
| JNBE | Jump if not Below or Equal | JNBE Dest |  
| JC | Jump if Carry | JC Dest |  
| JNC | Jump if no Carry | JNC Dest |  JUMPS signed (Integer)
 
 
| JG | Jump if Greater | JG Dest |  
| JGE | Jump if Greater or Equal | JGE Dest |  
| JL | Jump if Less | JL Dest |  
| JLE | Jump if Less or Equal | JLE Dest |  
| JNG | Jump if not Greater | JNG Dest |  
| JNGE | Jump if not Greater or Equal | JNGE Dest |  
| JNL | Jump if not Less | JNL Dest |  
| JNLE | Jump if not Less or Equal | JNLE Dest |  
| JO | Jump if Overflow | JO Dest |  
| JNO | Jump if no Overflow | JNO Dest |  
| JS | Jump if Sign  (= negative) | JS Dest |  
| JNS | Jump if no Sign (= positive) | JNS Dest |  |