ผลต่างระหว่างรุ่นของ "Com sys lab/instruction set"
ไปยังการนำทาง
ไปยังการค้นหา
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 9 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 12: | แถว 12: | ||
== ชุดคำสั่ง == | == ชุดคำสั่ง == | ||
+ | === คำสั่ง nop === | ||
+ | * <tt>0000 0000</tt> --- '''NOP''' | ||
+ | |||
=== คำนวณคณิตศาสตร์ === | === คำนวณคณิตศาสตร์ === | ||
+ | คำสั่ง ALU จะมีรูปแบบคือ <tt>00xx xxxx</tt> (หมายเหตุ ต้องระวังไม่ให้มีคำสั่ง 0000 0000 = NOP) | ||
+ | |||
+ | ทุกคำสั่งจะทำงานกับ $0 (บวกเข้ากับ $0, ลบจาก $0) | ||
+ | |||
+ | * <tt>0001 0rrr</tt> --- '''ADD r''' | ||
+ | * <tt>0001 1rrr</tt> --- '''SUB r''' | ||
+ | |||
+ | * <tt>0000 1rrr</tt> --- '''NAND r''' | ||
+ | * <tt>0010 0rrr</tt> --- '''AND r''' | ||
+ | * <tt>0010 1rrr</tt> --- '''OR r''' | ||
+ | |||
=== กระโดด === | === กระโดด === | ||
+ | คำสั่งกระโดดทั้งหมดจะมีรูปแบบคือ <tt>11xx xxxx</tt> | ||
+ | |||
+ | การกระโดดทั่วไปจะเป็น short jump (relative jump) โดยค่า PC จะโดนปรับตามค่า immediate (คิดเป็น signed 4 bit integer) ที่ระบุใน instruction ค่า PC ตั้งต้นจะเป็น PC ของคำสั่งนั้นเอง เช่น ถ้าสั่ง '''JMP 0''' จะกระโดดค้างอยู่ที่เดิม | ||
+ | |||
+ | * <tt>1100 iiii</tt> --- '''JMP i''' (unconditional jump) | ||
+ | * <tt>1101 iiii</tt> --- '''JZ i''' (jump if zero flag is set) | ||
+ | |||
+ | * <tt>1111 0000</tt> --- '''JL''' (unconditional long jump) กระโดดไปที่ตำแหน่ง $6:$7 | ||
+ | |||
=== อ่านและเขียนค่า === | === อ่านและเขียนค่า === | ||
+ | คำสั่งอ่านและเขียนค่าจะมีรูปแบบคือ <tt>10xx xxxx</tt> | ||
+ | |||
+ | * <tt>1000 0rrr</tt> --- '''LDA r''' | ||
+ | * <tt>1000 1rrr</tt> --- '''STA r''' | ||
+ | |||
+ | * <tt>1011 iiii</tt> --- '''LDAI i''' (load immediate to $0) | ||
+ | |||
+ | * <tt>1001 0000</tt> --- '''LDAM''' (load data memory at address $6:$7 to $0) | ||
+ | * <tt>1001 1000</tt> --- '''STAM''' (save $0 to data memory at address $6:$7) |
รุ่นแก้ไขปัจจุบันเมื่อ 23:34, 21 พฤษภาคม 2563
- จาก com sys lab
หน้านี้จะระบุคำสั่งและสถาปัตยกรรมพื้นฐานของ cpu ที่จะสร้าง
เนื้อหา
รายละเอียดทั่วไป
- มี 4 บิต register จำนวน 8 ตัว ตัวที่ $0 และ $7 เป็นตัวที่มีหน้าที่พิเศษ
- คำสั่งทุกคำสั่งมีขนาดเท่ากันหมด มีขนาด 8 บิต
- การติดต่อกับหน่วยความจำแบ่งเป็นสองส่วน คือ
- Instruction Memory - อ่านอย่างเดียว เป็นหน่วยความจำ 8 บิต มี address 8 เส้น (รวมเนื้อที่ 256 ไบต์)
- Data Memory - อ่านและเขียน เป็นหน่วยความจำ 4 บิต มี address 8 เส้น (รวมเนื้อที่ 256 x 4bit)
- การคำนวณเชิงเลขต่างๆ จะทำกับ register $0 ซึ่งบางครั้งจะเรียกว่า accumulator หรือบางทีอาจจะเขียนเป็น $a
ชุดคำสั่ง
คำสั่ง nop
- 0000 0000 --- NOP
คำนวณคณิตศาสตร์
คำสั่ง ALU จะมีรูปแบบคือ 00xx xxxx (หมายเหตุ ต้องระวังไม่ให้มีคำสั่ง 0000 0000 = NOP)
ทุกคำสั่งจะทำงานกับ $0 (บวกเข้ากับ $0, ลบจาก $0)
- 0001 0rrr --- ADD r
- 0001 1rrr --- SUB r
- 0000 1rrr --- NAND r
- 0010 0rrr --- AND r
- 0010 1rrr --- OR r
กระโดด
คำสั่งกระโดดทั้งหมดจะมีรูปแบบคือ 11xx xxxx
การกระโดดทั่วไปจะเป็น short jump (relative jump) โดยค่า PC จะโดนปรับตามค่า immediate (คิดเป็น signed 4 bit integer) ที่ระบุใน instruction ค่า PC ตั้งต้นจะเป็น PC ของคำสั่งนั้นเอง เช่น ถ้าสั่ง JMP 0 จะกระโดดค้างอยู่ที่เดิม
- 1100 iiii --- JMP i (unconditional jump)
- 1101 iiii --- JZ i (jump if zero flag is set)
- 1111 0000 --- JL (unconditional long jump) กระโดดไปที่ตำแหน่ง $6:$7
อ่านและเขียนค่า
คำสั่งอ่านและเขียนค่าจะมีรูปแบบคือ 10xx xxxx
- 1000 0rrr --- LDA r
- 1000 1rrr --- STA r
- 1011 iiii --- LDAI i (load immediate to $0)
- 1001 0000 --- LDAM (load data memory at address $6:$7 to $0)
- 1001 1000 --- STAM (save $0 to data memory at address $6:$7)