 
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 | 
 
 
 |