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