วันพฤหัสบดีที่ 6 ตุลาคม พ.ศ. 2554

แบบฝึกหัดท้ายบทที่ 8 อ.วิทยา

ความเป็นมาของภาษา assembly

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

ตารางแสดงรหัสดิจิตอลและความหมาย
รหัส
ความหมาย
0 1 0 0 0 0 1 1
1 0 0 0 0 0 0 1
ย้ายข้อมูล 81H ไปเก็บที่รีจิสเตอร์ชื่อ A1

1 0 0 1 0 1 1 0
ลบข้อมูลที่เก็บในรีจิสเตอร์ A1 ด้วยหนึ่ง
0 1 1 1 0 0 1 1
0 0 0 1 0 0 0 0
0 0 1 1 0 1 0 0
นำข้อมูล 3412H ไปเก็บที่รีจิสเตอร์ HL
1 1 0 0 1 1 1 1
ลบข้อมูลที่อยู่ในรีจีสเตอร์ A1 ด้วยรีจิสเตอร์ A2

รหัสเครื่อง (Machine Code) ที่มีความหมายสั่งการคอมพิวเตอร์ แต่ละคำสั่งอาจเปรียบได้เหมือนกับประโยคหนึ่ง ๆ ในภาษาของมนุษย์ ถ้านำคำสั่งหลายคำสั่งมาเรียบเรียงต่อกัน ก็จะสามารถอธิบายความต้องการหรือการทำงานที่ซับซ้อนได้ กระบวนการเหล่านี้คือการเขียบโปรแกรมนั่นเอง โปรแกรมทีประกอบด้วยรหัสดิจิตอลเช่นนี้เรียกว่า โปรแกรมภาษาเครื่อง (Machine Language Program)

ตารางแสดงโปรแกรมภาษาเครื่องในรูปแบบไบนารี
0 1 0 0 0 0 1 1
1 0 0 0 0 0 0 1
1 0 0 1 0 1 1 0
1 0 1 1 0 0 0 0
0 1 1 1 0 0 0 0
0 0 0 1 1 1 0 0
1 1 0 0 0 0 0 1

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

ตารางแสดงการแทนรหัสไบนารีด้วยรหัสฐานสิบหก
รหัสฐานสอง
รหัสฐานสิบหก
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0
123456789ABCDEF
ดังนั้นโปรแกรมเลขฐานสอง จึงสามารถเขียนในรูปเลขฐานสิบหกได้ดังนี้

ตารางโปรแกรมภาษาเครื่องในรูปแบบเลขฐานสิบหก
รหัสฐานสอง
รหัสฐานสิบหก
0 1 0 0 0 0 1 1
1 0 0 0 0 0 0 1
1 0 0 1 0 1 1 0
1 0 1 1 0 0 0 0
0 1 1 1 0 0 0 0
0 0 0 1 1 1 0 0
1 1 0 0 0 0 0 1
43H
81H
96H
BOH
70H
1CH
C1H

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

ตารางแสดงรหัสมีโมนิคและความหมาย
รหัสนีโมนิค
ความหมาย
INC A1
MOV A1, A2
DIV A2, A3
CPA
INCrease register A1 with 1
MOVe data form register A1 to A2
DIVide register A2 with A3
ComPlement register A

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


สถาปัตยกรรมของไมโครโปรเซสเซอร์ (Microprocessor’s Architecture)
ในระบบคอมพิวเตอร์ อุปกรณ์ที่ทำหน้าที่หลักในการควบคุมการทำงานทั้งระบบ การคำนวณหลักและการติดต่อกับหน่วยความจำหลัก (Main Memory) คือ ซีพียู (CPU : Cemtral Processing Unit) ซึ่งถ้าเป็นเครื่องไมโครคอมพิวเตอร์ อุปกรณ์ตัวนี้ก็คือไมโครโปรเซสเซอร์ คำว่า “ ซีพียู ” และ “ ไมโครโปรเซสเซอร์ ” ในเครื่องไมโครคอมพิวเตอร์จึงอาจใช้แทนกันได้ด้วยเหตุผลนี้
การศึกษาสถาปัตยกรรมของซีพียูมีจุดประสงค์ เพื่อให้รู้จัถึงองค์ประกอบภายในซีพียูที่ผู้เขียนโปรแกรมสามารถเขียนคำสั่งไปควบคุมการทำงานได้ ( เรียกรวมว่า Software/Programming Model) เช่น รีจิสเตอร์ (Registers) ต่าง ๆ วิธีการอ้างตำแหน่งหน่วยความจำ (Addressing Modes) และชุดคำสั่ง ( Instructions Set) ตลอดจนการทำงานทั่วไปของซีพียู และรูปแบบข้อมูลที่ไมโครโปรเซสเซอร์นั้นมีคำสั่งไว้ทำงานด้วย

อุปกรณ์ที่ประกอบกันเป็นระบบคอมพิวเตอร์
การทำงานบางอย่างต้องใช้ภาษาแอสเซมบลี เพราะต้องเกี่ยวข้องกับวงจรไฟฟ้าที่ประกอบกันขึ้นมาเป็นระบบคอมพิวเตอร์ การเขียนโปรแกรมเป็นภาษาสูงไม่สามารถทำได้ หรือทำได้แต่ไม่มีประสิทธิภาพวงจรไฟฟ้าหรืออุปกรณืไฟฟ้าที่ประกอบกับซีพียูรวมกันเป็นระบบคอมพิวเตอร์ ได้แก่ หน่วยความจำ หน่วยรับส่งข้อมูล เป็นต้น การเขียนโปรแกรมสำหรับงานบางอย่างต้องการความรู้ละเอียดถึงขนาดต้องรู้หมายเลขของพอร์ต (Port) ที่รับส่งข้อมูล ต้องการรู้ถึงเทคนิคการรับส่งข้อมูลว่าทำแบบใด และต้องรู้ช่วงเวลาที่ใช้ในการทำงานแต่ละขั้นตอนอย่างละเอียด
สำหรับระบบที่ซับซ้อน เช่น เครื่องไมโครคอมพิวเตอร์ไอบีเอ็มพีซี การติดต่อระหว่างอุปกรณ์กับซีพียูจะทำผ่านอุปกรณ์ควบคุมที่โปรแกรมได้ (Programmable Controller) หลายตัว ตัวอย่างเช่น ตัวควบคุมการส่งข้อมูลแบบตรง (DMA Controller) ตัวควบคุมการขออินเทอรัปต์ (Interrupt Controller) นาฬิกา (Timer; ไม่ใช่สัญญาณนาฬิกา CLK) ตัวควบคุมการส่งข้อมูลแบบขนานและอนุกรม ตัวควบคุมการแสดงผลทางจอภาพ ตัวควบคุมการเขียนอ่านดิสก์ไดรฟ์ เป็นต้น ผู้เขียนโปรแกรมต้องศึกษาการทำงานของอุปกรณ์เหล่านี้ด้วย จึงจะสามารถใช้ความสามารถของระบบคอมพิวเตอร์ได้อย่างเต็มที่

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

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

แสดงความคิดเห็น