📚 วิชาสถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)

เฉลยละเอียดและสอนทีละ Step ทุกข้อ (ข้อ 1 - 5)

อธิบายที่มาทุกขั้นตอน เทคนิคลัดทำข้อสอบ และจุดที่อาจารย์ชอบหักคะแนน

⚠️ ข้อ 4 และ 5 กำหนดโจทย์มาตรฐานยอดฮิตที่ออกสอบจริง
โจทย์ข้อที่ 1

จงแปลงเลขฐานสิบ 100.310 เป็นเลขฐานสอง ทศนิยม 5 ตำแหน่ง

(100.3)10 → (?)2
💡 หลักการสำคัญ: ตัวเลขที่มีจุดทศนิยม จะต้องแบ่งคิดเป็น 2 ส่วนเสมอ คือ ส่วนจำนวนเต็ม (100) และ ส่วนทศนิยม (0.3) แล้วค่อยนำมาประกบกัน

1 สเต็ปที่ 1: แปลงส่วนจำนวนเต็ม (100) ด้วยวิธี "ตั้งหารด้วย 2"

นำ 100 มาหารด้วย 2 บันทึกเศษไว้ด้านข้าง จนกว่าผลหารจะเป็น 0 แล้ว อ่านเศษย้อนจากล่างขึ้นบน

100 ÷ 2 = 50 เศษ 0   (บิตต่ำสุด LSB)
 50 ÷ 2 = 25 เศษ 0
 25 ÷ 2 = 12 เศษ 1
 12 ÷ 2 =  6 เศษ 0
  6 ÷ 2 =  3 เศษ 0
  3 ÷ 2 =  1 เศษ 1
  1 ÷ 2 =  0 เศษ 1   (บิตสูงสุด MSB, อ่านขึ้น ↑)

✅ ผลลัพธ์ส่วนจำนวนเต็ม: 11001002

ตรวจคำตอบด้วยค่าน้ำหนัก:
64 + 32 + 4 = 100 พอดี! (26 + 25 + 22)

2 สเต็ปที่ 2: แปลงส่วนทศนิยม (0.3) ด้วยวิธี "คูณด้วย 2 ต่อเนื่อง"

นำ 0.3 คูณด้วย 2 เก็บตัวเลขหน้าจุดไว้ แล้วนำเฉพาะเศษทศนิยมไปคูณต่อ ทำจนครบ 5 ตำแหน่ง แล้ว อ่านจากบนลงล่าง

1) 0.3 × 2 = 0.6  → บันทึก 0 (ตำแหน่งที่ 1)
2) 0.6 × 2 = 1.2  → บันทึก 1 (ตำแหน่งที่ 2)
3) 0.2 × 2 = 0.4  → บันทึก 0 (ตำแหน่งที่ 3)
4) 0.4 × 2 = 0.8  → บันทึก 0 (ตำแหน่งที่ 4)
5) 0.8 × 2 = 1.6  → บันทึก 1 (ตำแหน่งที่ 5)
   (อ่านลำดับจากบนลงล่าง ↓)

✅ ผลลัพธ์ส่วนทศนิยม 5 ตำแหน่ง: 0.010012

ข้อสังเกตเรื่องการปัดเศษ (สำคัญ):

ถ้าคูณตำแหน่งที่ 6: 0.6 × 2 = 1.2 (เป็น 1) ดังนั้น:

  • ถ้าตอบแบบ ตัดทิ้ง (Truncate 5 บิต): 0.010012
  • ถ้าตอบแบบ ปัดเศษ (Round up): 0.010102

*ในการสอบส่วนใหญ่ อาจารย์ต้องการดูขั้นตอน 5 บิตแรก คือ 0.010012 เขียนกำกับทั้งสองแบบจะได้คะแนนเต็มชัวร์

🎯 คำตอบสุดท้าย ข้อ 1:

100.310 ≈ 1100100.010012
โจทย์ข้อที่ 2

จงแปลงเลขติดลบ -100 เป็นเลขฐานสอง (ขนาด 8-bit)

-10010 → 8-bit Two's Complement
💡 หัวใจของวิชาสถาปัตย์คอมพิวเตอร์: ในระบบคอมพิวเตอร์และ CPU ตัวเลขติดลบจะถูกแทนด้วยระบบ Two's Complement (ส่วนเติมเต็ม 2) เสมอ!

1 สเต็ปที่ 1: หาค่าของเลขบวก (+100) ในรูปแบบ 8 บิต

จากข้อ 1 เราทราบว่า 100 = 11001002 (7 บิต) เมื่อเติมบิต 0 หน้าสุดเพื่อให้ครบ 8 บิต:

+10010 = 0110 01002

*(บิตหน้าสุดเป็น 0 หมายถึงเครื่องหมายบวก)

2 สเต็ปที่ 2: หา 1's Complement (กลับทุกบิต จาก 0 ↔ 1)

ค่าเดิม (+100) :  0 1 1 0 0 1 0 0
1's Complement:  1 0 0 1 1 0 1 1

3 สเต็ปที่ 3: หา 2's Complement โดยการ "บวก 1" เข้ากับ 1's Complement

  1001 1011  (1's Comp)
+         1  (บวก 1)
-----------
  1001 1100  (2's Complement)
⚡ เทคนิคลัด 3 วินาที (Fast Shortcut):

มองจาก ขวาสุดไปซ้ายสุด: เจอเลข 0 คงไว้, เจอเลข 1 ตัวแรกให้คงไว้... หลังจากนั้น กลับบิตที่เหลือทั้งหมดทันที!

เดิม: 0 1 1 0 0 1 0 0
ลัด: 1 0 0 1 1 1 0 0 → ได้ผลลัพธ์ตรงกันเป๊ะ!

4 ตรวจคำตอบ (Proof): ค่าน้ำหนักของระบบ 2's Complement ขนาด 8 บิต

บิตหน้าสุด (MSB) มีน้ำหนักเป็นค่าลบเสมอ คือ -27 = -128 ส่วนบิตอื่นๆ มีน้ำหนักบวกตามปกติ:

= (-128 × 1) + (64 × 0) + (32 × 0) + (16 × 1) + (8 × 1) + (4 × 1) + (2 × 0) + (1 × 0)
= -128 + 16 + 8 + 4
= -128 + 28 = -100 (ถูกต้องสมบูรณ์ 100%)

🎯 คำตอบสุดท้าย ข้อ 2 (ทั้ง 3 รูปแบบที่อาจารย์มักถาม):

Sign-Magnitude: 111001002
1's Complement: 100110112
2's Complement (คำตอบหลัก): 100111002
โจทย์ข้อที่ 3

จงคำนวณการลบเลขฐานสิบหก: 0A16 - 7F16

0A16 - 7F16
💡 การวิเคราะห์ก่อนเริ่มทำ: 0A16 = 1010 ส่วน 7F16 = (7 × 16) + 15 = 12710
เนื่องจากตัวตั้ง (10) น้อยกว่าตัวลบ (127) ผลลัพธ์ต้อง ติดลบแน่นอน (10 - 127 = -11710)

วิธีที่ 1: ลบโดยตรงในเลขฐาน 16 (Direct Hex Subtraction)

วิธีทำคณิตศาสตร์ทั่วไป

เมื่อตัวตั้งน้อยกว่าตัวลบ ให้สลับเครื่องหมายลบไว้ข้างหน้า: 0A - 7F = -(7F - 0A)

    7 F16   (ตัวลบ = 127)
-   0 A16   (ตัวตั้ง = 10)
--------
    7 516
หลักขวา: F - A = 15 - 10 = 5
หลักซ้าย: 7 - 0 = 7

ใส่เครื่องหมายลบกลับเข้าไป:

-7516 -(7 × 16 + 5) = -(112 + 5) = -11710

วิธีที่ 2: วิธี 2's Complement ในระบบคอมพิวเตอร์ (ALU Subtraction) ⭐

วิธีที่อาจารย์สถาปัตย์มักตรวจให้คะแนน

หน่วยคำนวณของ CPU (ALU) จะไม่ใช้การยืม แต่จะเปลี่ยนการลบเป็นการบวกด้วย 2's Complement: A - B = A + (-B)

1) แปลง 0A16 เป็นฐานสอง 8 บิต: 0000 10102

2) แปลง 7F16 เป็นฐานสอง 8 บิต: 0111 11112

3) หา 2's Complement ของ 7F16 เพื่อทำเป็น -7F:

- 1's Complement: 1000 0000
- บวก 1: 1000 0000 + 1 = 1000 00012 (เท่ากับ 8116)
    0000 1010  (0A16)
+   1000 0001  (-7F16 หรือ 8116)
-------------
    1000 10112  → แปลงเป็น Hex: 8B16
ตรวจค่า 8B16 (ระบบ 8-bit Signed):
บิต MSB = 1 แปลว่าเป็นค่าติดลบ! หาขนาดโดยทำ 2's complement ย้อนกลับ: 1000 1011 → 0111 0100 + 1 = 0111 01012 = 7516 (นั่นคือ -7516 หรือ -11710 นั่นเอง!)

🎯 คำตอบสุดท้าย ข้อ 3:

0A16 - 7F16 = -7516  (หรือ 8B16 ในระบบ 8-bit Two's Complement)
โจทย์ข้อที่ 4 (กำหนดโจทย์ข้อสอบยอดนิยม)

จงออกแบบวงจรลอจิก (Logic Design) และวาดผังวงจรเกต

2-to-1 MUX / Logic Circuit

📝 โจทย์สมมติที่อาจารย์นิยมนำมาออกสอบ:

"จงออกแบบวงจรควบคุมสัญญาณแจ้งเตือน (Y) ที่มีอินพุต 3 ตัวคือ A (โหมดสวิตช์), B (เซนเซอร์ 1) และ C (เซนเซอร์ 2) โดยมีเงื่อนไขดังนี้:

  • ถ้าโหมด A = 1 สัญญาณ Y จะทำงานตามเซนเซอร์ B (นั่นคือ A·B)
  • ถ้าโหมด A = 0 สัญญาณ Y จะทำงานตามเซนเซอร์ C (นั่นคือ A'·C)
  • เขียนสมการบูลีนได้เป็น: Y = (A · B) + (A' · C)"

สเต็ปที่ 1: เขียนตารางความจริง (Truth Table)

A (Select) B C A'·C A·B Output (Y) คำอธิบาย
000000A=0 → เช็ค C (C=0 ได้ 0)
001101A=0 → เช็ค C (C=1 ได้ 1)
010000A=0 → เช็ค C (C=0 ได้ 0)
011101A=0 → เช็ค C (C=1 ได้ 1)
100000A=1 → เช็ค B (B=0 ได้ 0)
101000A=1 → เช็ค B (B=0 ได้ 0)
110011A=1 → เช็ค B (B=1 ได้ 1)
111011A=1 → เช็ค B (B=1 ได้ 1)

สเต็ปที่ 2: วิเคราะห์เกตลอจิกที่ต้องใช้ในการสร้างวงจร

1) NOT Gate (Inverter) 1 ตัว รับสัญญาณ A เข้ามา กลับเป็น A' (NOT A)
2) AND Gate 2 ตัว • ตัวบน: รับ A และ B ได้ผลลัพธ์เป็น A · B
• ตัวล่าง: รับ A' และ C ได้ผลลัพธ์เป็น A' · C
3) OR Gate 1 ตัว นำเอาต์พุตจาก AND ทั้งสองตัวมารวมกันเป็น Y = (A·B) + (A'·C)

สเต็ปที่ 3: ผังวงจรลอจิก (Logic Circuit Diagram)

รูปวงจรที่ต้องวาดส่งอาจารย์
A B C NOT A' AND 1 T1 = A·B AND 2 T2 = A'·C OR Y Y = A·B + A'·C
โจทย์ข้อที่ 5 (กำหนดโจทย์ข้อสอบยอดนิยม)

วิเคราะห์วงจรลอจิกที่กำหนดให้ แล้วเขียนตารางความจริง (Truth Table)

Circuit → Truth Table
💡 เทคนิคสำคัญในการทำข้อสอบ: เวลาเจอรูปวงจร อย่าพยายามคิดเอาต์พุต Y ในหัวทันที! ให้ กำหนดชื่อจุดเชื่อมต่อ (Nodes) คั่นกลางทีละจุด แล้วสร้างคอลัมน์ทดในตารางความจริง จะไม่มีวันผิดพลาดเลย!

สเต็ปที่ 1: วิเคราะห์รูปวงจรและระบุจุดเชื่อมต่อ (Node Labels)

A B C จุด N1 = B' AND 1 จุด T1 = A·B' AND 2 จุด T2 = B·C OR Y
จุดทดที่ 1 (N1): ผ่าน NOT Gate กลับค่าของ B ได้เป็น B'
จุดทดที่ 2 (T1 & T2): T1 = A · B' และ T2 = B · C
จุดเอาต์พุต (Y): Y = T1 + T2 = (A · B') + (B · C)

สเต็ปที่ 2: กรอกตารางความจริง (Truth Table) ครบทั้ง 8 แถว

มีอินพุต 3 ตัว (A, B, C) ดังนั้นจะมีทั้งหมด 23 = 8 กรณี (000 ถึง 111):

แถว A B C B' (NOT B) T1 (A·B') T2 (B·C) Output Y (T1 + T2)
0 000 100 0
1 001 100 0
2 010 000 0
3 011 001 1
4 100 110 1
5 101 110 1
6 110 000 0
7 111 001 1
สรุปผลลัพธ์:

เอาต์พุต Y จะเป็น 1 ในกรณีแถวที่ 3, 4, 5 และ 7 (เขียนแบบ Minterm: Y = Σm(3, 4, 5, 7))

💡 สูตรลัดและสรุปหัวใจสำคัญก่อนเข้าห้องสอบสถาปัตย์คอมพิวเตอร์

ทบทวน 3 นาที จำ 5 กฎเหล็กนี้ได้ ทำข้อสอบเลขฐานและวงจรลอจิกได้เต็มแน่นอน

1. แปลงทศนิยมฐาน 10 เป็นฐาน 2

  • ส่วนเต็ม: นำไป หารด้วย 2 อ่านเศษจาก ล่างขึ้นบน
  • ส่วนทศนิยม: นำไป คูณด้วย 2 ดึงเลขหน้าจุด อ่านจาก บนลงล่าง

2. แปลงเลขติดลบ (2's Complement ลัด)

  • แปลงเลขบวกเป็น 8 บิตก่อนเสมอ (บิตหน้าสุดต้องเป็น 0)
  • มองจาก ขวาไปซ้าย: เจอเลข 0 คงเดิม, เจอเลข 1 ตัวแรกคงเดิม ที่เหลือข้างหน้า สลับทุกบิต

3. การลบเลขฐานสิบหก (Hex Subtraction)

  • ถ้าตัวตั้งน้อยกว่าตัวลบ ผลลัพธ์ต้อง ติดลบ เสมอ!
  • จำค่าตัวอักษร: A=10, B=11, C=12, D=13, E=14, F=15
  • ในคอมพิวเตอร์: A - B จะทำผ่าน A + (2's Comp ของ B)

4. ตารางความจริง & วงจรลอจิก

  • AND (·): จะเป็น 1 เมื่อทุกตัวเป็น 1
  • OR (+): จะเป็น 1 เมื่อมีอย่างน้อยตัวใดตัวหนึ่งเป็น 1
  • NOT ('): กลับค่า 0 ↔ 1
  • ทริคทำตาราง: สร้างคอลัมน์ของจุดทด (Node) คั่นกลางเสมอ อย่าเดาคำตอบสุดท้ายรวดเดียว!
คลังความรู้ฉบับสมบูรณ์

เจาะลึก Logic Gates และรูปแบบวงจรดิจิทัลทั้งหมด

7 Logic Gates + Circuits
ในสถาปัตยกรรมคอมพิวเตอร์และวงจรดิจิทัล Logic Gate คือหน่วยพื้นฐานที่สุดที่สร้างขึ้นจากทรานซิสเตอร์ (Transistors) เพื่อคำนวณและประมวลผลข้อมูลเลขฐานสอง (0 และ 1) โดยแบ่งออกเป็น 3 ตระกูลหลัก ดังต่อไปนี้:
ตระกูลที่ 1

Basic Logic Gates (เกตพื้นฐาน 3 ตัวหลัก)

1. AND Gate (และ)

Y = A · B
A B Y

กฎจำง่าย: "ต้องเป็น 1 ทั้งคู่ ถึงจะได้ 1" เปรียบเหมือน สวิตช์ต่ออนุกรม ถ้าตัวใดตัวหนึ่งเปิด วงจรก็ขาด

ABY
000
010
100
111

2. OR Gate (หรือ)

Y = A + B
A B Y

กฎจำง่าย: "ขอแค่มี 1 อย่างน้อยตัวเดียว ก็ได้ 1 ทันที" เปรียบเหมือน สวิตช์ต่อขนาน ไฟไหลผ่านทางใดทางหนึ่งได้

ABY
000
011
101
111

3. NOT Gate (Inverter)

Y = A'
A Y

กฎจำง่าย: "กลับค่าเสมอ (0 ↔ 1)" มีวงกลมเล็กๆ เรียกว่า Inversion Bubble อยู่ที่ปลายแหลม

AY (A')
01
10
ตระกูลที่ 2

Universal Gates (เกตสารพัดประโยชน์ที่สร้างเกตได้ทุกชนิด)

4. NAND Gate (NOT-AND)

เกตที่ใช้สร้าง SSD (NAND Flash Memory)
Y = (A · B)'
A B Y

กฎจำง่าย: "ตรงข้ามกับ AND ทุกกรณี" → จะเป็น 0 เฉพาะเมื่ออินพุตเป็น 1 ทั้งคู่ เท่านั้น

ABANDNAND (Y)
0001
0101
1001
1110

5. NOR Gate (NOT-OR)

เกตที่นิยมใช้ในวงจร Flip-Flop (Latch)
Y = (A + B)'
A B Y

กฎจำง่าย: "ตรงข้ามกับ OR ทุกกรณี" → จะเป็น 1 เฉพาะเมื่ออินพุตเป็น 0 ทั้งหมด เท่านั้น

ABORNOR (Y)
0001
0110
1010
1110
ตระกูลที่ 3

Arithmetic & Parity Gates (เกตคำนวณและเปรียบเทียบข้อมูล)

6. XOR Gate (Exclusive-OR) ⭐

หัวใจของวงจรบวกเลข (Adder) ใน CPU
Y = A ⊕ B
A B Y

กฎจำง่าย: "ต่างกันได้ 1, เหมือนกันได้ 0"
สมการบูลีนแตกรูป: Y = A'·B + A·B'

ABXOR (Y)เหตุผล
000เหมือนกัน
011ต่างกัน
101ต่างกัน
110เหมือนกัน

7. XNOR Gate (Exclusive-NOR)

วงจร Comparator ตรวจจับ A เท่ากับ B หรือไม่
Y = A ⊙ B
A B Y

กฎจำง่าย: "เหมือนกันได้ 1, ต่างกันได้ 0"
สมการบูลีนแตกรูป: Y = A·B + A'·B'

ABXNOR (Y)เหตุผล
001เหมือนกัน (0 กับ 0)
010ต่างกัน
100ต่างกัน
111เหมือนกัน (1 กับ 1)

📐 เทคนิคขั้นสูง: SOP vs POS และกฎเดอมอร์แกน (De Morgan's Laws)

SOP (Sum of Products) - นิยมออกสอบ 90%

คือการมองหาแถวที่ ผลลัพธ์เป็น 1 (Minterms, สัญลักษณ์ Σm) แล้วนำตัวแปรในแถวนั้นมา AND กัน แล้วนำทุกแถวมา OR กัน

ตัวอย่าง: Y = A'B'C + A'BC + ABC
POS (Product of Sums)

คือการมองหาแถวที่ ผลลัพธ์เป็น 0 (Maxterms, สัญลักษณ์ ΠM) แล้วนำตัวแปรในแถวนั้นมา OR กัน (กลับบิต 0 เป็นตัวแปรปกติ, 1 เป็นตัวติดบาร์) แล้วนำมารวมด้วย AND

ตัวอย่าง: Y = (A + B + C)(A' + B + C')
⚡ กฎเดอมอร์แกน (De Morgan's Laws) - คาถายุบวงจร:

ท่องจำประโยคสั้นๆ: "ผ่าบาร์ สลับเครื่องหมาย" (Break the bar, change the sign)

กฎข้อที่ 1: (A · B)' = A' + B'
NAND Gate มีค่าเท่ากับ OR Gate ที่กลับบิตอินพุต
กฎข้อที่ 2: (A + B)' = A' · B'
NOR Gate มีค่าเท่ากับ AND Gate ที่กลับบิตอินพุต

💡 ตัวอย่างวงจรจริงใน CPU: วงจรบวกเลขครึ่งตัว (Half Adder Circuit)

1-bit Binary Adder

การบวกเลขฐานสอง 1 บิต (A + B) จะเกิด 2 สัญญาณ คือ ผลบวก (Sum = A ⊕ B) และ ตัวทด (Carry = A · B):

A B Sum = A ⊕ B Carry = A · B