ข้ามไปยังเนื้อหา

พื้นฐานของโปรเซสเซอร์

Computer Science A-Level · หัวข้อ 4

ดูสไลด์ ฝึกฝน
บทเรียนวิดีโอสำหรับหัวข้อนี้ เปิดหน้าวิดีโอ
21:32

สถาปัตยกรรม Von Neumann

ตลอดประวัติศาสตร์ส่วนใหญ่ เครื่องจักรทำงานเพียงอย่างหนึ่ง กระดุมทอผ้า คำนวณบวก เพื่อทำให้มันทำอะไรใหม่ คุณต้องสร้างมันใหม่ จากนั้นก็มาถึงสิ่งที่ดูเรียบง่ายแต่ลวงตา…

การบรรยายภาษาอังกฤษ · คำบรรยายภาษาอังกฤษ + 中文 ลอยตัวบนภาพ

4.1

สถาปัตยกรรม Von Neumann

หลักสูตร
ผู้เข้าสอบควรสามารถ: หมายเหตุและคำแนะนำ
แสดงความเข้าใจในโมเดลพื้นฐานของ Von Neumann สำหรับระบบคอมพิวเตอร์และแนวคิด โปรแกรมที่เก็บไว้
แสดงความเข้าใจถึงวัตถุประสงค์และบทบาทของ รีจิสเตอร์ (registers) รวมถึงความแตกต่างระหว่าง รีจิสเตอร์ทั่วไป และ รีจิสเตอร์เฉพาะทาง รีจิสเตอร์เฉพาะทาง ได้แก่: • Program Counter (PC) • Memory Data Register (MDR) • Memory Address Register (MAR) • Accumulator (ACC) • Index Register (IX) • Current Instruction Register (CIR) • Status Register
แสดงความเข้าใจถึงวัตถุประสงค์และบทบาทของ Arithmetic and Logic Unit (ALU), Control Unit (CU) และ system clock, Immediate Access Store (IAS)
แสดงความเข้าใจ نحوه ILoggerข้อมูลระหว่างส่วนประกอบต่างๆ ของระบบคอมพิวเตอร์โดยใช้ address bus, data bus และ control bus
แสดงความเข้าใจว่าปัจจัยใดมีผลต่อประสิทธิภาพของระบบคอมพิวเตอร์ รวมถึง: • ประเภทและจำนวน cores ของโปรเซสเซอร์ • bus width • clock speed • cache memory
เข้าใจว่าพอร์ตต่างๆ ให้การเชื่อมต่ออุปกรณ์ต่อพ่วงอย่างไร รวมถึงการเชื่อมต่อกับ: • Universal Serial Bus (USB) • High Definition Multimedia Interface (HDMI) • Video Graphics Array (VGA)
อธิบายขั้นตอนของรอบ Fetch-Execute (F-E) อธิบายและใช้ notation 'register transfer' เพื่ออธิบายรอบ F-E
แสดงความเข้าใจถึงวัตถุประสงค์ของ Interrupts รวมถึง: • สาเหตุที่เป็นไปได้ของ Interrupts • การประยุกต์ใช้ Interrupts • การใช้ Interrupt Service Routine (ISR) • เวลาที่ Detect Interrupts ระหว่างรอบ fetch-execute • วิธีการจัดการ Interrupts

แหล่งที่มา: หลักสูตร Cambridge International

วัฏจักร fetching-decoding-executing

สถาปัตยกรรม Von Neumann· รองรับคอมพิวเตอร์ทั่วไปเกือบทุกเครื่อง:

  • หน่วยความจำเดียว — ** Immediate Access Store** (IAS) — เก็บทั้ง คำสั่งโปรแกรม และ ข้อมูล (แนวคิด program ที่จัดเก็บไว้).
  • โปรเซสเซอร์ (CPU) ดึงคำสั่งจากหน่วยความจำและรันทีละตัว.
  • คำสั่งรัน ตามลำดับ เว้นแต่ branch จะเปลี่ยนการไหล.

แนวคิด stored-program คือสิ่งที่ทำให้คอมพิวเตอร์มีความยืดหยุ่น: เปลี่ยนโปรแกรมก็เปลี่ยนสิ่งที่มันทำได้ โดยไม่ต้องเดินสายใหม่.

สำรวจ

แตะส่วนประกอบของคอมพิวเตอร์ Von Neumann

สำรวจแต่ละบล็อก CPU (หน่วยควบคุม, ALU, รีจิสเตอร์) สื่อสารกับหน่วยความจำหลักเพียงแห่งเดียวผ่านบัส — และหน่วยความจำร่วมกันนี้สำหรับคำสั่ง AND ข้อมูลคือแนวคิดของ Von Neumann

คำศัพท์ ฝึกฝน
English ไทย
Immediate Access Store/ɪˈmiːdɪət ˈækses stɔː/ หน่วยเก็บเข้าถึงทันที
stored program/stɔːd ˈprəʊɡræm/ โปรแกรมจัดเก็บ
RAM/ræm/ RAM
4.1

ส่วนประกอบหลักของ CPU

ส่วนทั้งหมดนี้อยู่ในชิปเล็กชิ้นเดียวกัน แผนภาพถัดไปในส่วนนี้จะแสดงการเชื่อมต่อ; ภาพถ่ายด้านล่างแสดงของจริง

ด้านใต้ของชิปซีพียู Intel บนพื้นหลังสีขาว, สี่เหลี่ยมแบนปกคลุมด้วยตารางของแผ่นสัมผัสสีทองขนาดเล็กนับร้อยที่กดลงบนซ็อกเก็ตบนเมนบอร์ด
CPU สมัยใหม่: โปรเซสเซอร์ทั้งหมดคือชิปเล็กชิ้นหนึ่ง (เห็นจากด้านล่าง แสดงจุดสัมผัส)
ซ็อกเก็ตซีพียูสี่เหลี่ยมบนเมนบอร์ด, มีตารางหมุดเล็กๆ จำนวนมากและคันโยกล็อคโลหะ, ล้อมรอบด้วยเส้นวงจรไฟฟ้า
ซ็อกเก็ต CPU ที่ตรงกับบนเมนบอร์ด: จุดสัมผัสของชิกดันลงบนหมุดเหล่านี้

หน่วยคำนวณและตรรกะ (ALU)

ALU ทำ arithmetic (บวก, ลบ, …) และ logic (AND, OR, เปรียบเทียบ) รับ operands จาก registers และใส่ผลลัพธ์กลับเข้าไปใน register.

Control Unit (CU)

control unit decode แต่ละคำสั่งและส่ง control signals เพื่อดำเนินการ — เปิด data paths, บอก ALU ว่าต้องทำอะไร, และควบคุมการอ่าน/เขียนหน่วยความจำ.

ระบบนาฬิกา

นาฬิกาส่ง脈 steady ของ pulses ที่ทำให้ CPU ทำงานประสานกัน คำสั่งแต่ละตัวใช้เวลา cycles จำนวนคงที่ และ clock speed (เช่น 3.8 GHz) เป็นปัจจัยหนึ่งในประสิทธิภาพ.

"อธิบายวิธี CU และระบบนาฬิกาทำงานร่วมกัน": นาฬิกาปล่อย pulses ที่ความถี่คงที่; control unit ใช้แต่ละ pulse để推进 fetch-execute cycle ไปข้างหน้าหนึ่งขั้นตอน, ส่ง control signals ตามจังหวะกับ pulses, ทำให้ทุกส่วนของโปรเซสเซอร์เปลี่ยนสถานะพร้อมกัน นาฬิกาที่เร็วขึ้นหมายถึงขั้นตอนมากขึ้นต่อวินาที จนถึงจุดที่วงจรไม่สามารถ settle ระหว่าง pulses ได้

Registers

Registers เป็นที่เก็บขนาดเล็กมากและเร็วภายใน CPU special purpose registers แต่ละตัวมีหน้าที่ตายตัวในวัฏจักร:

  • Program Counter (PC) — ที่อยู่ของ คำสั่งถัดไป.
  • Memory Address Register (MAR) — ที่อยู่ที่กำลังอ่านหรือเขียน.
  • Memory Data Register (MDR) — ข้อมูลที่กำลังส่งเข้าหรือออกจากหน่วยความจำ.
  • Current Instruction Register (CIR) — คำสั่งที่กำลัง decode.
  • Accumulator (ACC) — ค่าที่ ALU กำลังประมวลผล.
  • สตาตัสเรจิสเตอร์ — เก็บ เฟล็ก (carry, zero, negative, overflow) ที่ใช้สำหรับการเบี่ยงเบนเส้นทาง Each flag เป็น 1 บิต ตั้งค่าหรือลบโดย ALU หลังการดำเนินการ: เฟล็ก zero หลังการเปรียบเทียบที่ตรงกัน, เฟล็ก carry เมื่อผลบวกเกินความจุของเรจิสเตอร์, เฟล็ก negative เมื่อผลลัพธ์เป็นลบ การกระโดดตามเงื่อนไขอ่านค่าเฟล็กเพื่อตัดสินใจว่าจะเบี่ยงเบนหรือไม่, และเฟล็ก overflow สามารถส่งสัญญาณขัดจังหวะได้
  • Index Register — offset บวกเข้ากับที่อยู่ในการ addressing แบบ index; การ increment ทำให้วนผ่าน array ตัวละหนึ่ง.

คำถาม "เติมตารางที่อธิบายบทบาทของแต่ละ register" ต้องการประโยคที่แม่นยำหนึ่งประโยคต่อregister ใน Terms เหล่านี้: PC เก็บที่อยู่ของคำสั่งถัดไปที่จะดึง; MAR เก็บที่อยู่ของตำแหน่งที่กำลังอ่านหรือเขียน; MDR เก็บข้อมูลหรือคำสั่งที่เพิ่งอ่านจากหรือกำลังจะเขียนไปยังตำแหน่งนั้น; CIR เก็บคำสั่งที่กำลัง decode และ run อยู่; ACC เก็บผลลัพธ์ของการดำเนินการ arithmetic หรือ logic ครั้งล่าสุด.

รีจิสเตอร์อเนกประสงค์ ใช้โดยโปรแกรมเมอร์สำหรับค่าชั่วคราวระหว่างการคำนวณ การถ่ายโอนข้อมูลระหว่างรีจิสเตอร์และหน่วยความจำเขียนในรูปสัญลักษณ์ register transfer — เช่น MAR ← [PC] ("คัดลอกเนื้อหาของ PC ลงใน MAR").

แผนภาพบล็อกของ CPU Von Neumann แสดง PC, MAR, MDR, CIR, ACC, รีจิสเตอร์สถานะ, หน่วยควบคุม, ALU และนาฬิการะบบ เชื่อมต่อกับหน่วยความจำหลักและอินพุต/เอาต์พุตผ่านบัสที่อยู่ ข้อมูล และควบคุม
CPUVon Neumann: รีจิสเตอร์, หน่วยควบคุม และ ALU เชื่อมต่อกันด้วยบัส
คำศัพท์ ฝึกฝน
English ไทย
Von Neumann architecture/vɒn ˈnɔɪmən ˈɑːkɪtektʃə/ สถาปัตยกรรม Von Neumann
ALU/ˌeɪ el ˈjuː/ ALU
operand/ˈɒpərænd/ operand
register/ˈredʒɪstə/ รีจิสเตอร์ (register)
control unit/kənˈtrəʊl ˈjuːnɪt/ หน่วยควบคุม
clock speed/klɒk spiːd/ ความเร็ว clock
fetch-execute cycle/fetʃ ˈeksɪkjuːt ˈsaɪkl/ fetch-execute cycle
special purpose registers/ˈspeʃl ˈpɜːpəs ˈredʒɪstəz/ รีจิสเตอร์เฉพาะ
Program Counter/ˈprəʊɡræm ˈkaʊntə/ Program Counter
Memory Address Register/ˈmeməri əˈdres ˈredʒɪstə/ Memory Address Register
Memory Data Register/ˈmeməri ˈdeɪtə ˈredʒɪstə/ Memory Data Register
Current Instruction Register/ˈkʌrənt ɪnˈstrʌkʃn ˈredʒɪstə/ Current Instruction Register
accumulator/əˈkjuːmjʊleɪtə/ _accumulator
Status Register/ˈsteɪtəs ˈredʒɪstə/ Status Register
Index Register/ˈɪndeks ˈredʒɪstə/ Index Register
register transfer/ˈredʒɪstə ˈtrænsfɜː/ register transfer
control bus/kənˈtrəʊl bʌs/ control bus
4.1

บัส

บัสภายในสามชนิด (ชุดสายขนาน) เชื่อมต่อส่วนต่างๆ เข้าด้วยกัน:

  • บัสที่อยู่ — ส่งที่อยู่หน่วยความจำ เป็นทางเดียว (CPU → หน่วยความจำ).
  • บัสข้อมูล — ส่งข้อมูล เป็นสองทาง.
  • บัสควบคุม — ส่งสัญญาณควบคุม (อ่าน, เขียน, Interrupt) เป็นสองทาง.

บัสที่อยู่ขนาด $n$ บิต สามารถเข้าถึงตำแหน่งหน่วยความจำได้ $2^{n}$ ตำแหน่ง ความกว้างของบัสข้อมูลกำหนดจำนวนบิตที่ถ่ายโอนต่อการเข้าถึงหนึ่งครั้ง (มักเท่ากับขนาดคำ)

CPU, หน่วยความจำ และอินพุต/เอาต์พุต แต่ละส่วนเชื่อมต่อกับบัสที่อยู่ (ทางเดียว), บัสข้อมูล และบัสควบคุม ภายในระบบบัส
ระบบบัสสามชนิดเชื่อมต่อ CPU, หน่วยความจำ และอินพุต/เอาต์พุตเข้าด้วยกัน
เมนบอร์ดมองจากด้านบน: ซ็อกเก็ต CPU, ช่องใส่หน่วยความจำ และช่องขยาย เชื่อมต่อกันด้วยเส้นทางพิมพ์ที่หนาแน่น
เมนบอร์ด: CPU, หน่วยความจำ และ I/O ทั้งหมดอยู่บนชุดบัสเดียวกัน — คือเส้นทางการพิมพ์ที่วิ่งระหว่างองค์ประกอบเหล่านั้น
คำศัพท์ ฝึกฝน
English ไทย
interrupt/ˈɪntərʌpt/ interrupt
buses/ˈbʌsɪz/ บัส
address bus/əˈdres bʌs/ address bus
4.1

ปัจจัยที่มีผลต่อประสิทธิภาพการทำงาน

  • ความเร็วรอบ (clock speed) — จำนวนรอบต่อวินาทีมากขึ้น
  • จำนวนคอร์ — CPU แบบมัลติคอร์สามารถรันหลายเธรดพร้อมกันได้
  • ขนาดคำ (word size) — CPU 64-บิต จัดการข้อมูลเป็นก้อนขนาด 64 บิตต่อรอบ และเข้าถึงหน่วยความจำได้มากกว่า CPU 32-บิตอย่างมาก
  • ปริมาณ RAM — RAM มากขึ้นเก็บชุดงาน working set ได้มากขึ้น; หากน้อยเกินไปจะทำให้ OS ต้องทำ page ไปยังดิสก์
  • ขนาดหน่วยความจำแคช — แคชมากลดเวลาเข้าถึงหน่วยความจำเฉลี่ยลง
  • ประเภทการจัดเก็บข้อมูลรอง — SSD โหลดโปรแกรมได้เร็วกว่า HDD มาก
  • ความกว้างและความเร็วของบัส — บัสที่กว้างหรือเร็วขึ้นช่วยส่งข้อมูลได้รวดเร็วขึ้น

จับคู่สเปกกับภาระงาน: Quad-core ดีกว่า Dual-core ในงานแบบขนาน แต่ความเร็วต่อคอร์ที่สูงกว่าชนะในงาน single-threaded

แต่ละปัจจัยเป็นคำตอบคะแนน 2 คะแนน พร้อมเหตุผลประกอบ:

  • คอร์มากขึ้น: แต่ละคอร์สามารถดึงและดำเนินการคำสั่งของตัวเองได้พร้อมกัน ทำให้หลายโปรแกรม หรือเธรดของโปรแกรมหนึ่ง ทำงานแบบขนานได้ แต่ต้องเขียนโปรแกรมให้รองรับการใช้หลายคอร์ ดังนั้นการเพิ่มคอร์เป็นสองเท่าไม่ทำให้ความเร็วเพิ่มขึ้นสองเท่าเสมอไป
  • ความเร็วรอบสูงขึ้น: มีรอบ fetch-execute ต่อวินาทีมากขึ้น จึงประมวลผลคำสั่งได้มากขึ้นต่อวินาที; ข้อจำกัดคือความร้อนที่เกิดขึ้น
  • บัสกว้างขึ้น: บัสข้อมูลที่กว้างขึ้นส่งข้อมูลได้มากกว่าต่อ一次การถ่ายโอน จึงใช้จำนวนการถ่ายโอนน้อยกว่าเพื่อส่งข้อมูลเท่าเดิม; บัสที่อยู่ที่กว้างขึ้นเข้าถึงตำแหน่งหน่วยความจำได้มากขึ้น
  • หน่วยความจำแคช: เป็นหน่วยความจำขนาดเล็กแต่เร็ว ที่อยู่ในหรือ毗邻 processor เก็บคำสั่งและข้อมูลที่ใช้งานล่าสุดหรือบ่อยที่สุด การอ่านจากแคชเร็วกว่า RAM มาก ทำให้โปรเซสเซอร์ใช้เวลารอให้น้อยลง

"อธิบายว่าทำไมคอมพิวเตอร์รุ่นใหม่จึงทำงานได้ดีขึ้น" ตอบด้วยการเปรียบเทียบสเปกทั้งสองแบบบรรทัดต่อบรรทัด: ความเร็วรอบสูงกว่าประมวลผลคำสั่งได้มากขึ้นต่อวินาที, คอร์越多รันงานได้พร้อมกันมากขึ้น, แคชมากขึ้นหมายถึงการเข้าถึง RAM ช้าลงน้อยลง, และ RAM มากขึ้นหมายถึงการถ่ายโอนไปยังดิสก์น้อยลง

คำศัพท์ ฝึกฝน
English ไทย
processor/ˈprəʊsesə/ หน่วยประมวลผล
arithmetic and logic unit/ˌærɪθˈmetɪk ənd ˈlɒdʒɪk ˈjuːnɪt/ หน่วยคำนวณและตรรกะ
word size/wɜːd saɪz/ ขนาดคำ
number of cores/ˈnʌmbə ɒv kɔːz/ จำนวน cores
cores/kɔːz/ คอร์
amount of RAM/əˈmaʊnt ɒv ræm/ ปริมาณ RAM
page/peɪdʒ/ หน้า
cache memory/kæʃ ˈmeməri/ แคชเมมโมรี่
cache/kæʃ/ cache
secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ การจัดเก็บรอง
port/pɔːt/ พอร์ต
peripheral/pəˈrɪfərəl/ อุปกรณ์ต่อพ่วง
4.1

พอร์ต

พอร์ต คือซ็อกเก็ตทางกายภาพสำหรับการเชื่อมต่อ อุปกรณ์ต่อพ่วง:

  • USB (Universal Serial Bus) — อเนกประสงค์ (คีย์บอร์ด, ไดร์ฟ, โทรศัพท์)
  • HDMI (High Definition Multimedia Interface) — วิดีโอและเสียงดิจิทัลไปยังหน้าจอ
  • VGA (Video Graphics Array) — สัญญาณวิดีโอแอนะล็อกเก่าไปยังจอภาพ
  • Ethernet (RJ-45) — LAN แบบมีสาย. จacks เสียง — หูฟัง/ไมโครโฟน

พอร์ตต่างชนิดใช้สัญญาณต่างกัน ดังนั้นสาย HDMI จะเสียบไม่ได้กับซ็อกเก็ต USB USB-C มีความพิเศษในการรองรับวิดีโอ ข้อมูล และพลังงานในสายเดียว

"อธิบายว่าคอมพิวเตอร์เชื่อมต่อกับจอภาพผ่าน HDMIได้อย่างไร": พอร์ต HDMI ส่งวิดีโอและเสียงเป็นสัญญาณดิจิทัลรวมกันผ่านสายเดียว ไม่ต้องแปลงเป็นแอนะล็อก ภาพจึงไม่เสื่อมคุณภาพ สายรองรับความละเอียดสูง และพอร์ตบนจอภาพจะถอดรหัสสัญญาณเอง อุปกรณ์ USB เป็นแบบ plug-and-play: เมื่อเสียบเข้าแล้ว คอมพิวเตอร์จะตรวจจับ ระบุชื่อ โหลดไดรเวอร์ที่ต้องการ และอาจจ่ายไฟให้โดยอัตโนมัติโดยไม่ต้องรีสตาร์ท

4.1

รอบ fetch-execute

CPU ทำซ้ำ รอบ fetch-execute — รันหนึ่งครั้งต่อคำสั่งเครื่องหนึ่ง

Fetch

  1. ที่อยู่ของ PC ถูกคัดลอกไปยัง MAR
  2. PC ถูก increment เพื่อชี้ไปที่คำสั่งถัดไป
  3. สัญญาณ read ส่งผ่านบัสควบคุม
  4. หน่วยความจำวางคำสั่งลงบนบัสข้อมูล
  5. คัดลอกเข้าไปใน MDR จากนั้นเข้าสู่ CIR

ข้อสอบถามขั้นตอนเหล่านี้ในรูปแบบ register transfer notation โดยที่ [X] หมายถึงเนื้อหาของรีจิสเตอร์ X และ [[MAR]] หมายถึงเนื้อหาของตำแหน่งหน่วยความจำwhose address อยู่ใน MAR:

MAR ← [PC]          the address of the next instruction goes to the MAR
PC  ← [PC] + 1      the PC now points to the following instruction
MDR ← [[MAR]]       the instruction at that address is read into the MDR
CIR ← [MDR]         the instruction is copied into the CIR for decoding

ลำดับมีความสำคัญ: PC จะถูก increment ทันทีหลังจากที่อยู่ของมันถูกคัดลอก เพื่อให้การ jump ที่เกิดขึ้นในภายหลังสามารถแทนที่ค่า PC นั้นได้ ระหว่างการ execute สัญลักษณ์เดียวกันนี้จะใช้อธิบายแต่ละคำสั่ง; สำหรับ LDD 200 ตัวอย่างเช่น MAR ← 200, MDR ← [[MAR]], ACC ← [MDR]

การถ่ายโอนรีจิสเตอร์ในรอบ fetch ตามลำดับ: 1 ที่อยู่ของ PC ไปยัง MAR; 2 MAR ส่งที่อยู่ไปยังหน่วยความจำ; 3 คำสั่งกลับมายัง MDR; 4 MDR คัดลอกไปยัง CIR; ขณะเดียวกันนั้น PC ถูก increment
การถ่ายโอนรีจิสเตอร์ในรอบ fetch: PC → MAR → หน่วยความจำ → MDR → CIR โดยมีการ increment PC

Decode

CU ตีความคำสั่งใน CIR — ว่าเป็นการดำเนินการใด และใช้ operand หรือที่อยู่ข้อมูลใด

การดำเนินการ (Execute)

CU ดำเนินการตามนั้น: การคำนวณทางคณิตศาสตร์/ตรรกะจะถูกส่งไปยัง ALU (ผลลัพธ์ไป ACC); การโหลด/จัดเก็บจะย้ายข้อมูลระหว่างหน่วยความจำและรีจิสเตอร์; การกระโดดจะเปลี่ยนค่า PC จากนั้นรอบการทำงานจะวนซ้ำอีกครั้ง

แผนภาพวงจร fetching-execution จาก START: ขั้นตอน fetch (PC ไป MAR, เพิ่มค่า PC, สัญญาณอ่าน, หน่วยความจำไปยัง data bus ไป MDR ไป CIR), ขั้นตอน decode, ขั้นตอน execute, จากนั้นตรวจสอบ interrupt แล้ววนกลับไปที่ START
วงจร fetching-execute พร้อมการตรวจสอบ interrupt ทุกครั้ง
สำรวจ

รอบ fetch-execute

แตะวนรอบที่ CPU ทำซ้ำหลายพันล้านครั้งต่อวินาที ดูว่า fetch ใช้รีจิสเตอร์ PC/MAR/MDR/CIR อย่างไร แล้ว decode และ execute ทำงานกับสิ่งที่ถูกดึงมา

สำรวจ

取指-执行周期

逐步演示CPU如何运行一条指令——从内存中 fetch,decode,然后 execute,周而复始。

คำศัพท์ ฝึกฝน
English ไทย
data bus/ˈdeɪtə bʌs/ data bus
register transfer notation/ˈredʒɪstə ˈtrænsfɜː nəʊˈteɪʃn/ Programming Transfer Notation
interrupt service routine/ˈɪntərʌpt ˈsɜːvɪs ruːˈtiːn/ Interrupt Service Routine
4.1

Interrupts

Interrupt คือสัญญาณที่ หยุด วงจรปกติชั่วคราว เพื่อให้ CPU สามารถจัดการกับเหตุการณ์เร่งด่วนได้ (เช่น การกดคีย์,数据包 arrives, ความผิดปกติของฮาร์ดแวร์, การหารด้วยศูนย์, ตัวจับเวลาของ OS)

การจัดการหนึ่งครั้ง:

  1. เสร็จสิ้นคำสั่งปัจจุบันให้เรียบร้อย
  2. บันทึกสถานะ (PC และรีจิสเตอร์)
  3. โหลดที่อยู่ของ โปรแกรมบริการ interrupt (ISR) ลงใน PC และรันมัน
  4. ISR จัดการเหตุการณ์นั้น
  5. คืนค่า สถานะที่บันทึกไว้แล้วดำเนินต่อ

Interrupt ทำให้ระบบตอบสนองได้อย่างรวดเร็วโดยไม่ต้องให้ CPU ตรวจสอบอุปกรณ์ตลอดเวลา และเป็นกลไกที่ OS ใช้สำหรับ multitasking

"อธิบายว่า interrupt จากอุปกรณ์อินพุตถูกตรวจจับและจัดการอย่างไรในวงจร F-E" เป็นคำตอบแบบ 4 คะแนน โดยมีจุดสำคัญดังนี้: อุปกรณ์ส่งสัญญาณ interrupt ที่ทำให้ interrupt flag ใน interrupt register ถูกตั้งขึ้น; โปรเซสเซอร์ตรวจสอบรีจิสเตอร์นี้ที่ ปลายของแต่ละ fetch-execute cycle, หลังจากคำสั่งปัจจุบัน被执行เสร็จ; หากมี flag ถูกตั้งขึ้น且有 interrupt มี priority สูงกว่างานปัจจุบัน, เนื้อหาของ PC และรีจิสเตอร์อื่นๆ จะถูกบันทึกลงบน stack; ที่อยู่ของโปรแกรมบริการ interrupt จะถูกโหลดลงใน PC และโปรแกรมจะทำงาน; เมื่อเสร็จสิ้น ค่าที่บันทึกไว้จะถูกกู้คืนจาก stack และโปรแกรมที่ถูก interrupt จะดำเนินต่อจากจุดที่หยุดอยู่

สาเหตุ worthy of naming: hardware interrupt จากอุปกรณ์ (เช่น กดคีย์, buffer ของ printer ว่าง,数据包 arrives), software interrupt จากความผิดพลาด (เช่น การหารด้วยศูนย์, คำสั่งที่ไม่ถูกต้อง, Arithmetic overflow), timer interrupt จาก OS ที่บ่งชี้ถึงสิ้นสุดของ time slice, และการเตือนเมื่อไฟดับ

แผนภาพขั้นตอนการจัดการสัญญาณขัดจังหวะ: โปรแกรมที่กำลังทำงานถูกขัดจังหวะ, ซีพียูเสร็จสิ้นคำสั่งปัจจุบัน, บันทึกสถานะ (PC และเรจิสเตอร์) ลงบนสตैก, ทำงานฟังก์ชันบริการสัญญาณขัดจังหวะ, ฟื้นฟูสถานะและดำเนินต่อ
วิธีการที่ interrupt เข้ามาเกี่ยวข้องกับวงจร fetching-execute
คำศัพท์ ฝึกฝน
English ไทย
interrupt register/ˈɪntərʌpt ˈredʒɪstə/ Interrupt Register
stack/stæk/ stack
4.2

Assembly language and machine code

หลักสูตร
ผู้เข้าสอบควรสามารถ: หมายเหตุและคำแนะนำ
แสดงความเข้าใจถึงความสัมพันธ์ระหว่าง ภาษาแอสsemblี และ machine code
อธิบายขั้นตอนต่างๆ ของกระบวนการประกอบโปรแกรมสำหรับ ตัวประกอบแบบสองผ่าน (two-pass assembler) นำใช้กระบวนการของ ตัวประกอบแบบสองผ่าน กับโปรแกรมภาษาแอสsemblyที่กำหนดให้
ติดตามการทำงานของโปรแกรมภาษาแอสsemblyที่ง่ายและกำหนดให้
แสดงความเข้าใจว่าชุดคำสั่งถูกจัดกลุ่มเข้าด้วยกัน รวมถึงกลุ่มต่อไปนี้: • การเคลื่อนย้ายข้อมูล • การรับและการส่งข้อมูล • การดำเนินการทางคณิตศาสตร์ • คำสั่งแบบไม่มีเงื่อนไขและคำสั่งที่มีเงื่อนไข • คำสั่งเปรียบเทียบ
แสดงความเข้าใจและสามารถใช้ โหมดการเข้าถึงหน่วยความจำ (modes of addressing) ที่แตกต่างกันได้ รวมถึง แบบทันที (immediate), แบบตรง (direct), แบบอ้อม (indirect), แบบดักจิก (indexed), แบบสัมพัทธ์ (relative)

แหล่งที่มา: หลักสูตร Cambridge International

CPU ทำงานจริงด้วย machine code — รูปแบบบิตที่เป็นเฉพาะสำหรับ architecture หนึ่ง Assembly language เป็นรูปแบบที่อ่านเข้าใจได้ ซึ่งมีการใช้ 1 คำสั่งต่อ 1 คำสั่งใน machine code เขียนโดยใช้ mnemonics เช่น LDD, ADD, JMP. Assembler ทำหน้าที่แปลมันเป็น machine code

Assembler แปล mnemonics ของแอสsemblีให้เป็นรูปแบบบิตของ machine code
Assembler แปล mnemonics ให้เป็นรูปแบบบิตของ machine code

Two-pass assembler

Two-pass assembler อ่าน source code สองครั้ง:

  • pass 1 สร้าง symbol table: ทุกครั้งที่ปรากฏ label (เช่น LOOP:), บันทึกที่อยู่ของมัน; ยังไม่มีการสร้างโค้ด
  • pass 2 สร้างโค้ด: แปลแต่ละคำสั่ง, และเมื่อคำสั่งใดอ้างอิงถึง label (เช่น JMP LOOP), ดูหาที่อยู่ของมันใน symbol table

สองรอบช่วยจัดการกับ forward references (การ jump ไปยัง label ที่นิยามไว้ทีหลัง)

ตัวอย่างวิธีทำ. นำกระบวนการสองรอบไปใช้กับโปรแกรมนี้ โดยคำสั่งแรกถูกเก็บอยู่ที่ที่อยู่ 100

        LDD  COUNT
LOOP:   DEC  ACC
        CMP  #0
        JPN  LOOP
        END
COUNT:  5

Pass 1 อ่านแต่ละบรรทัด นับจำนวนที่อยู่ที่จะใช้ และบันทึก label ทั้งหมดลงใน symbol table: LOOP = 101 (บรรทัด DEC) และ COUNT = 105 (บรรทัดข้อมูล). ไม่มีการสร้างโค้ด Pass 2 อ่านโปรแกรมอีกครั้งและแปลแต่ละบรรทัดเป็น machine code โดยแทนที่แต่ละ mnemonic ด้วย opcode และแทนที่ symbolic address ด้วยตัวเลขจาก symbol table: LDD COUNT กลายเป็น opcode สำหรับ LDD ที่มี operand เป็น 105, และ JPN LOOP กลายเป็น opcode สำหรับ JPN ที่มี operand เป็น 101. การ jump กลับไปที่ LOOP อาจแก้ได้ในรอบเดียว แต่การ jump ไปข้างหน้า ไปยัง label ที่ยังไม่เคยเห็นมาก่อนไม่สามารถทำได้ นี่คือเหตุผลที่ assembler ต้องใช้สองรอบ

ตัวอย่างชุดคำสั่ง

Cambridge ใช้เซตทั่วไปขนาดเล็กพิมพ์ในตารางอ้างอิงของข้อสอบ, ซึ่งประกอบด้วยเรจิสเตอร์ใช้งานทั่วไปหนึ่งตัวคือแอคคัมมิเลเตอร์ (ACC), และเรจิสเตอร์อินเด็กซ์ (IX). ตัว operand ที่เขียน #n คือจำนวนฐานสิบ, Bn เป็นจำนวนฐานสอง และ &n เป็นจำนวนฐานสิบหก; <address> คือหมายเลขตำแหน่งหรือฉลาก

กลุ่ม คำสั่ง สิ่งที่ทำ
การเคลื่อนย้ายข้อมูล LDM #n โหลดเลข n ลงใน ACC (immediate)
LDD <address> โหลดเนื้อหาจากที่อยู่ ลงใน ACC (direct)
LDI <address> ที่อยู่ถือที่อยู่อื่น; โหลดเนื้อหาจากที่นั่นลงใน ACC (indirect)
LDX <address> เพิ่ม IX กับที่อยู่แล้วโหลดเนื้อหาจากผลลัพธ์ลงใน ACC (indexed)
LDR #n โหลดเลข n ลงใน IX
MOV <register> คัดลอก ACC ลงในรีจิสเตอร์ที่ระบุชื่อ (IX)
STO <address> เก็บเนื้อหาของ ACC ไว้ที่ที่อยู่
อินพุตและเอาต์พุต IN อ่านการกดคีย์และใส่ ASCII code ลงใน ACC
OUT แสดงออก character ซึ่งมี ASCII code อยู่ใน ACC
การคำนวณ ADD <address> / ADD #n เพิ่มเนื้อหาจากที่อยู่, หรือเลข, ลงใน ACC
SUB <address> / SUB #n ลบออกจาก ACC
INC <register> / DEC <register> เพิ่ม 1 หรือลบ 1 ออกจาก ACC หรือ IX
เปรียบเทียบ CMP <address> / CMP #n เปรียบเทียบ ACC กับเนื้อหาจากที่อยู่, หรือกับ n, และตั้งค่า flag
CMI <address> เปรียบเทียบ ACC กับเนื้อหาจากที่อยู่ที่地址位于 (indirect)
กระโดด JMP <address> กระโดดไปยังที่อยู่โดยไม่เงื่อนไข
JPE <address> / JPN <address> กระโดดหากการเปรียบเทียบล่าสุดเป็นสมการ/ไม่สมการ
การจัดการบิต AND, OR, XOR กับ #n, Bn, &n หรือ <address> การดำเนินการระดับบิตบน ACC
LSL #n / LSR #n เลื่อน ACC แบบลอจิก n ตำแหน่งไปทางซ้ายหรือขวา
END สิ้นสุดโปรแกรม

คำถาม "คำสั่งภาษาอัสsembly ถูกจัดกลุ่ม" ต้องการชื่อกลุ่ม และคำสั่งจากแต่ละกลุ่ม: การเคลื่อนย้ายข้อมูล, อินพุตและเอาต์พุต, คณิตศาสตร์, การกระโดดแบบไม่มีเงื่อนไขและแบบมีเงื่อนไข, การเปรียบเทียบ และการจัดการบิต.

สำรวจ

วิธีการทำงานของแอสsembl์แบบสองรอบ

ลองเดินตามกระบวนการดู แอสsembl์จะอ่านโค้ดของคุณสองครั้ง: รอบ 1 จะหาตำแหน่งของแต่ละฉลาก (label) เพื่อให้อรอบ 2 สามารถกรอกที่อยู่ได้ — นั่นคือเหตุผลว่าทำไมการกระโดดไปยังฉลากที่นิยาม ภายหลัง จึงยังทำงานได้

คำศัพท์ ฝึกฝน
English ไทย
assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ Assembly Language
machine code/məˈʃiːn kəʊd/ เครื่องมิกซ์โค้ด (machine code)
mnemonics/nɪˈmɒnɪks/ คำย่อโปรแกรม
assembler/əˈsemblə/ assembler
symbol table/ˈsɪmbl ˈteɪbl/ symbol table
label/ˈleɪbl/ ฉลาก
forward references/ˈfɔːwəd ˈrefrənsɪz/ forward references
opcode/ˈɒpkəʊd/ opcode
4.2

โหมดการเข้าถึง (Addressing modes)

โหมดการเข้าถึง (หรือ modes of addressing) บอกวิธีการที่ CPU หา operands:

  • การเข้าถึงแบบทันที (immediate addressing) — operand คือค่าที่มีอยู่ในคำสั่ง. LDM #10 โหลด 10.
  • การเข้าถึงโดยตรง (direct addressing) — คำสั่งมีที่อยู่; operand คือค่าที่นั่น. LDD 200.
  • การเข้าถึงแบบอ้อม (indirect addressing) — คำสั่งมีที่อยู่ซึ่งมี ที่อยู่อื่น เป็นข้อมูล. LDI 200.
  • การเข้าถึงแบบดรรชนี (indexed addressing) — ที่อยู่ที่มีผลคือ address + index register; ใช้สำหรับอาร์เรย์. LDX 100 พร้อม IR = 5 อ่านที่อยู่ 105.

(การเข้าถึงแบบสัมพัทธ์ (Relative addressing) ให้ที่อยู่เป็น offset จาก PC — ใช้สำหรับการกระโดด.)

สี่โหมดการเข้าถึงที่เข้าถึง operand ของตน. แบบทันที: LDM #10 ให้ 10 โดยตรง. แบบโดยตรง: LDD 200 อ่านตำแหน่งหน่วยความจำ 200 (=42). แบบอ้อม: LDI 200 อ่านตำแหน่ง 200 (=250) จากนั้นอ่านตำแหน่ง 250 (=99). แบบดรรชนี: LDX 100 พร้อม registers ดัชนี 5 อ่านตำแหน่ง 105 (=7)
วิธีที่แต่ละโหมดการเข้าถึงเข้าถึง operand — แบบทันที, แบบโดยตรง, แบบอ้อม และแบบดรรชนี

ตัวอย่างวิธีทำ. เมมโมรี่มี: ตำแหน่ง 200 = 250, ตำแหน่ง 250 = 99, ตำแหน่ง 105 = 7. เรจิสเตอร์อิน덱ซ์มี 5. ค่าอะไรอยู่ในแอคคัมมิเลเตอร์หลังจาก LDM #200, LDD 200, LDI 200 และ LDX 100? ตรวจสอบว่าแต่ละโหมดต้องมองหาไกลแค่ไหน. LDM #200 คือ immediate - ตัว operand คือตัวเลขที่เขียนไว้ในคำสั่ง ดังนั้นแอคคัมมิเลเตอร์จะเก็บ 200. LDD 200 คือ direct - ไปยังตำแหน่ง 200 และดึงสิ่งที่อยู่ตรงนั้น: 250. LDI 200 คือ indirect - ตำแหน่ง 200 มี 250, ซึ่งเป็น ที่อยู่อื่น, ดังนั้นให้ไปต่อยังตำแหน่ง 250: 99. LDX 100 คือ indexed - เพิ่มค่าเรจิสเตอร์อิน덩์เข้ากับความอยู่, $100 + 5 = 105$, และอ่านตำแหน่ง 105: 7. นับจำนวนครั้งที่ต้องเข้าถึงเพื่อแยกแยะ: immediate 0, direct 1, indirect 2, indexed 1 (เมื่อเพิ่มค่า ин덩์แล้ว)

คำศัพท์ ฝึกฝน
English ไทย
indexed addressing/ˈɪndekst əˈdresɪŋ/ indexed addressing
general-purpose registers/ˈdʒenərəl ˈpɜːpəs ˈredʒɪstəz/ รีจิสเตอร์อเนกประสงค์
addressing mode/əˈdresɪŋ məʊd/ addressing mode
immediate addressing/ɪˈmiːdɪət əˈdresɪŋ/ immediate addressing
direct addressing/daɪˈrekt əˈdresɪŋ/ direct addressing
indirect addressing/ɪndaɪˈrekt əˈdresɪŋ/ indirect addressing
relative addressing/ˈrelətɪv əˈdresɪŋ/ relative addressing
4.2

การติดตามโปรแกรมอัสsembly

เพื่อให้ ติดตาม มัน: สร้างตารางที่มีคอลัมน์สำหรับ PC, ACC, register ดัชนี, ตัวแปรแต่ละตัว และ任何其他标志 (flags). ก้าวผ่านคำสั่ง, อัปเดตตารางหลังจากแต่ละคำสั่ง; ตามเส้นทางเมื่อมีการเปลี่ยน PC; หยุดที่ END. รูปแบบทั่วไปคือการวนลูปผ่านอาร์เรย์โดยใช้การเข้าถึงแบบดรรชนี.

ตัวอย่างที่แสดงวิธีทำ. ติดตามโปรแกรมนี้. ที่ที่อยู่ 200 มี 5 และที่ 201 มี 0.

100   LDD  200
101   CMP  #0
102   JPE  108
103   OUT
104   DEC  ACC
105   STO  200
106   LDD  201
107   JMP  100
108   END

เขียนหนึ่งแถวสำหรับแต่ละคำสั่งที่ถูกดำเนินการ, เติมเฉพาะคอลัมน์ที่เปลี่ยนแปลง:

คำสั่ง ACC 200 201 เอาต์พุต
เริ่มต้น 5 0
LDD 200 5
CMP #0
JPE 108 ไม่ถูกนำไปใช้
OUT ตัวอักษรที่มีรหัส 5
DEC ACC 4
STO 200 4
LDD 201 0
JMP 100
LDD 200 4

และ seterusnya จนกว่า LDD 200 จะโหลด 0, การเปรียบเทียบตั้งค่า equal flag, JPE 108 ถูกนำไปใช้ และโปรแกรมสิ้นสุด. สามสิ่งที่ผู้ตรวจสอบดู:一个 CMP ไม่เปลี่ยน register ใด ๆ เพียงแต่เปลี่ยน flag; การกระโดดที่ไม่ถูกนำไปใช้ยังคงนับว่าเป็นการดำเนินการ; และ OUT ออกมาตัวอักษร, ดังนั้นมันจึงอยู่ในคอลัมน์เอาต์พุต ไม่ใช่คอลัมน์ ACC. "ระบุผลกระทบของการเปลี่ยน LDD 10 เป็น LDM #10": ACC จะเก็บตัวเลข 10 แทนที่จะเก็บเนื้อหาของที่อยู่ 10.

คำศัพท์ ฝึกฝน
English ไทย
flags/flæɡz/ ธง
4.3

การเลื่อนแบบไบนารี

หลักสูตร
ผู้เข้าสอบควรสามารถ: หมายเหตุและคำแนะนำ
แสดงความเข้าใจและทำ การเลื่อนบิต (binary shifts) ได้ แบบตรรกะ, แบบเลขคณิต และ แบบหมุนวน เลื่อนซ้าย, เลื่อนขวา
แสดงความเข้าใจว่า การจัดการบิต สามารถนำไปใช้ในการตรวจสอบ/ควบคุมอุปกรณ์ได้อย่างไร ดำเนินการ การจัดการบิต ตรวจสอบและตั้งค่าบิต (โดยใช้ การ masks บิต)
ชื่อตำแหน่งคำสั่ง | Opcode | Operand คำอธิบาย
AND #n / Bn / &n การดำเนินการ AND แบบบิตต่อบิตของเนื้อหาใน ACC กับ operand
AND
การดำเนินการ AND แบบบิตต่อบิตของเนื้อหาใน ACC กับเนื้อหาใน
XOR #n / Bn / &n การดำเนินการ XOR แบบบิตต่อบิตของเนื้อหาใน ACC กับ operand
XOR
การดำเนินการ XOR แบบบิตต่อบิตของเนื้อหาใน ACC กับเนื้อหาใน
OR #n / Bn / &n การดำเนินการ OR แบบบิตต่อบิตของเนื้อหาใน ACC กับ operand
OR
การดำเนินการ OR แบบบิตต่อบิตของเนื้อหาใน ACC กับเนื้อหาใน
LSL #n บิตใน ACC会被เลื่อนไปทางซ้าย n ตำแหน่งตามหลักตรรกะ จะเพิ่มค่าศูนย์เข้าไปที่ด้านขวา
LSR #n บิตใน ACC会被เลื่อนไปทางขวา n ตำแหน่งตามหลักตรรกะ จะเพิ่มค่าศูนย์เข้าไปที่ด้านซ้าย
ทำเครื่องหมายชื่อตำแหน่งกับคำสั่ง
ให้ที่อยู่เชิงสัญลักษณ์
ข้อคำถามทั้งหมดจะสมมติว่ามีรีจิสเตอร์ใช้งานทั่วไปเพียงหนึ่งตัว (Accumulator) ACC หมายถึง Accumulator IX หมายถึง Index Register
อาจเป็นที่อยู่แบบabsoluteหรือเชิงสัญลักษณ์ # หมายถึงตัวเลขฐานสิบ เช่น #123 B หมายถึงตัวเลขฐานสอง เช่น B01001010 & หมายถึงตัวเลขฐานหก عشر เช่น &4A

แหล่งที่มา: หลักสูตร Cambridge International

การเลื่อนแบบลอจิก (logical shift) เคลื่อนย้ายบิตทั้งหมดไปทางซ้ายหรือขวาตามจำนวนตำแหน่ง, เติมตำแหน่งใหม่ด้วย 0.

  • เลื่อนไปทางซ้าย 1 ตำแหน่ง (LSL #1) — บิตเคลื่อนไปทางซ้าย, 0 เข้ามาทางขวา; สำหรับจำนวนที่ไม่เป็นลบนี่คือ × 2.
  • เลื่อนไปทางขวา 1 ตำแหน่ง (LSR #1) — บิตเคลื่อนไปทางขวา, 0 เข้ามาทางซ้าย; สำหรับจำนวนที่ไม่เป็นลบนี่คือ integer ÷ 2.

การเลื่อน $n$ ตำแหน่ง คูณหรือหารด้วย $2^{n}$. ตัวอย่าง: 00001011 (11) LSL #1 → 00010110 (22).

บิตที่เลื่อนออกจากปลายจะหายไป ดังนั้นการคูณจึงถูกต้องก็ต่อเมื่อบิตเหล่านั้นเป็นศูนย์. LSL #2 บนจำนวนเต็มสองส่วนเติม (two's-complement integer) 11001010 ให้ 00101000: บิต 1 ทั้งสองตัวที่ตกออกทางซ้ายหายไป, บิตเครื่องหมายเปลี่ยนไป, และผลลัพธ์不再是เดิม的四倍.

การเลื่อนทางขวาแบบเลขคณิต (arithmetic right shift) เก็บบิตเครื่องหมายไว้เพื่อให้จำนวนเต็มที่มีเครื่องหมายติดลบยังคงติดลบ. การเลื่อนแบบหมุน (cyclic shift/rotate) นำบิตที่หลุดออก的一端กลับเข้ามา另一端, ดังนั้นไม่มีบิตไหนหาย.

"แสดงผลลัพธ์ของการเลื่อนทางขวาแบบเลขคณิต 3 ตำแหน่งบน 10011110": คัดลอกบิตเครื่องหมายเข้าไปในตำแหน่งที่ถูกว่าง, 11110011. การเลื่อนเดียวกันบน 01011100 ให้ 00001011. การเลื่อนทางซ้ายแบบหมุน 1 บน 10000110 ให้ 00001101: 1 ตัวแรกปรากฏขึ้นทางขวาอีกครั้ง.

สามการเลื่อน 8-บิต: LSL #1 เปลี่ยน 00001011 เป็น 00010110 (คูณ 2, 0 เข้ามาทางขวา); LSR #1 เปลี่ยนเป็น 00000101 (หารด้วย 2, 0 เข้ามาทางซ้าย); ASR #1 เปลี่ยน 10110100 เป็น 11011010, คัดลอกบิตเครื่องหมาย
เลื่อนทางซ้ายแบบลอจิก ($\times 2$), เลื่อนทางขวาแบบลอจิก ($\div 2$) และเลื่อนทางขวาแบบเลขคณิต (เก็บบิตเครื่องหมาย)

ความแตกต่างของการเลื่อนขวาทั้งสองแบบคือ 1 บิต Take 11110000, ซึ่งเป็น 240 อ่านเป็น unsigned และ $-16$ อ่านเป็น signed. LSR #1 นำเข้า 0 และให้ 01111000 $= 120$, ซึ่งเป็นครึ่งที่ถูกต้องของ 240. ASR #1 คัดลอกบิตเครื่องหมายแทนและให้ 11111000 $= -8$, ซึ่งเป็นครึ่งที่ถูกต้องของ $-16$. ไม่มีอย่างใดผิด — แต่ละอย่าง减半ค่าภายใต้การอ่านหนึ่งแบบ

byte 11110000 เลื่อนไปทางขวาสองครั้ง: LSR นำ 0 เข้ามาทางซ้ายให้ 01111000 ซึ่งคือ 120, ในขณะที่ ASR คัดลอกบิตเครื่องหมายให้ 11111000 ซึ่งคือลบ 8; ผลลัพธ์ทั้งสองต่างกันเพียงบิตที่เข้า进来
การเลื่อนทางขวาแบบลอจิกและแบบเลขคณิตบน byte เดียวกัน: แตกต่างกันเพียงบิตที่เข้าทางซ้าย

การจัดการบิตสำหรับการตรวจสอบ/ควบคุม

อุปกรณ์ฝังตัวมักใช้ บิต ของเรจิสเตอร์หนึ่งบิตต่อสัญญาณ (เช่น บิต $n$ = LED $n$) การใช้ มาส์ก — การมาส์กบิต — คุณจะทำ:

  • ตั้งค่า บิต $n$: R = R OR มาส์กที่มีบิต $n$ ตั้งค่าไว้
  • ลบค่า บิต $n$: R = R AND มาส์กที่มีบิต $n$ ลบค่า และส่วนที่เหลือตั้งค่าไว้
  • สลับสถานะ บิต $n$: R = R XOR มาส์กที่มีบิต $n$ ตั้งค่าไว้
  • ทดสอบ บิต $n$: R AND มาส์ก แล้วตรวจสอบว่าผลลัพธ์มีค่านอนศูนย์หรือไม่
การมาส์กบิตบนไบต์ 01001000: ตั้งค่าบิต 2 ด้วย OR 00000100 ได้ 01001100; ลบค่าบิต 6 ด้วย AND 10111111 ได้ 00001000; สลับสถานะบิต 3 ด้วย XOR 00001000 ได้ 01000000
ตั้งค่าบิตด้วย OR, ลบค่าด้วย AND, สลับสถานะด้วย XOR — โดยแต่ละอย่างใช้มาส์ก

การจัดการบิตมีความเร็วสูง ใช้หน่วยความจำน้อย และทำให้ไบต์หนึ่งสามารถเก็บสถานะเปิด/ปิดได้ถึง 8 สถานะ

ในชุดคำสั่งของการสอบ นี่คือ AND, OR และ XOR พร้อมมาส์กที่เขียนเป็นเลขฐานสิบ, เลขฐานสองหรือเลขฐานหก عشر operands. เมื่อ ACC เก็บ 10101100:

คำสั่ง มาส์ก ผลลัพธ์ใน ACC ผลกระทบ
AND B00001111 00001111 00001100 เก็บเฉพาะสี่บิตล่างสุด (ลบค่าส่วนอื่น)
OR #1 00000001 10101101 ตั้งค่าบิตที่มีนัยสำคัญต่ำสุด ทิ้งส่วนที่เหลือไว้ไม่เปลี่ยน
XOR &FF 11111111 01010011 สลับทุกบิต
AND B00001000 ตามด้วย CMP #0 00001000 00001000 ทดสอบบิต 3: การเปรียบเทียบไม่เท่ากัน ดังนั้นบิต 3 จึงถูกตั้งค่าไว้
LSL #2 10110000 เลื่อนไปทางซ้ายสองตำแหน่ง, ขาดบิตบนสุดสองบิต
LSR #3 00010101 เลื่อนขวาสามตำแหน่ง, หลักศูนย์เข้าสู่ทางซ้าย

"เขียนคำสั่งที่ตั้งค่าบิตที่มีนัยสำคัญต่ำสุดให้เป็น 1 และทิ้งส่วนอื่นไว้ไม่เปลี่ยน": OR #1, หรือ OR B00000001. เพื่อลบค่าบิต ให้ใช้ AND กับมาส์กที่มี 0 ในตำแหน่งนั้นและ 1 ที่อื่นๆ; เพื่อทดสอบบิต, AND กับมาส์กที่มี 1 เพียงตำแหน่งเดียว, แล้วเปรียบเทียบผลลัพธ์กับศูนย์. ในอุปกรณ์ตรวจสอบ, บิตของเรจิสเตอร์หนึ่งบิตต่อเซ็นเซอร์ช่วยให้ AND เดียวสามารถตรวจสอบได้ว่าเซ็นเซอร์ใดเปิดอยู่, และ OR ตัวหนึ่งจะเปิดบิตควบคุมแอค추เอเตอร์โดยไม่รบกวนส่วนอื่น

สำรวจ

เลื่อนและบดบิตของไบต์

เลือกตัวดำเนินการและดูผลลัพธ์ของแต่ละบิต การเลื่อนซ้าย (<<) moves every bit up one place (×2); a right shift (>>) จะย้ายลง (÷2); AND กับมาส์กจะลบบิตที่ไม่ต้องการออก

คำศัพท์ ฝึกฝน
English ไทย
bit/bɪt/ บิต (bit)
logical shift/ˈlɒdʒɪkl ʃɪft/ logical shift
cyclic shift/ˈsaɪklɪk ʃɪft/ cyclic shift
mask/mæsk/ mask
4.3

คำนิยามที่ผู้สอบยอมรับ

คำถามคำนิยามจะให้คะแนนตามข้อความที่กำหนดไว้你必须 exact. เรียนรู้ให้ถูกต้องและตอบเพียงคำตอบเดียวเท่านั้น

พจน์ นิยาม
แนวคิดโปรแกรมจัดเก็บ คำสั่งโปรแกรมและข้อมูลถูกเก็บไว้ในหน่วยความจำหลักทั้งคู่, และคำสั่งจะถูกดึงและดำเนินการทีละอัน
เรจิสเตอร์ ตำแหน่งจัดเก็บขนาดเล็กและรวดเร็วมากภายในโปรเซสเซอร์เพื่อวัตถุประสงค์เฉพาะ
Program Counter เรจิสเตอร์ที่เก็บที่อยู่ของคำสั่งถัดไปที่จะถูกดึง
Memory Address Register เรจิสเตอร์ที่เก็บที่อยู่ของตำแหน่งหน่วยความจำที่กำลังอ่านหรือเขียน
Memory Data Register เรจิสเตอร์ที่เก็บข้อมูลที่หรือคำสั่งที่ถูกอ่านจากหน่วยความเมมเมื่อเร็วๆ นี้, หรือกำลังจะเขียนลงไปยังหน่วยความจำ
Current Instruction Register เรจิสเตอร์ที่เก็บคำสั่งที่กำลังถูกถอดรหัสและดำเนินการอยู่ในขณะนี้
Accumulator เรจิสเตอร์อเนกประสงค์ที่เก็บผลลัพธ์ของการดำเนินการทางคณิตศาสตร์หรือตรรกะล่าสุด
หน่วยความจำแคช หน่วยความจำขนาดเล็กและรวดเร็วใกล้กับโปรเซสเซอร์เก็บคำสั่งและข้อมูลที่ใช้งานบ่อย
Interrupt สัญญาณจากอุปกรณ์หรือโปรแกรมที่ทำให้โปรเซสเซอร์หยุดงานปัจจุบันชั่วคราวและรันRoutine บริการInterrupt
ภาษาแอสsemblie ภาษาเลเวลต่ำที่คำนำหน้าคำสั่งแต่ละตัวสอดคล้องกับคำสั่งadow code หนึ่งตัว
การเข้าถึงแบบทันที operand คือค่าที่เขียนไว้ในคำสั่ง
การเข้าถึงโดยตรง operand คือเนื้อหา củaที่อยู่ที่เขียนไว้ในคำสั่ง
การเข้าถึงทางอ้อม ที่อยู่ในคำสั่งเก็บที่อยู่ของ operand
การเข้าถึงแบบดัชนี ที่อยู่ของ operand คือที่อยู่ในคำสั่งบวกกับเนื้อหา của index register
การเข้าถึงสัมพัทธ์ ที่อยู่ของ operand ถูกกำหนดเป็นoffset จากที่อยู่ของคำสั่งปัจจุบัน
การเลื่อนเชิงตรรกะ ทุกบิตเคลื่อนที่จำนวนตำแหน่งที่กำหนดและหลักศูนย์เติมเต็มตำแหน่งที่ว่าง
4.3

ข้อแนะนำสำหรับการสอบ

  • เรียนรู้ รอบดึง-ดำเนินการ ในพจน์การถ่ายโอนเรจิสเตอร์ (PC, MAR, MDR, CIR, ACC) และสิ่งใดเพิ่มค่า PC.
  • ชื่อหน้าที่ของแต่ละเรจิสเตอร์; บัสที่อยู่เป็นทางเดียว, บัสข้อมูลเป็นสองทาง.
  • แยกแยะ โหมดการเข้าถึง (ทันที, โดยตรง, ทางอ้อม, แบบดัชนี) — คำถามที่พบบ่อย.
  • อธิบายความเร็วของนาฬิกา, จำนวนคอร์, ขนาดแคช และความยาวของคำส่งผลต่อ ประสิทธิภาพอย่างไร.
  • สำหรับ การเลื่อนแบบไบนารี, ระบุว่าเป็นตรรกะหรือทางคณิตศาสตร์; การเลื่อนซ้ายคูณด้วย 2, การเลื่อนขวาหารด้วย 2.

ข้อผิดพลาดที่พบบ่อย

  • การบอกว่า PC เก็บคำสั่งปัจจุบัน, หรือ MDR เก็บที่อยู่. PC เก็บที่อยู่ของ คำสั่งถัดไป; MDR เก็บข้อมูลหรือคำสั่ง, ไม่เคยเก็บที่อยู่.
  • การทิ้งการเพิ่มค่า PC ออกจากรอบดึง, หรือวางไว้หลังการดำเนินการ. มันเกิดขึ้นทันทีที่ที่อยู่ถูกคัดลอกไปยัง MAR.
  • อ่าน LDD 10 ว่า "load 10". LDD 10 โหลดเนื้อหา ของที่อยู่ 10; LDM #10 โหลดตัวเลข 10.
  • การใส่ค่าในคอลัมน์ ACC สำหรับ CMP หรือ OUT. การเปรียบเทียบตั้งค่าflag เท่านั้น; การเอาต์พุตไปที่คอลัมน์เอาต์พุต.
  • การบอกว่าInterrupt ถูกจัดการ "ทันที". โปรเซสเซอร์เสร็จสิ้นคำสั่งปัจจุบันและตรวจสอบInterruptที่สิ้นสุดรอบ.
  • การใช้การเลื่อนทางขวาแบบตรรกะกับเลขtwo's-complement ติดลบ. มีการเลื่อนทางคณิตศาสตร์เท่านั้นที่รักษา sign bit.

บทเรียนเชิงโต้ตอบสำหรับหัวข้อนี้

ทำทีละขั้นตอน พร้อมแบบฝึกหัดตรวจสอบผลทันที

ข้อสอบย้อนหลัง

หัวข้อเพิ่มเติมใน Computer Science A-Level

เข้าสู่ระบบหรือสร้างบัญชี

IGCSE, A-Level & AP