ผลต่างระหว่างรุ่นของ "Com sys lab/instruction set"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 3 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 12: แถว 12:
  
 
== ชุดคำสั่ง ==
 
== ชุดคำสั่ง ==
 +
=== คำสั่ง nop ===
 +
* <tt>0000 0000</tt> --- '''NOP'''
 +
 
=== คำนวณคณิตศาสตร์ ===
 
=== คำนวณคณิตศาสตร์ ===
คำสั่ง ALU จะมีรูปแบบคือ <tt>000x xxxx</tt>
+
คำสั่ง ALU จะมีรูปแบบคือ <tt>00xx xxxx</tt> (หมายเหตุ ต้องระวังไม่ให้มีคำสั่ง 0000 0000 = NOP)
  
 
ทุกคำสั่งจะทำงานกับ $0 (บวกเข้ากับ $0, ลบจาก $0)
 
ทุกคำสั่งจะทำงานกับ $0 (บวกเข้ากับ $0, ลบจาก $0)
  
* <tt>0000 0rrr</tt> --- '''ADD r'''
+
* <tt>0001 0rrr</tt> --- '''ADD r'''
* <tt>0000 1rrr</tt> --- '''SUB 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'''
  
 
=== กระโดด ===
 
=== กระโดด ===

รุ่นแก้ไขปัจจุบันเมื่อ 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)