สิ่งที่เกี่ยวข้อง

วันศุกร์ที่ ๒๗ กรกฎาคม พ.ศ. ๒๕๕๐

ARM7TDMI Core - 6 Instruction Set

6 Instruction Set

ตอนนี้เรามีพอที่จะเข้าใจสถาปัตยกรรมของ ARM7 ดังนั้นเราจึงสามารถที่ศึกษาเกี่ยวกับชุดคำสั่ง แม้ว่าจะนิยมใช้ภาษา C และไม่ค่อยสนใจภาษา Assamly อย่างไรก็ตาม การที่เรามีความเข้าใจถึง Machine code ก็จะทำให้เราสามารถพัฒนางานได้อย่างมีประสิทธิภาพ แต่ก่อนที่เราจะกล่าวถึงชุดคำสั่งของ ARM7 มีเรื่องสำคัญที่ต้องอธิบายก่อน เนื่องจาก ARM7 Processor นั้นมีชุดคำสั่งอยู่สองแบบ คือ ชุดคำสั่ง ARM ซึ่งมีขนาด 32 บิต ซึ่งเราจะทำการเรียกอีกอย่างว่า ชุดคำสั่ง Word และ อีกชุดคำสั่งหนึ่งนั้นคือ THUMB ซึ่งมีขนาดลดลงเป็น 16 บิต

…BL

ARM7 นั้นถูกออกแบบมาให้สามารถทำงานได้แบบ Big-endian หรือ Little-endian, MSB จะถูกเก็บไว้ที่บิตอันดับสูง หรือ บิตอันดับต่ำ ตามลำดับ บางทีเราอาจเคยได้ยินว่าโปรเซสเซอร์ในตระกูล LPC2000 นั้นทำงานแบบ Little-endian เท่านั้น อาจเนื่องมาจากที่มันเป็นการง่ายที่จะให้มันทำงานแบบนั้นและมักำหนดมาอย่างนี้ แต่ว่าจริงๆแล้ว ตัวแปลภาษาของ ARM7 นั้นสามารถทำการแปลโค้ดได้ทั้ง Big-endian หรือ Little-endian ด้วยการกำหนดที่ถูกต้อง

...PRE

เรื่องหนึ่งที่ได้รับความสนใจมากเกี่ยวกับชุดคำสั่งของ ARM คือ จะมีเงื่อนไขในการเข้าทำงาน ซึ่งในไมโครโปรเซสเซอร์ทั่วไปนั้นจะมีการตรวจสอบ(เงื่อนไข) ในคำสั่ง Brach หรือในการทดสอบบิตว่า Set หรือไม่เท่านั้น แต่สำหรับชุดคำสั่งของ ARM นั้นจะมี 4 บิตที่สูงสุดซึ่งจะใช้ในการเปรียบเทียบกับค่าใน CC ของ CPSR ถ้าหากไม่ตรงกัน คำสั่งนั้นจะไม่ทำงานและผ่านเข้าไปยัง Pipeline ด้วยสถานะ NOP (No operation)

ดังนั้นความเป็นไปได้ของการประมวลผลในคำสั่งต่างๆ จึงขึ้นอยู่กับ CC ใน CPSR ซึ่งมีขนาด 4 บิต อย่างเช่นคำสั่งพื้นฐานในภาษา Assambly อย่างเช่น MOV หรือ ADD จะสามารถมีผลที่จะเกิดขึ้นกับ CC ได้ 16 กรณี (2^4 -จาก 4 บิตสูงสุดที่ใช้ในการเทียบกับ CC : 4 บิตนี้อาจเรียกว่าเป็น Prefix ของคำสั่งก็ได้ เพราะมันอยู่หน้าคำสั่ง )

... ตาราง


EQMOV R1, #0x00800000

นั้นจะทำการส่งค่า 0x00800000 เข้าไปยัง R1 ถ้าหากสถานะสุดท้ายของการประมวลผลครั้งล่าสุดคือ เท่ากัน (Z-bit ถูก Set ไว้) คำสั่งนี้สามารถใช้ Prefix มาช่วยเทียบ CC ได้ทันที ซึ่งเป็นการทำให้คำสั่งเข้าทำงานผ่าน Pipeline ได้อย่างราบรื่น นอกจากนี้บ่อยครั้งเมื่อมีการ Branch หรือ Jump ก็จะส่งผลต่อ Pipeline ด้วยทั้งการ Flush และ ต้องถูก Refill จึงทำให้ประสิทธิภาพโดยรวมลดลง เราจึงได้แก้ปัญหานี้ด้วยการทำจุด Break-even ขึ้น ขณะที่เกิดการ Flush แล้ว Refill ด้วยการใส่ NOP เข้าไปใน Pipeline จากนั้นจึงค่อยทำงานต่อ สามคำสั่งต้อไปนี้เป็นตัวอย่างที่จะเกิด Break-even ขึ้น

if(x<100){>

x++;

}

ซึ่งจะทำให้คำสั่ง ARM มีประสิทธิภาพอย่างมาก เมื่อมีการใช้คำสั่งที่เป็นเงื่อนไข

กลุ่มคำสั่งหลักๆของชุดคำสั่ง ARM สามารถแบ่งได้ หกกลุ่ม Branching, Data Processing, Data Transfer, Block Transfer, Multiply และ Software Interrupt



ไม่มีความคิดเห็น:

ผู้สนับสนุน

จัดตามกลุ่ม