You are on page 1of 31

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

บทที่ 3
สถาปัตยกรรมชุดคําสั่ง

ARM เป็นโปรเซสเซอร์ในเครื่องคอมพิวเตอร์ชนิดฝังตัวที่ได้รับความนิยมมากที่สุดในโลกในปีค.ศ.
2008 มีการใช้งานโปรเซสเซอร์ ARM จํานวน 4 พันล้านตัว โดยมีส่วนแบ่งทางการตลาดของระบบฝังตัวได้แก่
โทรศัพท์เคลื่อนที่ ทีวี อุปกรณ์เครือข่าย กล้อง พรินเตอร์ เป็นต้น ในบทนี้ผู้อ่านจะได้เรียนรู้การทํางานของ
ARM ตามวัตถุประสงค์ต่อไปนี้

วัตถุประสงค์
} เข้าใจสถาปัตยกรรมภาษา Assembly ของ ARM Version 7
} เข้าใจรูปแบบคําสั่งภาษา Assembly ประเภทต่างๆ ของ ARM
} เข้าใจการเรียกใช้ฟังก์ชันและการรีเทิร์นกลับโดยใช้คําสั่งของ ARM
} โหมดการทำงานของ ARM Cortex M3
} เข้าใจการตอบสนองต่อ Exception และ อินเตอร์รัพท์ ของ ARM Cortex M3

3.1 ข้อมูลเกี่ยวกับ ARM

บริษัท ARM Holdings plc (ARM Ltd) ก่อตั้งขึ้นในเดือนพฤศจิกายน ค.ศ.1990


โดยชื่อที่ใช้ในการก่อตั้งมีชื่อว่า Advanced RISC Machines (ARM) โดยมีสํานักงานใหญ่ของบริษัทอยู่ที่เมือง
Cambridge ณ ประเทศอังกฤษ มีศูนย์ออกแบบหน่วยประมวลผลกลาง (Processor Design Centers)
ในเมือง Cambridge ประเทศอังกฤษ เมือง Austin รัฐ Texas ประเทศสหรัฐอเมริกา และเมือง Sophia
Antipolis ในประเทศสเปน อีกทั้งยังมีหน่วยงานการขาย หน่วยสนับสนุน และหน่วยงานทางวิศวกรรม
อยู่ในทั่วทุกมุมโลก บริษัท ARM มีชื่อเสียงในการออกแบบ RISC โปรเซสเซอร์ หรือ แกน หรือ คอร์ (Core)
และผลิตภัณฑ์อื่นๆที่เกี่ยวข้องกับโปรเซสเซอร์ บริษัท ARM นี้ไม่ได้ทําการผลิตไมโครชิพ (Microchip) โดยตรง
แต่บริษัท ARM พัฒนาและจําหน่ายคอร์เหล่านั้น ในรูปของทรัพย์สินทางปัญญา (Intellectual Property)
ที่ใช้ในการพัฒนาอุปกรณ์ไมโครชิพ ไมโครโปรเซสเซอร์ ไมโครคอนโทรลเลอร์ และซิสเต็มออนชิพ (System
on Chip) เพื่อใช้ในการประมวลผล และควบคุมอุปกรณ์เครื่องใช้ไฟฟ้า เช่น โทรศัพท์เคลื่อนที่ รถยนต์
เป็นต้น

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-1


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

รูปที่ 3.1.1 กราฟแสดงวิวัฒนาการและประสิทธิภาพของ ARM Cortex


สําหรับการใช้งานแบบเคลื่อนที่ (Mobile)

จากรูปที่ 3.1.1 จะเห็นได้ว่าวิวัฒนาการและประสิทธิภาพของ ARM Cortex สําหรับการใช้งานแบบ


เคลื่อนที่ (Mobile) ได้วางโรดแมปจนถึงปี คศ 2016 โดยแบ่งโทรศัพท์ออกเป็น 3 ระดับ คือ ระดับเบื้องต้น
(Entry Level) ระดับกลาง (Mid Range) และระดับซูเปอร์โฟน (Super Phone) แต่ละจุดสี่เหลี่ยม คือ
โมเดลของเครื่องโทรศัพท์ ณ เวลานั้นๆ ประกอบดัวย ซีพียูและจีพียู (CPU & GPU) ซีพียู (CPU: Central
Processing Unit) จะเป็น ARM คอร์เวอร์ชันต่างๆ เช่น Cortex-A8 เป็นต้น โดยคําว่า Dual และ Quad
หมายถึง จํานวน 2 คอร์และ 4 คอร์ ตามลําดับ ส่วนจีพียู (GPU: Graphic Processing Unit) ชื่อ Mali
รหัสต่างๆ เช่น Mali-200, Mali-400 MP เป็นต้น
วิวัฒนาการและประสิทธิภาพของ ARM Cortex A สําหรับการใช้งานประยุกต์ โดยเน้นที่โทรศัพท์
(Mobile) ได้วางโรดแมปจนถึงปี คศ 2013 โดยแบ่ง ARM Cortex ออกเป็น 3 กลุ่ม คือ ประสิทธิภาพสูง
(High Efficiency) ระดับกลาง (Mid Range) และสมรรถภาพสูง (High Performance) และแต่ละจุดสี่เหลี่ยม
คือ ARM คอร์รุ่นต่างๆ

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-2


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

รูปที่ 3.1.2 การเปรียบเทียบคุณสมบัติหลัก (Features) ระหว่าง ARM Classic กับ ARM Cortex
และเวอร์ชันของสถาปัตยกรรมคําสั่งที่วางตลาดตั้งแต่ ARMv4 ARMv5 จนถึง ARMv7

จากรูปที่ 3.1.2 จะเห็นได้ว่าฮาร์ดแวร์ของ ARM แบ่งเป็น ARM Classic, ARM Application และ
Embedded ARM ซึ่งสถาปัตยกรรมชุดคําสั่งของ ARM แบบ Classic ระบายด้วยสีน้ําเงิน ประกอบด้วย ARM
SC 100, ARM7TDMI เป็นต้น จะเห็นว่าสถาปัตยกรรมชุดคําสั่งของ ARM แบ่งเป็นเวอร์ชัน ARMv4T,
ARMv5Tj, ARMv6 และ ARMv7 โดย
• ชุดคําสั่งเวอร์ชัน ARMv4T มีใช้ในฮาร์ดแวร์สองรุ่นที่ได้รับความนิยมคือ SC (SecureCore) 100 และ
ARM7TDMI
• คําสั่งเวอร์ชัน ARMv5Tj มีฮาร์ดแวร์สามรุ่นคือ ARM926, ARM968 และ ARM946
• คําสั่งเวอร์ชัน ARMv6 มีฮาร์ดแวร์ ได้แก่ ARM11MP, ARM176jZ, ARM1136j และ ARM1156T2
• คําสั่งเวอร์ชัน ARMv6M มีฮาร์ดแวร์สามรุ่น ได้แก่ SC000, Cortex M0 และ Cortex M1
• คําสั่งเวอร์ชัน ARMv7 แบ่งเป็น ARMv7A ARMv7R ARMv7M และ ARMv7ME
o คําสั่งเวอร์ชัน ARMv7A ทํางานบนฮาร์ดแวร์ Cortex ซีรี่ย์ A เช่น Cortex-A5-A8
o คําสั่งเวอร์ชัน ARMv7R ทํางานบนฮาร์ดแวร์ Cortex ซีรี่ย์ R เช่น Cortex-R4
o คําสั่งเวอร์ชัน ARMv7M/ME ทํางานบนฮาร์ดแวร์ Cortex ซีรี่ย์ M เช่น SC300, Cortex-
M3, Cortex-M4
ในหนังสือเล่มนี้ ผู้เขียนจะเน้นที่เวอร์ชัน ARMv7M ตาม Cortex-M3 นั่นเอง

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-3


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

สถาปัตยกรรมชุดคําสั่งของ ARM

คําสั่งภาษาแอสเซมบลีแต่ละคําสั่ง มีโครงสร้างต่างๆ ประกอบด้วย

การกระทำ (Opcode) รีจิสเตอร์ปลายทาง รีจิสเตอร์ต้นทาง1 รีจิสเตอร์ต้นทาง2


Opcode Rdestination Rsource1 Rsource2

ผู้อ่านจะต้องอ่านเรียงจากซ้ายมาขวา แต่ในเชิงคณิตศาสตร์ ผู้อ่านสามารถแปลความหมายได้ว่า

รีจิสเตอร์ปลายทาง = รีจิสเตอร์ต้นทาง1 กระทำ รีจิสเตอร์ต้นทาง2


Rdestination = Rsource1 Opcode Rsource2

คําสั่งภาษาเครื่อง (Machine Instruction หรือ Machine Code) มีลักษณะเป็นเลขฐานสองที่


สอดคล้องกับคําสั่งภาษาแอสเซมบลี คําสั่งภาษาเครื่องของ ARM มีความยาว 32 บิตและบางคําสั่งยาว 16 บิต
(Thumb) รีจิสเตอร์ (Register) คือ หน่วยความจําความเร็วสูงอยู่ภายในโปรเซสเซอร์ แต่ละตัวมีความยาว 32
บิต รีจิสเตอร์สําหรับเก็บข้อมูลชั่วคราวจํานวน 16 ตัว เราตั้งชื่อรีจิสเตอร์เหล่านี้ว่า r0, r1, r2, …, r15
ใช้สําหรับเก็บข้อมูลที่อ่านมาจากหน่วยความจําชนิด RAM รีจิสเตอร์ r0 ถึง r12 สามารถใช้งานเป็นรีจิสเตอร์
ต้นทางหรือปลายทางได้ตามความต้องการ ส่วนรีจิสเตอร์ r13 ได้รับการมอบหมายหน้าที่พิเศษเป็น stack
pointer (sp) เพื่อเก็บแอดเดรสตําแหน่งบนสุดของสแต็ก รีจิสเตอร์ r14 ทําหน้าที่เป็น Link Register (LR)
ใช้เก็บแอดเดรสตําแหน่งที่จะรีเทิร์นกลับ ประกอบกับคําสั่ง Branch with Link (BL) รีจิสเตอร์ r15 ทําหน้าที่
เก็บแอดเดรสตําแหน่งของคําสั่งที่จะประมวลผลต่อ โดยมีชื่อเป็นทางการว่า Program Counter
หรือเรียกย่อๆ ว่า PC รีจิสเตอร์สําหรับเก็บสถานะของโปรเซสเซอร์ (processor status register)
รายละเอียดจะกล่าวถึงในส่วนถัดไป

ขนาดข้อมูล และชุดคําสั่ง
ARM จะใช้ชุดคําสั่ง 2 เวอร์ชันคือ เวอร์ชันปกติแต่ละคําสั่งยาว 32 บิตและเวอร์ชัน Thumb
แต่ละคําสั่งยาว 16 บิต นอกจากนี้ Jazelle cores สามารถดําเนินการ Java bytecode ความหมายต่างๆ
ในการใช้ ARM
• Byte หมายถึง 8 บิต
• Halfword หมายถึง 16 บิต (2 ไบท์)
• Word หมายถึง 32 บิต (4 ไบท์)

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-4


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

รูปที่ 3.1.3 ภาพรวมการทํางานของโปรเซสเซอร์ ARM Cortex

ซึ่งล้วนเป็นชุดคําสั่งยาว 32 บิต และชุดคําสั่งความยาว 16 บิต ที่เรียกว่า Thumb ยกตัวอย่างเช่น


ชุดคําสั่ง ARMv5TJ จะมีชุดคําสั่ง VFPv2 และ Jazelle ในคอร์เวอร์ชั่นเหล่านี้ คือ ARM926, ARM968 และ
ARM946 เป็นต้น จากนั้นก็เป็นสถาปัตยกรรมชุดคําสั่งของ ARM แบบ Application จะมีสีส้ม
ประกอบคอร์เวอร์ชันต่างๆ เหล่านี้ Cortex A-5 ถึง Cortex A15 โดยจะใช้ชุดคําสั่ง ARMv7A
สุดท้ายสถาปัตยกรรมชุดคําสั่งของ Embedded ARM จะระบายด้วยสีเขียว ประกอบด้วยคอร์เวอร์ชันต่างๆ
เหล่านี้ Cortex M0 ถึง Cortex M3 โดยจะใช้ชุดคําสั่ง ARMv7M และ Cortex R4 โดยจะใช้ชุดคําสั่ง
ARMv7-R

รายละเอียดสถาปัตยกรรมคําสั่ง ARMv7

สถาปัตยกรรมคําสั่งเวอร์ชัน ARMv7 แบ่งเป็นเวอร์ชั่นย่อยๆ ได้แก่ ARMv7-M, ARMv7-R และ


ARMv7-A โดย ARMv7-M มีจํานวนคําสั่งน้อยกว่าจึงทําให้ฮาร์ดแวร์มีความซับซ้อนต่ํา โดยนับจากจํานวน
ลอจิคเกต เหมาะกับระบบสมองกลฝังตัวซึ่งจะตรงกับชื่อชิปตระกูล Cortex-M ส่วนเวอร์ชัน ARMv7-R โดย R
หมายถึง Real-time มีคําสั่งที่ทํางานด้วยจํานวนคล็อกที่แน่นอน เพื่อตอบสนองต่อการทํางานของระบบฝังตัว
แบบเรียลไทม์ (Real-Time Embedded System) และมีการป้องกันหน่วยความจํา (MPU: Memory
Protection Unit) เพื่อความปลอดภัยสูงขึ้น เหมาะสําหรับอุตสาหกรรมสมองกลฝังตัว โดยอยู่ในตระกูล
Cortex-R ส่วนเวอร์ชั่นย่อย ARMv7-A โดย A หมายถึง Application เวอร์ชั่น A

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-5


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

นี้จะสนับสนุนการจัดการหน่วยความจํา (Memory Management Unit: MMU) เพื่อรองรับหน่วยสํารอง


ข้อมูล (Storage Memory) ขนาดใหญ่ และการใช้งานประยุกต์ที่ต้องการประสิทธิภาพสูง เช่น
ข้อมูลประเภทมัลติมีเดีย เกมสามมิติ (3-D Game) เป็นต้น เพื่อให้ฮาร์ดแวร์ใช้พลังงานต่ํา
เป็นการประหยัดแบตเตอรี่ในโทรศัพท์เคลื่อนที่ไปพร้อมๆกัน โดยได้รับอิทธิพลจากระบบปฏิบัติการ (Multi-
tasking Operating System) ในปัจจุบัน เช่น แอนดรอยด์ iOS วินโดวส์โมบายล์ (Windows Mobile)
เป็นต้น

รูปที่ 3.1.4 แสดงขอบเขตของสถาปัตยกรรมคําสั่งที่ใช้ใน ARMv6-M และ ARMv7-M และในชิปตระกูล


Cortex M0/M1, Cortex M3, Cortex M4 และ Cortex M4 FPU (Floating Point Unit)

รูปที่ 3.1.4 แสดงขอบเขตของสถาปัตยกรรมชุดคําสั่งที่ใช้ใน ARMv6-M และ ARMv7-M


และในชิปตระกูล Cortex M0/M1, Cortex M3, Cortex M4 และ Cortex M4 FPU (Floating Point Unit)
โดยชิป Cortex M0 และ Cortex M1 ใช้เวอร์ชั่น ARMv6-M ซึ่งคําสั่งต่างๆ จะมีบรรจุในชิป Cortex M3
ด้วยเช่นกัน ในทํานองเดียวกัน คําสั่งต่างของ Cortex M3 จะมีบรรจุในชิป Cortex M4 ด้วย
โดยคําสั่งแอสเซมบลีเหล่านี้รวมอยู่ในเวอร์ชั่น ARMv7-M

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-6


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

รูปที่ 3.1.5 คําสั่งที่เพิ่มเติมเข้าไปในสถาปัตยกรรมคําสั่ง (Instruction Set Architecture) ของ ARM


ตั้งแต่เวอร์ชัน ARMv5, ARMv6, ARMv7-A/R และ ARMv8-A

รูปที่ 3.1.5 คําสั่งที่เพิ่มเติมเข้าไปในสถาปัตยกรรมคําสั่ง (Instruction Set Architecture) ของ ARM


ตั้งแต่เวอร์ชัน ARMv5, ARMv6, ARMv7-A/R และ ARMv8-A โดย ARMv8-A เพิ่มชุดคําสั่งความยาว 64 บิต
เข้าไปชื่อว่า AArch64 ส่วน AArch32 ยังรองรับคําสั่งเดิมที่ยาว 32 บิต ชิปปัจจุบันที่ใช้ชุดคําสั่ง ARMv8-A
ได้แก่ Apple A8 ตามที่นําเสนอในบทที่ 1 ไปแล้ว

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-7


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

3.2 สถาปัตยกรรมชุดคําสั่งของ ARM


ARM แบ่งชนิดคําสั่งหลักๆ ดังนี้ คําสั่งคณิตศาสตร์และประมวลผล (Data Processing: DP)
คําสั่งโอนถ่ายข้อมูลระหว่างหน่วยความจํา (Data Transfer: DT) คําสั่งกระโดด (Branch: BR) แบ่งเป็นชนิดมี
เงื่อนไข และ ไม่มีเงื่อนไข (Conditional and Unconditional) และคําสั่งอื่นๆ

หลักการออกแบบข้อที่ 1 Load-Store Architecture

โปรเซสเซอร์จะต้องอ่านข้อมูลจากหน่วยความจําเข้ามาเก็บในรีจิสเตอร์ การอ่านเขียนข้อมูลจาก
หน่วยความจํา ต้องอาศัยคําสั่งประเภท LOAD และ STORE แล้วจึงอ่านข้อมูลจากรีจิสเตอร์ไปคํานวณเท่านั้น
เหตุใดจึงต้องทําอย่างนี้ รีจิสเตอร์มีความเร็วในการอ่านเขียนสูงกว่าหน่วยความจํา (RAM) คอมไพเลอร์จะต้อง
แปลคําสั่งและใช้งานข้อมูลหรือตัวแปรที่โหลดจากหน่วยความจํามาเก็บพักในรีจิสเตอร์เพื่อคํานวณ ให้คุ้มค่า
มากที่สุด โดยใช้รีจิสเตอร์ที่มีเก็บข้อมูลหรือตัวแปรที่ใช้งานบ่อยๆ เมื่อเลิกใช้งานโปรแกรมจะต้องอาศัย
คําสั่งประเภท STORE เก็บค่ารีจิสเตอร์กลับไปในหน่วยความจํา เพื่อปล่อยให้รีจิสเตอร์ว่างลง

ตัวอย่างในประโยคภาษา C
• f = (g + h) - (i + j);
o ค่าของตัวแปร g, h, i, j, f จะอ่านค่ามาจากหน่วยความจําไปเก็บไว้ในรีจิสเตอร์ r0, r1, r2, r3, r4
ตามลําดับ
o รีจิสเตอร์ r5 และ r6 เก็บค่าผลลัพธ์ชั่วคราว
o เมื่อแปลให้เป็นภาษาแอสเซมบลีของ ARM ใกล้เคียงกับชุดคําสั่งต่อไปนี้:
§ LDR r0, Address(g) ; อ่านค่าของตัวแปร g มาเก็บในรีจิสเตอร์ r0
§ LDR r1, Address(h) ; อ่านค่าของตัวแปร h มาเก็บในรีจิสเตอร์ r1
§ LDR r2, Address(i) ; อ่านค่าของตัวแปร i มาเก็บในรีจิสเตอร์ r2
§ LDR r3, Address(j) ; อ่านค่าของตัวแปร j มาเก็บในรีจิสเตอร์ r3
§ ADD r5, r0, r1 ; r5 เก็บค่า g + h
§ ADD r6, r2, r3 ; r6 เก็บค่า i + j
§ SUB r4, r5, r6 ; r4 เก็บค่า r5-r6
§ STR r4, Address(f) ; เขียนค่าของรีจิสเตอร์ r4 ในตําแหน่งตัวแปร f
; ในหน่วยความจํา

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-8


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

3.2.1 คําสั่งการประมวลผลข้อมูล (Data Processing: DP)


การบวกและลบเลขในคําสั่งภาษาแอสเซมบลี จะต้องใช้องค์ประกอบ 3 ตัว คือ ตัวตั้ง ตัวลบ และ
ผลลัพธ์การกระทําทางคณิตศาสตร์ทั้งหมด จะเขียนในรูปนี้
ADD r0, r1, r2 ;r0<= r1 + r2

หลักการออกแบบข้อที่ 2: Simplicity favors regularity แปลได้ว่า ความเรียบง่ายทําให้เกิดความเป็น


ระเบียบ หรือในทางกลับกัน เมื่อทุกคําสั่งเขียนในรูปแบบเดียวกัน การออกแบบคําสั่งจึงควรทําอย่างมี
ระเบียบแบบแผน เพื่อทําให้วงจรไม่ซับซ้อน
} คําสั่งเหล่านี้มีการดําเนินการบน register โดยไม่ส่งผลกระทบกับ memory

รูปที่ 3.2.1 คําสั่งการประมวลผลข้อมูล


} Examples:
• ADD r0, r1, r2 ; r0 = r1 + r2
• TEQ r0, r1 ; if r0 = r1, Z flag will be set
• MOV r0, r1 ; copy r1 to r0

คําสั่งด้านตรรกศาสตร์ระดับบิต (Bitwise Logical Instruction)

ตารางที่ 3.2.1 คําสั่งด้านตรรกศาสตร์ระดับบิตในแต่ละภาษา

และ (AND)
ใช้สําหรับเลือกกระทําต่อบิตที่ต้องการ
AND r5, r1, r2 ; reg r5 = reg r1&reg r2

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-9


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

รูปที่ 3.2.2 แสดงวิธีการ AND r5, r1, r2


หรือ (OR)
ใช้สําหรับ รวมบิตในรีจิสเตอร์เข้าด้วยกัน
ORR r5, r1, r2 ; reg r5 = reg r1 | reg r2

รูปที่ 3.2.3 แสดงวิธีการ ORR r5, r1, r2


นิเสธ (NOT)
ใช้สําหรับอินเวอร์ตบิตทั้งหมดในรีจิสเตอร์ เช่น คําสั่ง Move Not (MVN)
MVN r5, r1 ; reg r5 = ~ reg r1

รูปที่ 3.2.4 แสดงวิธีการ MVN r5, r1

ตัวอย่างคําสั่งคณิตศาสตร์

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-10


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

รูปแบบคําสั่งประเภทต่างๆ ของ ARM


รูปแบบที่สมบูรณ์ของคําสั่งประเภทต่าง สามารถเขียนเป็นสัญลักษณ์ได้ดังนี้

<Operation>{<Cond>}{S} {Rd,} Rn, Operand2

โดย Operation กําหนดชนิด F (Format) ความยาว 2 บิต ของคําสั่งว่าเป็น DP (Data Processing) DT


(Data Transfer) หรือ BR (Branch) ตามรูปที่ 3.2.6 ส่วน Cond (Condition) เป็นเลขฐานสอง ยาว 4 บิต
ใช้กําหนดเงื่อนไข ตามรูปที่ 3.2.8

รูปที่ 3.2.6 แสดงรูปแบบคําสั่งประเภทต่างๆใน ARM

จากรูปที่ 3.2.6 จะเห็นว่ามีรูปแบบคําสั่งอยู่ทั้งหมด 3 ประเภท ประเภทแรก คือ


รูปแบบคําสั่งคณิตศาสตร์และประมวลผล (DP Format) ต่อมาก็เป็นประเภทที่ 2 คือ
รูปแบบคําสั่งโอนถ่ายข้อมูลระหว่างหน่วยความจํา (DT Format) สุดท้ายก็เป็นรูปแบบคําสั่งกระโดด (BR
Format) ซึ่งรายละเอียดของแต่ละรูปแบบจะกล่าวถัดต่อไป

โครงสร้างคําสั่งคณิตศาสตร์และประมวลผล

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-11


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

รูปที่ 3.2.7 แสดงโครงสร้างคําสั่งคณิตศาสตร์และประมวลผล

จากรูปที่ 3.2.7 สามารถอธิบายโครงสร้างดังกล่าวได้ต่อไปนี้


v บิต Cond: Condition (4 บิต) หรือเงื่อนไขที่จะดําเนินตามคําสั่งนี้หากเงื่อนไขที่ตั้งไว้เป็น จริง
รายละเอียดเพิ่มเติมอยู่ในรูปที่ 3.2.8
v บิต F: Instruction Format ความยาว 2 บิต
Ø เมื่อ F=00 หมายถึง คําสั่งประเภท Data Processing
Ø เมื่อ F=01 หมายถึง คําสั่งประเภท Data Transfer
Ø เมื่อ F=10 หมายถึง คําสั่งประเภท Branch
v บิต I:Immediate.
Ø ถ้า I=0, ตัวตั้งที่สองคือ เลขรีจิสเตอร์ มีค่าตั้งแต่ 0 (0000 0000 00002) ถึง 15 (0000 0000 11112)
ตามความยาว 12 บิต
Ø ถ้า I=1, ตัวตั้งที่สองคือ ค่าคงที่ขนาด 12 บิต (12-bit immediate)
v ออพโค้ด OpCode : (Operation Code) รหัสของการทํางานความยาว 4 บิต
v บิต S: Set Condition Code
Ø ถ้า S=0 หมายถึง
Ø ถ้า S=1 หมายถึง
v เลขรีจิสเตอร์ Rn: (source register) รีจิสเตอร์ต้นทาง โดย Rn มีค่าตั้งแต่ 0 ถึง 15 ตามความยาว 4 บิต
v เลขรีจิสเตอร์ Rd: (destination register) รีจิสเตอร์ปลายทางที่เก็บผลลัพธ์ โดย Rd มีค่าตั้งแต่ 0 ถึง 15
ตามความยาว 4 บิต
v ตัวตั้ง Operand2: ตัวตั้งที่สอง (second source operand) ยาว 12 บิต

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-12


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

รูปที่ 3.2.8 แสดงเลขบิต Cond ความยาว 4 บิตที่ใช้ในโครงสร้างคําสั่งคณิตศาสตร์และประมวลผล

รหัสย่อ Mnemonic ต่างๆ เหล่านี้ หมายถึง


• EQ คือ Equal เงื่อนไขเป็นจริงเมื่อ บิต Z (Zero) เป็น “1”
• NE คือ Not Equal เงื่อนไขเป็นจริงเมื่อ บิต Z (Zero) เป็น “0”
• CS/HS คือ Carry Set เงื่อนไขเป็นจริงเมื่อ บิต C (Carry) เป็น “1”
• CC/LO คือ Carry Clear เงื่อนไขเป็นจริงเมื่อ บิต C (Carry) เป็น “0”
• MI คือ Minus เงื่อนไขเป็นจริงเมื่อ บิต N (Negative) เป็น “1”
• PL คือ Plus เงื่อนไขเป็นจริงเมื่อ บิต N (Negative) เป็น “0”
• VS คือ Overflow เงื่อนไขเป็นจริงเมื่อ บิต V (Overflow) เป็น “1”
• VC คือ NoOverflow เงื่อนไขเป็นจริงเมื่อ บิต V (Overflow) เป็น “0”
• HI คือ Higher (Unsigned) จริงเมื่อ บิต C เป็น “1” และ Z เป็น “0”
• LS คือ Less than or Equal (Unsigned) จริงเมื่อ บิต C เป็น “0” และ Z เป็น “1”
• GE คือ Greater than or Equal (Signed) จริงเมื่อ บิต N = V
• LT คือ Less than (Signed) จริงเมื่อ บิต N != V
• GT คือ Greater than (Signed) จริงเมื่อ บิต Z เป็น “0” และ N = V
• LT คือ Less than or Equal (Signed) จริงเมื่อ บิต Z เป็น “1” และ N != V
• AL คือ Always เงื่อนไขเป็นจริงเสมอ ใช้สําหรับคําสั่งที่ไม่ต้องมีเงื่อนไข
• NV คือ Never เงื่อนไขเป็นจริงเสมอ ไม่แนะนําให้ใช้งาน

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-13


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

Cortex-M3 Program Status Register

รูปที่ 3.2.5 แสดงโครงสร้างของ PSR (Program Status Registers) ใน Cortex-M3

จากรูปที่ 3.2.5 สามารถอธิบายโครงสร้างดังกล่าวจากซ้ายไปขวา ได้ดังต่อไปนี้


• Condition code flags
o N = ผลลัพธ์ที่ได้เป็นค่าลบจาก ALU
o Z = ผลลัพธ์ที่ได้เป็นค่าศูนย์จาก ALU
o C = เกิด Carried outจาก ALU
o V = เกิด oVerflowedจาก ALU
• Q = Sticky Overflow flag
o Indicates if saturation has occurred
• บิต J = 1: โปรเซสเซอร์ทำงานในโหมด Jazelle
• GE[3:0] = บิต SIMD Condition code
o ถูกใช้โดยชุดคําสั่ง SIMD บางคําสั่ง
• IT[abcde] = บิต IF THEN code
o ควบคุมเงื่อนไขการในชุดคําสั่ง Thumb
• บิต E บ่งบอกการจัดเรียงไบท์ข้อมูลในหน่วยความจํา โดย
o เมื่อ E = 0: ข้อมูลจัดเรียงในหน่วยความจําแบบ Little Endian
o เมื่อ E = 1: ข้อมูลจัดเรียงในหน่วยความจําแบบ Big Endian
• บิต A
o A = 1: Disable imprecise data aborts
• อินเตอร์รัพท์ Disable บิต ประกอบด้วยบิต I และบิต F
o บิต I = 1: ไม่อนุญาตให้ตอบสนองต่ออินเตอร์รัพท์ประเภท IRQ
o บิต F = 1: ไม่อนุญาตให้ตอบสนองต่ออินเตอร์รัพท์ประเภท FIQ
• บิต T = 0: โปรเซสเซอร์ทำงานในโหมด ARM (32 bit)
• บิต T = 1: โปรเซสเซอร์ทำงานในโหมด Thumb (16 bit)
• บิต mode บอกถึงโหมดของ processor มีความยาว 4 บิต

• ใน Status Register แต่ละตัวจะประกอบไปด้วย


o APSR - Application Program Status Register – ALU flags
o IPSR - อินเตอร์รัพท์ Program Status Register – อินเตอร์รัพท์/Exception No.
o EPSR - Execution Program Status Register
§ IT field – If/Then block information

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-14


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

§ ICI field – อินเตอร์รัพท์-Continuable Instruction information

ตัวอย่างการใช้งานคําสั่งคณิตศาสตร์และประมวลผล

รูปที่ 3.2.8 แสดงการแทนค่าต่างๆลงในโครงสร้างคําสั่งคณิตศาสตร์และประมวลผล

การทํางานตามคําสั่งประเภทคณิตศาสตร์ อาจเกิดผลลัพธ์ที่ต้องรับการตรวจสอบ เช่น


เกิดโอเวอร์โฟลว์ (oVerflow) ตามที่อธิบายในบทที่ 2 เป็นต้น โดยสถานะการทํางานของแต่ละคําสั่ง
จะถูกบันทึกลงในรีจิสเตอร์ ที่ชื่อว่า Program Status Register

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-15


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

3.2.2 คําสั่งโอนถ่ายข้อมูลระหว่างหน่วยความจํา (Data Transfer: DT)

• g = h + A[8];
o r1 เก็บค่า g
o r2 เก็บค่า h
o r3 เก็บค่าแอดเดรสเริ่มต้น (base address) ของอะเรย์ A
o r5 เป็นรีจิสเตอร์สําหรับเก็บค่าชั่วคราว
o เมื่อคอมไพล์ด้วยภาษาของ ARM
§ Index 8 ที่มีขนาดของ offset เป็น 32

รูปที่ 3.2.9 แสดงคําสั่ง g = h + A[8] ณ ที่ Index 8 ที่มีขนาดของ offset เป็น 32

รูปที่ 3.2.10 แสดงการแทนค่าต่างๆลงในโครงสร้างคําสั่งโอนถ่ายข้อมูลระหว่างหน่วยความจํา

การโหลด คือ อ่านค่าจากหน่วยความจํามาเก็บในรีจิสเตอร์ r5 ตามแอดเดรสที่กําหนดอยู่ในรีจิสเตอร์


r3+ 32 โดย r3 เป็นแอดเดรสเริ่มต้นของอะเรย์ A และตําแหน่งที่ A[8] ห่างจากตําแหน่ง A[0] เท่ากับ 8*4 =
32 ไบท์

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-16


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

รูปที่ 3.2.11 แสดงโครงสร้างคําสั่งโอนถ่ายข้อมูลระหว่างหน่วยความจํา

หลักการออกแบบข้อที่ 3 Immediate Value ใช้งานบ่อยและง่าย ควรเก็บค่าลงในคําสั่งโดยตรง


เพื่อความรวดเร็ว
• ค่าคงที่สามารถระบุในคําสั่งได้โดยตรง เช่น
ADD r3,r3,#4 ; r3 <= r3 + 4!
§ โปรแกรมเมอร์นิยมใช้ค่าคงที่ขนาดเล็ก เพื่อสะดวกต่อการเขียน
§ คําสั่งทางคณิตศาสตร์ของ ARM สามารถบรรจุค่าคงที่ขนาดเล็กได้
โดยทําให้สะดวกและคํานวณได้ทันทีทันใด ทําให้เราเรียกค่าคงที่เหล่านี้ว่า Immediate
operand

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-17


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

3.2.3 คําสั่งประเภท BR (Branch)


• ใช้ในการควบคุมการทํางานของโปรแกรม เช่น ประโยคเงื่อนไข การวนลูป การเรียกใช้ฟังก์ชัน
• ใช้ควบคู่กับการเปรียบเทียบด้วยคําสั่ง CMP (Compare) รีจิสเตอร์ จํานวน 2 ตัว

ประโยคเงื่อนไข (IF Statements)


• ภาษา C:
if (i==j)
f = g+h;
else
f = g-h;

รูปที่ 3.2.12 แสดงผังงานของประโยคเงื่อนไขกรณีที่ i==j และ i<>j


§ f, g,h,i,j ถูกโหลดค่าเข้ามาเก็บในรีจิสเตอร์: r0, r1,..r4 ตามลําดับ
• เมื่อคอมไพล์เป็นแอสเซมบลีของ ARM:

รูปที่ 3.2.13 แสดงการคอมไพล์จากภาษาซีให้กลายภาษาแอสแซมบลีของประโยคเงื่อนไข

การวนรอบ WHILE(WHILE Loop)

• ภาษา C:

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-18


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

while (i==j) {
i = i+1; ;loop body
}
§ f, g,h,i,j ถูกโหลดค่าเข้ามาเก็บในรีจิสเตอร์: r0, r1,..r4 ตามลําดับ

• เมื่อคอมไพล์เป็นแอสเซมบลีของ ARM:

การคอมไพล์จากภาษาซีให้กลายภาษาแอสแซมบลีของการวนรอบ

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-19


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

3.2.4 การเรียกใช้ฟังก์ชัน (Function Call)

รูปที่ 3.2.14 แสดงการทํางานคร่าวๆของการเรียกใช้ฟังก์ชัน func1() ใน Stack


จากรูปที่ 3.2.14 สามารถอธิบายคําสั่ง BL func1 ซึ่งจะทํางานขั้นตอนเหล่านี้
• เก็บตําแหน่งแอดเดรสที่จะทํางานต่อในรีจิสเตอร์ lrหรือ r14
• เปลี่ยนค่า pc หรือ r15 เป็นตําแหน่งแอดเดรสของ func1
• เมื่อฟังก์ชัน func1 ทํางานเสร็จสิ้น แล้วจะรีเทิร์นกลับมายังฟังก์ชัน main() โดยคําสั่ง Mov
pc, lr
ขั้นตอนการเรียกใช้ฟังก์ชัน ประกอบด้วย
1. ส่งผ่านค่าไปยังฟังก์ชันลงในรีจิสเตอร์
2. ส่งผ่านการทํางานไปยังฟังก์ชัน นั่นคือ ค่าของ PC
จะถูกเปลี่ยนให้ชี้ไปยังแอดเดรสเริ่มต้นของฟังก์ชันนั้น
3. จองหน่วยความจําที่ต้องการบนสแต็ก
4. เริ่มต้นทํางานคําสั่งของฟังก์ชันนั้น
5. ส่งค่าผลลัพธ์ที่คํานวณเสร็จเรียบร้อยผ่านทางรีจิสเตอร์ไปยังผู้เรียก
6. รีเทิร์นกลับไปยังฟังก์ชันผู้เรียก โดย MOV pc, lr

คําสั่ง branch with link (BL)

รูปที่ 3.2.15 แสดงการทํางานของคําสั่ง branch with link (BL)

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-20


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

จากรูปที่ 3.2.15 คําสั่ง branch with link (BL) คล้ายกับคําสั่ง Branch (B) แต่ คําสั่ง BL จะเก็บค่า
PC ซึ่งชี้ไปยังแอดเดรสของคําสั่งถัดไป ในรีจิสเตอร์ LR (Link Return)
เพื่อใช้รีเทิร์นกลับหลังจากที่ทํางานคําสั่งต่างๆ ใน subroutine (function) เสร็จสิ้นแล้ว
ตัวแปรโลคอล (Local Variables) และสแต็กเฟรม (Stack Frame)

รูปที่ 3.2.16 แสดงความสัมพันธ์ของตัวแปรโลคอล (Local Variables) และสแต็กเฟรม (Stack Frame)


จากรูปที่ 3.2.16 สามารถอธิบายจากรูปได้ดังต่อไปนี้
• procedure ทําการขอพื้นที่จาก local workspace เพื่อใช้สําหรับเก็บ temporary
variables
• workspace นั้นมีความเป็นส่วนตัวสําหรับ procedure
และไม่เคยที่จะถูกเข้าถึงโดยการเรียกของ program หรือ subroutines อื่นๆ
• ถ้า procedure ถูกเรียกใช้งาน local variables นั้นก็จะถูกใช้งานไปด้วย
• แต่ละครั้งที่ procedure ถูกเรียกใช้งาน workspace ก็จะถูกสร้างไปด้วย
• ถ้า procedure ถูกจํากัด workspace และหลังจากนั้นก็จะถูก อินเตอร์รัพท์ed
ซึ่งการทําเหล่านี้เกิดขึ้นโดยจากการเรียกใช้ของอินเตอร์รัพท์ routine
และพื้นที่ที่ถูกจํากัดนั้นก็จะถูกเขียนทับโดย procedure ที่ถูกเรียกใช้งาน
• Stack มีกลไกในการทํางานสําหรับการ implementing กับ workspace ชนิด
dynamic
• workspace ชนิด dynamic จะประกอบไปด้วย stack-frame (SF) และ frame-
pointer (FP) โดย stack-frame คือ พื้นที่ของ temporary storage ที่อยู่บน Stack
ขณะนั้น

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-21


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

• ซึ่งในรูปแสดงให้เห็นว่า d-byte stack-frame ถูกสร้างโดยการเคลื่อนของstack


pointer โดย d locations ที่จุดเริ่มต้นของsubroutine
• ดังนั้นสามารถพิจารณาได้ว่า stack pointer นั้นเคลื่อนที่ไปตาม low addresses และ
stack pointer ก็จะถูกชี้อยู่บนสุด stack ในขณะนั้น
ตัวอย่างการใช้คําสั่ง BL
• ฟังก์ชัน sort ภาษา C

รูปที่ 3.2.17 แสดงฟังก์ชัน sort ในภาษา C


• ฟังก์ชัน swap ภาษา C
o ทําการสลับค่าในอะเรย์ v ณ ตําแหน่ง k

รูปที่ 3.2.18 แสดงฟังก์ชัน swap ในภาษา C


การใช้งานค่าตัวแปรและรีจิสเตอร์ในฟังก์ชัน sort(int v[], int n)

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-22


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

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


หน่วยความจําบริเวณสแต็กเพื่อนํารีจิสเตอร์ไปใช้งานชั่วคราวในฟังก์ชันsort ในภาษาแอสแซมบลี

โปรแกรมหลัก (body) ในฟังก์ชัน sort(int v[], int n)

รูปที่ 3.2.20 แสดงขั้นตอนการทํางานของฟังก์ชันsort ในภาษาแอสแซมบลี ในแต่ละส่วนงาน

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-23


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

การคืนค่าของกลับให้แก่รีจิสเตอร์ก่อนฟังก์ชัน sort(int v[], int n) รีเทิร์นกลับ

รูปที่ 3.2.21 แสดงขั้นตอนการคืนค่าของรีจิสเตอร์ที่จัดเก็บลงในหน่วยความจําบริเวณสแต็กกลับให้แก่


รีจิสเตอร์ก่อนฟังก์ชัน sortในภาษาแอสแซมบลี
การใช้งานค่าตัวแปรและรีจิสเตอร์ในฟังก์ชัน swap(int v[], int k)

รูปที่ 3.2.22 แสดงขั้นตอนการคืนค่าของรีจิสเตอร์ที่จัดเก็บลงในหน่วยความจําบริเวณสแต็กกลับให้แก่


รีจิสเตอร์ก่อนฟังก์ชัน swapในภาษาแอสแซมบลี

หมายเหตุ ไม่มีขั้นตอนจัดเก็บรีจิสเตอร์ลงในหน่วยความจําบริเวณสแต็ก เพื่อนํารีจิสเตอร์ไปใช้งานชั่วคราว


ในฟังก์ชัน และการคืนค่าของรีจิสเตอร์ที่จัดเก็บลงในหน่วยความจําบริเวณสแต็ก กลับให้แก่รีจิสเตอร์
ก่อนฟังก์ชัน sort รีเทิร์นไปทํางานต่อเนื่องจากมีการใช้งานตัวแปรน้อยเพียงหนึ่งตัว คือ temp
จึงมีรีจิสเตอร์เพียงพอ ทําให้ไม่จําเป็นต้องทําขั้นตอนทั้งสอง เหมือนฟังก์ชัน sort()

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-24


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

3.3 โหมดการทำงานของ ARM Cortex M3


การทำงานของ Cortex-M3 แบ่งเป็นโหมดต่างๆ การจัดการข้อยกเว้น (Exception)
การจัดการอินเตอร์รัพท์ของขา Reset ตารางเว็คเตอร์อินเตอร์รัพท์ (Interrupt Vector Table) สําหรับ
เก็บแอดเดรสเริ่มต้นของคําสั่งใน ARMv7-M การเข้าสู่และออกจาก Interrupt Service Routine
ชุดของรีจิสเตอร์ในโหมดการทำงานต่างๆ

โหมดพริวิเลจด์ (Privileged) ของ Cortex-M3


ARM Cortex M3 มีโหมดการทำงานขั้นพื้นฐานทั้งหมด 7 โหมดย่อย แต่ละโหมดย่อยนั้นจะใช้พื้นที่
Stack ของแต่ละโหมดที่แตกต่างกัน โหมดการทํางานสามารถดําเนินการจัดเป็นโหมดพริวิเลจด์ (Privileged)
และโหมดอันพริวิเลจด์ (Unprivileged) อันได้แก่

รูปที่ 3.3.1 แสดงโหมดพื้นฐานที่ใช้ในการควบคุมการทํางานของ ARM Cortex M3


จากรูปที่ 3.3.1 สามารถแสดงให้เห็นว่ามีโหมดการทํางานอยู่ 2 ประเภทใหญ่ ด้วยกัน
ประเภทที่ 1 คือ โหมดนี้จะมีโหมดการทํางานย่อยดังต่อไปนี้
• โหมด Supervisor เป็นโหมดการทํางานที่จะทํางานเมื่อกดปุ่ม Reset หรือเมื่อ Supervisor
มีการเรียกใช้คําสั่ง SVC
• โหมด FIQ เป็นโหมดการทํางานเมื่อเกิดอินเตอร์รัพท์ที่มีลําดับ Priority ที่มีความสูงกว่า
Exception ที่กําลังจัดการอยู่
• โหมด IRQ เป็นโหมดการทํางานที่จะทํางานเมื่อมีเกิดอินเตอร์รัพท์ขึ้นในระหว่างการทํางาน
ในช่วงปกติ
• โหมด Abort เป็นโหมดการทํางานที่จะทํางานเมื่อมีต้องการจัดการกับการอ้างถึง Memory ณ
ตําแหน่งที่ผู้ใช้ไม่ได้รับอนุญาต ซึ่งเป็นกลไกหนึ่งของการป้องกันหน่วยความจํา (Memory
Protection)

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-25


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

• โหมด Undef (Undefined) เป็นโหมดการทํางานที่ถูกเรียกใช้ เมื่อวงจรตรวจจับคําสั่งทีแ่ ปลก


ปลอม
• โหมด System เป็นโหมดการทํางานของระบบปฏิบัติการที่ใช้รีจิสเตอร์ชุดเดียวกันกับโหมด User
ประเภทที่ 2 คือ Unprivileged โหมด จะมีโหมดการทํางานย่อยเพียงโหมดเดียว เรียกว่า
• โหมด User เป็นโหมดการทํางานที่อยู่ภายในการทํางานของพวก Applications ต่างๆ

รูปที่ 3.3.2 แสดงลักษณะการทํางานของโหมดพื้นฐานที่ใช้ควบคุมในการทํางานในโปรเซสเซอร์


จากรูปที่ 3.3.2 สามารถอธิบายได้ว่าเมื่อโปรเซสเซอร์มีการทํางานอยู่ 2 โหมดหลัก คือ
โหมดพริวิเลดจ์ และโหมดอันพริวิเลดจ์ โดยเริ่มต้นจากการเปิดเครื่องเรียกว่า Power On Reset
โปรเซสเซอร์จะเริ่มต้นในโหมด Supervisor เมื่อโปรเซสเซอร์ทํางานชุดคําสั่งในข้อยกเว้น (Exception) Reset
เรียบร้อยแล้ว ตามรูปที่ 3.3.3 โปรเซสเซอร์จะทํางานฟังก์ชัน main ในลําดับถัดไป
หากระบบไม่มีระบบปฏิบัติการ (Operating System) ฟังก์ชันนี้จะทํางานอยู่ในโหมด User
หากระบบติดตั้งระบบปฏิบัติการ ฟังก์ชัน main ของ OS เพื่อบูท OS ขึ้นมาทํางานต่อไป เมื่อ OS พร้อมแล้ว
จะเปิดโอกาสให้โปรแกรมประยุกต์ (Application Code) ทํางานในโหมด User รันต่อไป จนเสร็จสิ้น
หากยังไม่เสร็จสิ้นแต่ต้องการความช่วยเหลือจาก OS โปรแกรมประยุกต์สามารถเรียกใช้ OS ผ่านกระบวนการ
System Call เพื่อให้ OS ช่วยงานโดยโปรเซสเซอร์จะต้องเปลี่ยนโหมดเป็นโหมด Supervisor มาทํางานต่อไป

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-26


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

การเริ่มต้นการทํางานของโปรเซสเซอร์ด้วยสัญญาณ Reset

รูปที่ 3.3.3 แสดงลําดับการจัดการของ Reset


จากรูปที่ 3.3.3 สามารถอธิบายได้ดังต่อไปนี้
1. เกิดสัญญาณ Reset ขึ้น
2. ฮาร์แวร์จะทําการ Load ค่า MSP (Main Stack Pointer) ซึ่งเก็บอยู่ที่ตําแหน่ง 0x00
ไปเก็บไว้ใน r13 โดยอัตโนมัติ
3. หลังจากนั้น PC จะเปลี่ยนค่าตามตําแหน่งที่เก็บอยู่ ณ ตําแหน่ง 0x04 เพื่อกระโดดไปทํางาน
ณ reset handler vector address เพื่อรันคําสั่งของ Reset handler
4. PC จะชี้ไปยังคําสั่งเริ่มต้นของ Reset handler แล้วรันต่อไปจนเสร็จสิ้น
5. หลังจากทําการจัดการ Exception เรียบร้อยแล้ว PC (r15)
จะถูกเปลี่ยนค่าไปยังตําแหน่งเริ่มต้นของฟังก์ชัน Main เพื่อที่จะทํางานตามปกติ

ข้อยกเว้นหรือ Exception มีหลายประเภท เช่น Reset, Non-maskable อินเตอร์รัพท์s (NMI),


Faults, PendSV, SVCall, อินเตอร์รัพท์ซิสติ๊ก (SysTick Interrupt), อินเตอร์รัพท์ภายนอก (External
Interrupt) โดย Exception จะทํางานในโหมดพริวิเลดจ์ทุกครั้งเสมอ อินเตอร์รัพท์นั้นเป็นส่วนหนึ่งของ
Exception จะมีการบันทึกและคืนค่า Registers (xPSR, PC, LR,R12, R3-R0) ของโปรเซสเซอร์โดยอัตโนมัติ
Handler นั้นจะถูกเขียนด้วยภาษา C

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-27


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

Vector Table สําหรับ ARMv7-M

รูปที่ 3.3.4 แสดง  Vector Table สําหรับ ARMv7-M โดยมี Vector Address แสดงในแต่ละช่อง
จากรูปที่ 3.3.4 สามารถอธิบายได้ดังต่อไปนี้
• Vector Address ลําดับแรกจะบรรจุ Initial Main SP
• ส่วน Vector Address ที่เหลือทั้งหมดจะทําการบรรจุ Exception Handlers
• Vector Table สามารถมี external อินเตอร์รัพท์ได้มากถึง 496 อินเตอร์รัพท์ รวม Vector
ที่ต้องกําหนดไว้อีก 16 ตําแหน่ง รวมทั้งหมดคือ 496+16 = 512 ตําแหน่งๆ ละ 4 ไบท์
รวมขนาดได้มากสุด เท่ากับ 2048 ไบท์
• Vector Table อาจจะมีการย้ายตําแหน่งได้
o โดยใช้ Vector Table Offset Register
o แต่ก็ยังคงใช้ตําแหน่งที่น้อยที่สุดของ Vector Table คือที่ 0x00 สําหรับการเริ่มต้น
Vector Table
• แต่ละ Exception จะมี Vector Number
o เพื่อใช้ในการควบคุม อินเตอร์รัพท์ และสถานะของ Register
เพื่อที่จะการตรวจสอบว่า Exception ชนิดนี้มีการใช้งานอยู่หรือไม่
• Vector Table สามารถสร้างขึ้นโดยใช้ภาษา C ในรูปของอะเรย์ (Array) ดังรูปที่ 3.3.5

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-28


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

รูปที่ 3.3.5 แสดง ตัวอย่างภาษา C ที่ใช้สร้าง Vector Table ได้

กระบวนการจัดการข้อยกเว้น (Exception Handling) อื่นๆ

รูปที่ 3.3.6 แสดงลําดับกระบวนการจัดการ Exception ที่เกิดขึ้น (ซ้าย) ระหว่างที่กําลังรันโปรแกรมหลัก


(ขวา) ขั้นตอนสําคัญต่างๆ ที่เกิดขึ้นก่อนจะรีเทิร์นกลับไปยังโปรแกรมประยุกต์

จากรูปที่ 3.3.6 จะแสดงให้เห็นว่า ถ้ามี Exception เกิดขึ้นระหว่างที่กําลังรันโปรแกรมหลัก ระบบจะ


มีขั้นตอนการทํางานดังต่อไปนี้
1. เก็บพัก (Save) สถานะของโปรเซสเซอร์ ณ ปัจจุบัน โดย
a. ทําการ Copy CPSR ไปยัง SPSR_<โหมด> ณ โหมดปัจจุบัน
b. เก็บ Return Address ไว้ใน LR_<โหมด>
c. เปลี่ยนแปลงค่ารีจิสเตอร์ LR ตามชนิดของ Exception ที่เกิดขึ้น

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-29


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

2. เปลี่ยนตําแหน่งของ PC ไปชี้ ณ หน่วยความจําเริ่มต้นของ Exception ที่เกิดขึ้น


โดยอ่านจากตาราง Vector Table ที่ได้กําหนดด้วยโปรแกรมในรูปที่ 3.3.5
พร้อมเปลี่ยนเป็นโหมดพริวิเลดจ์ตามโหมดย่อยๆ ตามที่กล่าวไปแล้ว
3. ดําเนินการทํางานตามคําสั่งในหน่วยความจําของ Exception ที่เกิดขึ้น
4. หลังจากทํางานตามคําสั่งแล้วเสร็จก็กลับไปทํางานตามปกติ โดย
a. ทําการคืนค่า CPSR จาก SPSR_<โหมด>
b. ทําการคืนค่า PC จาก LR_<โหมด>
c. เปลี่ยนโหมดของโปรเซสเซอร์กลับสู่โหมด User
โดยขั้นตอนที่ 1 และ 2 นั้นเกิดขึ้นอัตโนมัติโดยการทํางานของฮาร์ดแวร์เอง ส่วนขั้นตอนที่ 3 และ 4
นั้นเกิดขึ้นโดยการตอบสนองของ Software ที่โปรเซสเซอร์นั้นใช้

การจัดการอินเตอร์รัพท์หลายระดับ (Multiple Interrupt Handling)

รูปที่ 3.3.7 แสดงลําดับการทํางานของอินเตอร์รัพท์ Handling กรณีที่มีอินเตอร์รัพท์จํานวนหลายตัว


จากรูปที่ 3.3.7 สามารถอธิบายได้ว่าเมื่อเกิด IRQ2 กําลังทํางานอยู่ หากมีอินเตอร์รัพท์
เกิดขึ้นพร้อมกัน 2 อินเตอร์รัพท์ โดยอินเตอร์รัพท์แรก (IRQ1) เป็นอินเตอร์รัพท์ที่มี Priority ที่สูงกว่า IRQ2
และอีกอินเตอร์รัพท์ (IRQ3) เป็น อินเตอร์รัพท์ที่มี Priority ที่ต่ํากว่า IRQ2 โปรเซสเซอร์นั้นจะพักการทํา
IRQ2 ก่อน เพื่อมาทํางานให้กับอินเตอร์รัพท์ IRQ1 ที่มี Priority ที่สูงกว่า IRQ2 ก่อน
ซึ่งหากทํางานเสร็จแล้วก็จะกลับไปทํางาน IRQ2 ต่อ และหลังจากนั้นก็จะไปตอบสนองต่ออินเตอร์รัพท์ IRQ3
ที่มี Priority ที่ต่ํากว่า IRQ2 จนเสร็จสิ้น แล้วจึงรีเทิร์นกลับไปทํางานปกติ (Foreground) ซึ่งมี Priority
ระดับ Base CPU ซึ่งเป็นระดับต่ําที่สุด เพื่อกลับไปดําเนินการรันคําสั่งถัดจากตําแหน่งของคําสั่งที่ทําให้เกิด
อินเตอร์รัพท์ ราวกับว่าการทํางานปกติ Foreground นั้น ทํางานทุกอย่างราบเรียบโดยไม่มีอุปสรรคใดๆ เลย

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-30


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

ชุดของ ARM Register ในโหมดต่างๆ

รูปที่ 3.3.8 แสดงชุดของ ARM Register ใน โหมด ต่างๆ


จากรูปที่ 3.3.8 สามารถอธิบายได้ดังต่อไปนี้
• โหมด User จะใช้ Register ตั้งแต่ r0 - r15 และ CPSR ในการทํางานภายในโหมดตัวเอง
• โหมด IRQ จะใช้ Register ตั้งแต่ r13 - r14 และ SPSR ในการทํางานภายในโหมดตัวเอง
• โหมด FIQ จะใช้ Register ตั้งแต่ r8 - r14 และ SPSR ในการทํางานภายในโหมดตัวเอง
• โหมด Undef จะใช้ Register ตั้งแต่ r13 - r14 และ SPSR ในการทํางานภายในโหมดตัวเอง
• โหมด Abort จะใช้ Register ตั้งแต่ r13 - r14 และ SPSR ในการทํางานภายในโหมดตัวเอง
• โหมด SVC จะใช้ Register ตั้งแต่ r13 - r14 และ SPSR ในการทํางานภายในโหมดตัวเอง
3.4 สรุป
เครื่องคอมพิวเตอร์ทํางานตามคําสั่งภาษาเครื่องซึ่งแปลมาจากภาษาแอสเซมบลี และภาษาสูงตาม
ลําดับ โปรแกรมเมอร์ใช้ภาษาสูงและภาษาแอสเซมบลีในการพัฒนาโปรแกรม ก่อนจะรันโปรแกรม
เหล่านี้บนชิป ARM ได้ โปรแกรมเมอร์จะต้องใช้ซอฟต์แวร์แปลคําสั่งภาษาสูง ที่เรียกว่า คอมไพเลอร์
(Compiler) และภาษาแอสเซมบลีหรือที่เรียกว่า แอสเซมเบลอร์ (Assembler) ให้เป็นภาษาเครื่อง
ในรูปของเลขฐานสอง เพื่อให้โปรเซสเซอร์เข้าใจเลขฐานสองเหล่านั้นตามสถาปัตยกรรมภาษาเครื่องของ ARM
ภาษาเครื่องของ ARM มีลักษณะที่ง่าย แบ่งออกเป็นคําสั่งประเภทต่างๆ ดังนี้ คําสั่งประมวลผลข้อมูล (Data
Processing: DP) คําสั่งถ่ายโอนข้อมูล (Data Transfer: DT) คําสั่งการกระโดด (Branch: BR)
เพื่อความสะดวกในการเรียกใช้ฟังค์ชันและการรีเทิร์นกลับ และคําสั่งอื่นๆ ที่เกี่ยวข้องกับระบบปฏิบัติการ
เป็นต้น

ผศ.ดร.สุรินทร์ กิตติธรกุล หน้า 3-31

You might also like