Professional Documents
Culture Documents
บทที่ 3
สถาปัตยกรรมชุดคําสั่ง
ARM เป็นโปรเซสเซอร์ในเครื่องคอมพิวเตอร์ชนิดฝังตัวที่ได้รับความนิยมมากที่สุดในโลกในปีค.ศ.
2008 มีการใช้งานโปรเซสเซอร์ ARM จํานวน 4 พันล้านตัว โดยมีส่วนแบ่งทางการตลาดของระบบฝังตัวได้แก่
โทรศัพท์เคลื่อนที่ ทีวี อุปกรณ์เครือข่าย กล้อง พรินเตอร์ เป็นต้น ในบทนี้ผู้อ่านจะได้เรียนรู้การทํางานของ
ARM ตามวัตถุประสงค์ต่อไปนี้
วัตถุประสงค์
} เข้าใจสถาปัตยกรรมภาษา Assembly ของ ARM Version 7
} เข้าใจรูปแบบคําสั่งภาษา Assembly ประเภทต่างๆ ของ ARM
} เข้าใจการเรียกใช้ฟังก์ชันและการรีเทิร์นกลับโดยใช้คําสั่งของ ARM
} โหมดการทำงานของ ARM Cortex M3
} เข้าใจการตอบสนองต่อ Exception และ อินเตอร์รัพท์ ของ ARM Cortex M3
รูปที่ 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 นั่นเอง
สถาปัตยกรรมชุดคําสั่งของ ARM
ขนาดข้อมูล และชุดคําสั่ง
ARM จะใช้ชุดคําสั่ง 2 เวอร์ชันคือ เวอร์ชันปกติแต่ละคําสั่งยาว 32 บิตและเวอร์ชัน Thumb
แต่ละคําสั่งยาว 16 บิต นอกจากนี้ Jazelle cores สามารถดําเนินการ Java bytecode ความหมายต่างๆ
ในการใช้ ARM
• Byte หมายถึง 8 บิต
• Halfword หมายถึง 16 บิต (2 ไบท์)
• Word หมายถึง 32 บิต (4 ไบท์)
รายละเอียดสถาปัตยกรรมคําสั่ง ARMv7
โปรเซสเซอร์จะต้องอ่านข้อมูลจากหน่วยความจําเข้ามาเก็บในรีจิสเตอร์ การอ่านเขียนข้อมูลจาก
หน่วยความจํา ต้องอาศัยคําสั่งประเภท 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
; ในหน่วยความจํา
และ (AND)
ใช้สําหรับเลือกกระทําต่อบิตที่ต้องการ
AND r5, r1, r2 ; reg r5 = reg r1® r2
ตัวอย่างคําสั่งคณิตศาสตร์
โครงสร้างคําสั่งคณิตศาสตร์และประมวลผล
ตัวอย่างการใช้งานคําสั่งคณิตศาสตร์และประมวลผล
• g = h + A[8];
o r1 เก็บค่า g
o r2 เก็บค่า h
o r3 เก็บค่าแอดเดรสเริ่มต้น (base address) ของอะเรย์ A
o r5 เป็นรีจิสเตอร์สําหรับเก็บค่าชั่วคราว
o เมื่อคอมไพล์ด้วยภาษาของ ARM
§ Index 8 ที่มีขนาดของ offset เป็น 32
• ภาษา C:
while (i==j) {
i = i+1; ;loop body
}
§ f, g,h,i,j ถูกโหลดค่าเข้ามาเก็บในรีจิสเตอร์: r0, r1,..r4 ตามลําดับ
• เมื่อคอมไพล์เป็นแอสเซมบลีของ ARM:
การคอมไพล์จากภาษาซีให้กลายภาษาแอสแซมบลีของการวนรอบ
จากรูปที่ 3.2.15 คําสั่ง branch with link (BL) คล้ายกับคําสั่ง Branch (B) แต่ คําสั่ง BL จะเก็บค่า
PC ซึ่งชี้ไปยังแอดเดรสของคําสั่งถัดไป ในรีจิสเตอร์ LR (Link Return)
เพื่อใช้รีเทิร์นกลับหลังจากที่ทํางานคําสั่งต่างๆ ใน subroutine (function) เสร็จสิ้นแล้ว
ตัวแปรโลคอล (Local Variables) และสแต็กเฟรม (Stack Frame)
การเริ่มต้นการทํางานของโปรเซสเซอร์ด้วยสัญญาณ Reset
รูปที่ 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