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