ซึ่งจะทำหน้าที่ในการเก็บ Flag เพื่อรายงานและควบคุมการทำงานของ ARM7 CPU

โดยแสดง mode ตามนี้
*M4 => FIQ
*M3 => IRQ
*M2=>System
*M1=>User
*M0=>undefined instruction
เริ่มจาก 4 บิต สูงสุดนั้นเป็นส่วนของ Condition Code ซึ่งถูกกำหนดค่าด้วย Processor โดย CC นั้นจะทำการรายงานสถานะในประมวลผลข้อมูล ซึ่งมีด้วยกัน 4 สถานะ ติดลบ (Negative), ศูนย์(Zero), เกิดการทด (Carry) หรือ เกินความจุบิต (oVerflow) ส่วน 8 บิต ต่ำสุดสามารถถูกกำหนดจากโปรแกรมโดยแบ่งกลุ่มภายในออกเป็น 3ชุด
1.ชุด Interrupt Enable ซึ่งเป็น 2 บิตสูง ประกอบด้วย I, F เพื่อใช้ในการบอกว่ารับ/ไม่รับ Interrupt จากภายนอก ARM7 processor โดย I นั้นหมายถึง IRQ และ F คือ FIQ ซึ่งในตระกูล LPC2000 นั้นจะมีสาย Interrupt สองสายที่ใช้ในการเชื่อมต่อจากรอบๆข้าง ซึ่งจะกล่าวในส่วนต่อไป เราควรจะระวังเมื่อมีการยุ่งเกี่ยวกับสองบิตนี้ เพราะการปิดไม่รับ Interrupt ของสองบิตนี้จะใช้ 1 แทนที่จะใช้ 0
2.ชุด Instruction Type (THUMB -T) เป็น 1บิต ชุดกลาง เนื่องจากว่า ARM7 Processor มีรูปแบบของชุดคำสั่งอยู่ สองรูปแบบ โดยปกตินั้นชุดคำสั่งของ ARM จะมีขนาด 32 บิตและในแบบ THUMB จะมีขนาด 16 บิต เราสามารถทราบว่าโค้ดที่ทำงานอยู่ในแบบไหนได้จากบิตนี้ เราไม่ควรจะลอง Set/Clear บิตนี้เพื่อเปลี่ยนรูปแบบของชุดคำสั่ง เพราะควรจะศึกษากลไกการทำงานของบิตนั้น
3.ชุด Operating mode คือ 5บิตชุดต่ำสุด ARM7 นั้นมี mode ของการทำงานที่แตกต่างกันหลายๆแบบ เมื่อโปรแกรมของเราทำงานปกติก็จะทำงานอยู่ใน System & User mode ซึ่งสามารถเข้าใช้งาน Register ได้ตั้งแต่ R0-15 รวมถึง CPSR ด้วย แต่เมื่อ Exception (การดักจับ) พบว่าเกิดเหตุการณ์เช่น Interrupt, หน่วยความจำผิดพลาด หรือเกิด Software Interrupt ขึ้น ตัว Processor ก็จะทำการเปลี่ยน mode การทำงานไป ผลก็คือเรายังสามารถใช้งาน R0-12 และ 15 ได้ส่วน R13-14 ซึ่งก็คือ LR และ SP จะถูกจองขึ้นมาใหม่ นั่นแสดงว่าแต่ละ mode ก็จะ Stack และ Link Register เป็นของตัวเอง ส่วนใน Fast Interrupt (FIQ) mode นั้น เราจะแบ่ง Register อยู่สองกลุ่ม กลุ่มหนึ่งให้เข้าถึง อีกกลุ่มใช้สำหรับ FIQ นั้นหมายความว่าเราสามารถเข้าไปจัดการกับ Interrupt ได้โดยไม่ต้องผ่าน Stack
โดยแต่ละ mode นั้นแยกออกจากกัน ทำให้ต้องมี Register เพิ่มเติมเข้ามาช่วยเก็บค่าสถานะของโปรแกรม ซึ่งมีชื่อว่า Saved program status register (SPSR) โดยเมื่อเกิด Exception ขึ้นขณะทำงานอยู่ใน User mode ค่า CPSR จะถูกเก็บใน SPSR จนกว่า Exception code นั้นทำงานเสร็จก็จะนำค่า CPSR เดิมจาก SPSRกลับมาเก็บใน CPSR เพื่อกลับเข้าไปทำโปรแกรมใน User mode ต่อจากเดิม




สีน้ำเงิน - Register ที่สามารถเ้ข้าถึงได้ตามปกติ
สีไม่ใช้้่สีน้ำเงิน - Register ที่ใช้งานตามหน้าที่แตกต่างไปจากเดิมตาม Mode ที่ได้กล่าวไปแล้ว
ไม่มีความคิดเห็น:
แสดงความคิดเห็น