วันจันทร์ที่ 23 พฤศจิกายน พ.ศ. 2558

รูปแบบของคำสั่งและการบ่งตำแหน่งที่อยู่




          ในระบบคอมพิวเตอร์ จะทำงานกับข้อมูลหรือคำสั่งที่เป็นรหัสไบนารี ข้อมูลหรือคำสั่งแต่ละชุดจะประกอบด้วยรหัสไบนารีหลาย ๆ บิต อาจเป็น 8, 16 หรือ 32 บิต เรียงเข้าด้วยกันเราเรียกว่า 1 เวิร์ด ในโปรเซสเซอร์เวิร์ดหนึ่งเวิร์ดจะใช้เป็นรหัสแทนสิ่งต่อไปนี้ได้คือ เลขหนึ่งจำนวนซึ่งอาจมีค่าเป็นบวกหรือลบ ตำแหน่งในหน่วยความจำ อักษรหนึ่งตัวหรือสัญลักษณ์หนึ่งตัวและแทนคำสั่งการทำงาน ในบทนี้จะได้ศึกษารหัสที่ใช้แทนตัวอักษร ตัวเลขและสัญลักษณ์ รูปแบบของคำสั่งภาษาเครื่องที่เป็นรหัสไบนารี และรหัสที่ใช้บ่งตำแหน่งหน่วยความจำ

รหัสที่ใช้แทนอักขระ
          ตัวอักษร ตัวเลขและสัญลักษณ์ หรือที่เรียกว่าอักขระในไมโครคอมพิวเตอร์จะแทนด้วยรหัสไบนารี ทุกครั้งที่เรากดแป้นพิมพ์ เช่น ปุ่มอักษร A ระบบก็จะรับอักษร A เข้าไปและแปลงเป็นรหัสไบนารี (เข้ารหัส) 1 ไบต์ เป็นต้น ในตารางที่ 8.1 แสดงมาตรฐานการใช้รหัสไบนารีแทนอักขระที่นิยมแพร่หลายในระบบไมโครคอมพิวเตอร์เรียกว่ารหัส ASCII (อ่านว่า แอสกี้) ย่อมาจาก American Standard Code for Interchange จะใช้แทนทั้งสระ พยัญชนะ ตัวเลข สัญลักษณ์ ทั่วไป และอักษรที่ใช้ควบคุม เช่น LF คือ Line Feed หมายถึงให้เลื่อนไปบรรทัดถัดไป เป็นต้น

รูปแบบคำสั่ง
          ไมโครโปรเซสเซอร์ไม่ว่าจะผลิตจากบริษัทไหนก็แล้วแต่ จะมีชุดคำสั่งประจำไมโคร-โปรเซสเซอร์เบอร์นั้น เช่น 8080 ของบริษัทอินเทลก็จะมีชุดคำสั่งเฉพาะของ 8080 ขณะที่ 6800 ของ โมโตโรลาก็จะมีชุดคำสั่งเฉพาะของ 6800 เป็นต้น คำสั่ง 8080 จะมาใช้กับ 6800 ไม่ได้และในทางกลับกัน คำสั่งของ 6800 จะใช้กับ 8080 ก็ไม่ได้ อย่างไรก็ดี ไม่ว่าจะเป็นคำสั่งของไมโครโปรเซสเซอร์เบอร์ใด พื้นฐานก็คือคำสั่งจะอยู่ในลักษณะไบนารี คำสั่งหนึ่งคำสั่งอาจประกอบด้วยไบต์เดียว สองไบต์ สามไบต์ หรือสี่ไบต์แล้วแต่กรณี ไบต์แรกของคำสั่งเรียกว่า โอเปอเรชันโค้ด (operation code) หรือที่เรียกสั้น ๆ ว่า ออปโค้ด (op code) เพราะไบต์นี้จะเป็นไบต์ที่บอกไมโครโปรเซสเซอร์ว่าเป็นคำสั่งอะไร ส่วนไบต์ที่เหลืออาจเป็นข้อมูลหรือบ่งตำแหน่งข้อมูลว่าอยู่ที่ไหน (อาจจะอยู่ในรีจิสเตอร์ภายในไมโครโปรเซสเซอร์ ในหน่วยความจำหรือในหน่วยรับส่งข้อมูลเข้า/ออก) ไบต์ส่วนที่เหลือกนี้เรียกว่า โอเปอแรนด์ (operand)

ชนิดของตัวถูกดำเนินการ
          คำสั่งเครื่องทำงานกับข้อมูลซึ่งสามารถแบ่งออกตามชนิดหรือประเภทได้ดังนี้
1) ตำแหน่งที่อยู่ (address)
            2) ตัวเลข (Number)
            3) ตัวอักษร (Character)
            4) ข้อมูลตรรกะ (Logical data)
          อันที่จริงตำแหน่งที่อยู่ก็เป็นข้อมูลชนิดหนึ่ง ในหลายกรณีมีการคำนวณเกิดขึ้นกับตัวถูกกระทำที่ถูกอ้างอิงในคำสั่งเครื่อง เพื่อกำหนดตำแหน่งที่อยู่ในหน่วยความจำหลัก หรือในหน่วยความจำเสมือน ในกรณีเช่นนี้ ตำแหน่งที่อยู่จะถูกคำนวณในลักษณะเดียวกันกับเลขแบบไม่มีเครื่องหมาย
ข้อมูลชนิดอื่นได้แก่ ตัวเลข ตัวอักษร และข้อมูลตรรกะ ซึ่งจะอธิบายถึงรายละเอียดในลำดับต่อไป นอกจากนี้แล้ว คอมพิวเตอร์บางเครื่องยังได้กำหนดข้อมูลหรือโครงสร้างข้อมูลชนิดพิเศษขึ้นใช้งาน เช่น ข้อมูลชนิดที่สามารถทำงานกับตัวถูกกระทำที่เป็นกลุ่มตัวอักษร (string) ได้โดยตรง

การบ่งตำแหน่งที่อยู่
          เมื่อ ซีพียู จะทำงานตามคำสั่ง ที่เขียนไว้ในหน่วยความจำ จะต้องนำคำสั่งจากหน่วยความจำถ่ายลงสู่ ซีพียูแล้วจึงจะประมวลผลตามวัฏจักรดังได้กล่าวมาแล้ว แต่ละคำสั่งจะมี ออปโค้ด เป็นไบต์แรก แล้วตามด้วยข้อมูลหรือตำแหน่งข้อมูลในไบต์ที่สองและสาม เมื่อซีพียู แปลรหัสออปโค้ดแล้วจะทราบว่า จะต้องไปนำข้อมูลจากที่ใดมาปฏิบัติต่อ เพื่อให้คำสั่งนั้นแล้วเสร็จ ในหัวข้อนี้จะกล่าวถึงวิธีต่าง ๆ ที่ซีพียูไปนำข้อมูลมาจากหน่วยความจำวิธีดังกล่าวนี้เรียกว่า การแบ่งตำแหน่งที่อยู่หรือ แอดเดรสซิงโหมด (Addressing mode)

          สรุปคือ ข้อมูลหรือคำสั่งที่จะนำเข้าประมวลผลในระบบคอมพิวเตอร์จะถูกเปลี่ยนให้เป็นรหัส ไบนารีก่อน ระบบคอมพิวเตอร์จึงจะสามารถรับรู้ได้ สำหรับข้อมูลที่เป็นตัวอักษร ตัวเลข และสัญลักษณ์ต่าง ๆ จะถูกแทนด้วย รหัส IRA หรือที่เรารู้จักในชื่อรหัส ASCII รหัส ASCII มีขนาด 7 บิต เมื่อเพิ่มพารีตี้บิตเข้าไปอีกหนึ่งบิตจะเป็นรหัส 8 บิต (1 ไบต์)
คำสั่งหนึ่งคำสั่ง อาจเป็นคำสั่ง 1 ไบต์ 2 ไบต์ หรือ 3 ไบต์ โดยจะมีไบต์แรกเป็นคำสั่งงาน เรียกว่า ออปโค้ด ส่วนไบต์ที่เหลือจะเป็นข้อมูลหรือบ่งบอกตำแหน่งว่าข้อมูลอยู่ที่ไหน เรียกไบต์ส่วนที่เหลือว่าโอเปอร์แรนด์ ในการเขียนคำสั่งที่เป็นออปโค้ด จะนิยมเขียนด้วยภาษาสัญลักษณ์แทนการใช้เลขไบนารี ซึ่งเราจะเรียกคำสั่งย่อยเหล่านี้ว่านีโมนิก (mnemonic) ส่วนค่าของข้อมูลและตำแหน่งที่อยู่จะถูกเขียนด้วยรหัสเลขฐานสิบหก คำสั่งสามารถที่จะแบ่งออกได้ 4 กลุ่ม คือ คำสั่งประมวลผลข้อมูล คำสั่งเกี่ยวกับหน่วยความจำ คำสั่งเกี่ยวกับไอโอและคำสั่งควบคุมการทำงาน
การบ่งตำแหน่งที่อยู่ หรือ Addressing mode คือการอ้างถึงตำแหน่งที่อยู่ของข้อมูลในหน่วยความจำซึ่งมีวิธีอ้างถึงหลายวิธี แต่ละวิธีจะมีข้อดีข้อด้อยแตกต่างกัน ซึ่งมีดังนี้ การบ่งตำแหน่งทันที การบ่งตำแหน่งโดยตรง การบ่งตำแหน่งทางอ้อม การบ่งตำแหน่งผ่านรีจีสเตอร์ การบ่งตำแหน่งผ่านรีจีสเตอร์ทางอ้อม การบ่งตำแหน่งแบบดีสเพลซเมนต์ และการบ่งตำแหน่งแบบใช้สแต็ก


โครงสร้างและหน้าที่ของซีพียู





         ซีพียูหรือหน่วยประมวลผลกลาง อาจจะเป็นโปรเชสเซอร์เพียงซีพียูเดียวหรืออาจเป็นโปรเชสเซอร์ต่อร่วมกับชิ้นส่วนไอซีอื่น ๆ ก็ได้ ในบทนี้จะได้อธิบายถึงโครงสร้างตลอดจนกลไกภายในของซีพียู เพื่อเป็นพื้นฐานที่จะนำไปใช้ในการศึกษาสถาปัตยกรรมของซีพียูในระดับสูงต่อไป เนื้อหาจะเริ่มต้นด้วยการอธิบายการจัดองค์ประกอบการภายในโปรเชสเซอร์ รีจีสเตอร์ซึ่งเป็นเสมือนหน่วยความจำที่เก็บอยู่ภายในโปรเชสเซอร์ ตัวอย่างการจัดองค์ประกอบของรีจีสเตอร์ใน โปรเชสเซอร์รุ่นต่าง ๆ จากนั้นจะกล่าวถึงวัฎจักรหรือวงรอบของคำสั่ง ขั้นตอนการทำงานของซีพียูในแต่ละวัฎจักร และสุดท้ายจะอธิบายการไหลเวียนของข้อมูลในขณะที่โปรเชสเซอร์ทำงาน ในแต่ละวัฏจักร เพื่อเสริมความเข้าใจการทำงานภายในของซีพียูให้มากขึ้น

โครงสร้างภายในซีพียู
          ซีพียูจะทำงานตามคำสั่งที่ผู้ใช้ป้อนเข้าไป ซึ่งคำสั่งดังกล่าวจะถูกเก็บในหน่วย ความจำหลัก ดังนั้นซีพียูจะต้องทำงานดังต่อไปนี้
1) ดึงคำสั่งเข้ามา (fetch instruction) คือการที่ซีพียูอ่านคำสั่งมาจากหน่วยความจำหลักเข้ามาเก็บไว้ภายในตัวซีพียู
2) แปลความหมายของคำสั่ง (interpret instruction) คำสั่งจะถูกแปลความหมาย เพื่อจะได้ทราบว่า คำสั่งนั้นต้องการให้ทำงานอย่างใด 3) ดึงข้อมูล (fetch data) การประมวลผลคำสั่งเครื่องหนึ่งคำสั่ง อาจจำเป็นต้องอ่านข้อมูลจากหน่วยความจำหลักหรืออุปกรณ์ไอโอเข้ามาด้วย 4) ประมวลผลข้อมูล (process data) การประมวลผลคำสั่งอาจเกี่ยวข้องกับการทำงานทางคณิตศาสตร์หรือตรรกะ 5) การบันทึกข้อมูล (write data) ผลการประมวลผลข้อมูลอาจต้องการให้บันทึกผลลัพธ์ที่ได้ไว้ในหน่วยความจำหลักหรืออุปกรณ์ไอโอ
          จากการทำงานดังกล่าว ซีพียูจะมีการติดต่อกับอุปกรณ์ภายนอกรอบ ๆ ตัว โดยจะติดต่อผ่านระบบบัส ซึ่งได้แก่ บัสตำแหน่ง บัสข้อมูล และบัสควบคุมในการประมวลผลคำสั่งแต่ละครั้งจะต้องดึงคำสั่งเข้ามาเก็บในตัวซีพียู หรืออาจต้องดึงข้อมูลเข้ามา ซีพียูอาจต้องจำตำแหน่งที่อยู่ของคำสั่งหรือข้อมูลปัจจุบัน ดังนั้นซีพียูจะต้องจัดเก็บคำสั่งข้อมูลและตำแหน่งไว้ชั่วคราวขณะที่คำสั่งนั้นกำลังได้รับการประมวลผล นั่นคือซีพียูมีความจำเป็นที่จะต้องมีหน่วยความจำไว้ภายในตัวซีพียู ซึ่งเราเรียกหน่วยความจำนี้ว่า รีจีสเตอร์ สำหรับการประมวลผลข้อมูลก็จะมีหน่วยประมวลผล ซึ่งเรียกว่า หน่วยคำนวณและเปรียบเทียบหรือ เอแอลยู (ALU : Arithemetic and logic unit) ทำหน้าที่คำนวณทางคณิตศาสตร์และตรรกะ ในขณะซีพียูมีการทำงานต่าง ๆ ดังกล่าว ก็จะมีหน่วยควบคุมทำหน้าที่ควบคุมการเคลื่อนย้ายข้อมูลและคำสั่งเข้าและออกจากซีพียู และควบคุมการทำงานของหน่วย เอแอลยู

การจัดองค์ประกอบของรีจีสเตอร์ภายในซีพียู
          การแบ่งกลุ่มรีจีสเตอร์อาจจะแบ่งได้หลายวิธี สำหรับในบทนี้จะแบ่งออกเป็นสองกลุ่มคือ
1) รีจีสเตอร์ที่ผู้ใช้มองเห็นได้ รีจีสเตอร์ในกลุ่มนี้อนุญาตให้คำสั่งในโปรแกรมสามารถลดการอ้างอิงข้อมูลในหน่วยความจำหลัก โดยนำรีจีสเตอร์มาใช้งานแทน 
2) รีจีสเตอร์สำหรับการควบคุมและรายงานสถานะการทำงาน รีจีสเตอร์ในกลุ่มนี้ถูกนำไปใช้โดยหน่วยควบคุม เพื่อควบคุมการทำงานของซีพียู และถูกใช้โดยคำสั่งพิเศษของระบบปฏิบัติการในการควบคุมการประมวลผลของโปรแกรม

         สรุปคือ ซีพียูหรือหน่วยประมวลผลกลาง ถือว่าเป็นสมองของระบบคอมพิวเตอร์มีหน้าที่หลัก ๆ อยู่ 5 อย่างคือ ดึงคำสั่งเข้า แปลความหมายคำสั่ง ดึงข้อมูลเข้า ประมวลผลข้อมูล และบันทึกข้อมูล จากการที่มีหน้าที่ดังกล่าวจึงทำให้โครงสร้างภายในต้องประกอบด้วย รีจีสเตอร์ ซึ่งเป็นหน่วยความจำขนาดเล็กที่จะเก็บคำสั่งและข้อมูล ต้องมีหน่วยคำนวณทางคณิตศาสตร์และตรรกะที่เรียกว่า ALU และต้องมีหน่วยควบคุม เพื่อควบคุมให้องค์ประกอบทุกส่วนทำงานสัมพันธ์กัน
         รีจีสเตอร์อาจแบ่งได้ 2 กลุ่ม คือ กลุ่มของรีจีสเตอร์ที่ผู้ใช้มองเห็น ซึ่งรีจีสเตอร์กลุ่มนี้ จะอนุญาตให้ใช้คำสั่งภาษาเครื่องควบคุมและใช้งานผ่านการประมวลผลโดยซีพียู ได้แก่ รีจีสเตอร์ใช้งานทั่วไป รีจีสเตอร์เก็บตำแหน่งที่อยู่ เป็นต้น อีกกลุ่มหนึ่งคือรีจีสเตอร์สำหรับการควบคุมและรายงานสถานะ ได้แก่ รีจีสเตอร์ที่เก็บที่อยู่ของคำสั่งที่จะประมวลผลต่อไป (PC) รีจีสเตอร์เก็บคำสั่งที่อ่านมาจากหน่วยความจำหลัก (IR), MAR, MBR รวมทั้งกลุ่มที่เรียกว่า PSW