วันพฤหัสบดีที่ 13 สิงหาคม พ.ศ. 2552

ASSEMBLY LANGUAGE

ภาษาแอสแซมบลี

ในการสั่งงานให้คอมพิวเตอร์ทำงานใด ๆ นั้น จะต้องเขียนโปรแกรมสั่งงานโดยใช้ภาษาคอมพิวเตอร์ (computer language) แต่เนื่องจากคอมพิวเตอร์เป็นอุปกรณ์ทางอิเล็กทรอนิกส์ การที่จะให้คอมพิวเตอร์เข้าใจการทำงานต่างๆ จะต้องมีการแปลภาษาคอมพิวเตอร์ให้เป็นรหัสทางไฟฟ้าที่คอมพิวเตอร์สามารถเข้าใจได้ที่เรียกว่ารหัสภาษาเครื่อง (machine language)
ภาษาคอมพิวเตอร์อาจแบ่งออกเป็นสองประเภทใหญ่ๆ คือ ภาษาระดับสูง (High Level Language) และภาษาระดับต่ำ(Low Level Language) โดยภาษาระดับสูงเป็นชุดคำสั่งที่มีรูปแบบเป็นภาษาอังกฤษที่คล้ายกับการใช้งานในชีวิตประจำวันสำหรับภาษาระดับต่ำ จะเป็นภาษาที่ขึ้นกับหน่วยประมวลผลของคอมพิวเตอร์หรือ CPU โดยนำรหัสภาษาเครื่องที่คอมพิวเตอร์เข้าใจ ซึ่งอยู่ในรูปเลขฐานสองมาแทนด้วยตัวอักษรภาษาอังกฤษที่เรียกว่านีโมนิก (mnemonic) X
ภาษาที่ใช้รหัสนีโมนิกในการเขียนโปรแกรมเรียกว่า ภาษาแอสเซมบลี (assembly language) ซึ่งเป็นภาษาระดับต่ำ แต่เครื่องคอมพิวเตอร์ไม่สามารถเข้าใจรหัสนี้ได้ จึงต้องมีการแปลภาษาแอสเซมบลีให้เป็นภาษาที่เครื่องเข้าใจโดยใช้ตัวแปลภาษาที่เรียกว่า แอสเซมเบลอร์ (assembler) โดยรหัสนีโมนิกที่ใช้จะขึ้นกับ CPU แต่ละตระกูลด้วย ในการเขียนโปรแกรมภาษาแอสเซมบลี ผู้เขียนจะต้องเข้าใจสถาปัตยกรรมของไมโครโปรเซสเซอร์ที่ใช้กับคอมพิวเตอร์รุ่นนั้นๆ เข้าใจการใช้งาน รีจิสเตอร์แต่ละตัวว่ามีหน้าที่อย่างไร และเมื่อคอมพิวเตอร์ทำงานแต่ละคำสั่งเสร็จจะมีผลต่อรีจิสเตอร์ใดบ้าง ถ้าเขียนโปรแกรมโดยใช้ภาษาแอสเซมบลีจะทำให้โปรแกรมใช้หน่วยความจำน้อยกว่าและทำงานได้เร็วกว่าภาษาระดับสูง


แอสเซมเบลอร์
โปรแกรมใช้หน่วยความจำน้อย
ภาษาแอสเซมบลี

คอมไพเลอร์
โปรแกรมใช้หน่วยความจำมาก
ภาษาระดับสูง
รูป แสดงการเปรียบเทียบขนาดของโปรแกรมและเวลาการทำงาน


ใช้โปรแกรมแปลภาษาแอสเซมบลี
ในการเขียนโปรแกรมขั้นแรกจะสร้างไฟล์ภาษาแอสเซมบลีในรูปของดปรแกรมต้นฉบับ(source program) จากนั้นจะทำ Assembling และ Linking เพื่อแปลภาษาแอสเซมบลีที่อยู่ในรูปรหัสนีโมนิกให้เป็นรหัสภาษาเครื่อง (op-cord) เพื่อให้สามารถรันโปรแกรมต้นฉบับให้เป็นภาษาเครื่อง โดยในการแปลงนี้จะได้ไฟล์ใหม่ 3 ไฟล์คือ
- Object File จะเป็นไฟล์ที่มีนามสกุล .OBJ ซึ่งจะประกอบด้วยภาษาเครื่องที่ใช้สำหรับแปลงเป็นไฟล์ .EXE (Executable File) โดยโปรแกรม LINK
- List File เป็นไฟล์ที่มีนามสกุล .LST จะบรรจุภาษาเครื่อง และโปรแกรมต้นฉบับ รวมทั้งอธิบายข้อผิดพลาดที่เกิดขึ้น (error) เพื่อให้เราสามารถแก้ไขข้อผิดพลาดของโปรแกรมได้ง่าย
- Cross - Reference File เป็นไฟล์ที่มีนามสกุลเป็น .CRF จะรวบรวมชื่อต่างๆ ที่ใช้ในโปรแกรมทั้งหมด
สำหรับโปรแกรม LINK จะทำหน้าที่แปลงไฟล์รหัสภาษาเครื่อง (object file) ให้เป็นไฟล์ที่สามารถทำงานได้ หรือ Executable File หลังจากทำโปรแกรม LINK เราจะได้ไฟล์ใหม่สองไฟล์คือ
- Run File เป็นไฟล์ที่มีนามสกุล .EXE ซึ่งสามารถโหลดลงหน่วยความจำและทำงานได้
- Loadmap File เป็นไฟล์ที่มีนามสกุล .MAP จะบอกความสัมพันธ์ของเซกเมนต์ต่างๆ ในโปรแกรม
Assembler Linker อ่านลงหน่วยความจำ



โปรแกรมต้นฉบับ Object File Executable File โปรแกรมในหน่วยความจำ
รูป แสดงขั้นตอนการแปลงไฟล์

เครื่องคอมพิวเตอร์นั้นสามารถทำงานได้กับระบบเลขฐานสองได้เพียงอย่างเดียว ซึ่งไม่ได้หมายถึงข้อมูลเพียงอย่างเดียวแต่ยังรวมถึงคำสั่งต่างๆของคอมพิวเตอร์ด้วย ดังนั้นถ้าหากเราต้องการเขียนโปรแกรมขึ้นมาโปรแกรมหนึ่ง เราจะต้องเรียบเรียงคำสั่งต่างๆให้อยู่ในรูปของ เลขฐานสอง ตามแต่ผู้ที่ผลิตเครื่องคอมพิวเตอร์จะกำหนดไว้ ซึ่งภาษาที่ใช้เขียนโปรแกรมด้วยตัวเลขฐานสองนี้เรียกว่า" ภาษาเครื่อง " ซึ่งไม่สะดวกและไม่สื่อความหมายที่ชัดเจนกับเขียนโปรแกรมจึงมีการคิดค้นสัญลักษณ์ต่างๆขึ้นมาแทนภาษาเครื่อง โดยสัญลักษณ์นี้จะแทนค่าภาษาเครื่องหนึ่งคำสั่งต่อสัญลักษณ์หนึ่งตัว ซึ่งเรียกภาษานี้ว่า " ภาษานีโมนิค (Mnemonic) " หรือ " ภาษาแอสเซมบลี "
ภาษา Assembly ก็คือ ภาษานีโมนิคที่มีการเพิ่มเติมคำสั่งพิเศษในการจัดการอ้างอิงหน่วยความจำนั่นเอง ภาษา assembly นั้นถูกจัดเป็นภาษาระดับต่ำ ซึ่งสัญลักษณ์ที่ใช้มักจะถูกกำหนดโดยผู้ผลิตชิพของ CPU ซึ่งทำให้ภาษา Assembly เป็นภาษาที่ยึดติดกับเครื่อง
ภาษาสำหรับเขียนโปรแกรมที่อยู่ในรูปของสัญลักษณ์ต่างๆนั้นไม่สามารถนำไปให้เครื่องคอมพิวเตอร์ปฏิบัติได้ทันที เพราะว่าเครื่องคอมพิวเตอร์เข้าใจแต่ภาษาเครื่องเท่านั้น ดังนั้นเราจึงต้องมีการแปลสัญลักษณ์ต่างๆให้กลายเป็นภาษาเครื่องเสียก่อน ซึ่งการแปลโปรแกรมภาษา assembly นั้นเรียกว่าการ Assembling ซึ่งก็เป็นการ Compile โปรแกรมแบบหนึ่ง แต่ถูกตั้งใหม่ตามชื่อของภาษาที่ถูกนำมาแปลซึ่งก็คือภาษา Assembly การทำงานของ Assembling มักอยู่ในรูปของการแทนค่าสัญลักษณ์ต่างๆ เพราะภาษา Assembly เป็นการแทนค่าภาษาเครื่องแบบคำสั่งต่อคำสั่งนั่นเอง

ภาษา Assembly เป็นภาษาที่มีชื่อเสียงไม่ค่อยจะดีนักในกลุ่มโปรแกรมเมอร์ทั้งหลาย ทั้งนี้ก็เพราะภาษา Assembly เป็นภาษาที่เข้าใจยาก จึงไม่เป็นที่นิยมในกลุ่มโปรแกรมเมอร์สักเท่าไร แต่ก็ยังมีความจำเป็นที่จะต้องใช้ภาษา Assembly นี้อยู่ เนื่องจากภาษานี้เป็นภาษาที่สามารถทำงานได้อย่างรวดเร็ว หากมีงานที่ต้องการให้ CPU ประมวลผลอย่างรวดเร็วแล้ว จำเป็นที่จะต้องใช้ภาษา Assembly
ตัวแปลภาษา Assembly นั้นเราเรียกว่า " Assembler " ซึ่งตัว Assembler นี้ก็มีหลายตัวด้วยกันเช่น
• MASM (Microsoft Macro Assembler) เป็นตัวแปลภาษา Assembly ของบริษัท Microsoft ซึ่งสามารถ Import libraries ของ Visual C++ เข้าไปได้ ในปัจจุบันได้พัฒนามาถึงเวอร์ชัน 6.11 แล้ว
• TASM (Turbo Assembler) เป็นตัวแปลภาษา Assembly ของบริษัท Borland โดยในขณะนี้ได้พัฒนามากถึงเวอร์ชัน 5.0 และได้มีการเปิดเผย Source ทางอินเตอร์เน็ตแล้ว
• NASM (Netwide Assembler) เป็นตัวแปลภาษา Assembly ที่โปรแกรมเมอร์ในอินเตอร์เน็ตร่วมกันเขียนขึ้นมา ซึ่งส่วนใหญ่จะเน้นไปทาง Linux Programming

ข้อดีและข้อเสียของภาษา ASSEMBLY

ข้อดี
• ความเร็ว เนื่องจากภาษา Assembly นี้เป็นภาษาระดับต่ำซึ่งมีความใกล้ชิดกับภาษาเครื่องมากดังนั้นจึงสามารถทำการประมวลผลข้อมูลได้อย่างรวดเร็ว ในการแข่งขันกันด้านความเร็วแล้วภาษา Assembly นี้มีความเร็วในการประมวลผลเร็วที่สุด ถ้าหากมีการแข่งขันกันระหว่างโปรแกรมเมอร์ที่เชี่ยวชาญภาษา Assembly กับผู้เชี่ยวชาญภาษา C จะพบว่าโปรแกรมที่เขียนขึ้นมาจากภาษา Assembly จะทำงานได้เร็วกว่าโปรแกรมที่เขียนขึ้นมาจากภาษา C แทบทุกครั้ง
• ขนาด โปรแกรมที่เขียนขึ้นมาจากภาษา Assembly นั้นมักจะมีขนาดเล็ก เพราะว่าเราสามารถกำหนดได้ว่าจะให้เครื่องคอมพิวเตอร์ทำอะไรบ้าง แต่ในภาษาระดับสูงนั้นมักจะมีการทำงานเผื่อไว้ในคำสั่งต่างๆตามแต่ละภาษา โปรแกรมที่เขียนด้วยภาษา Assembly นั้นส่วนใหญ่จะมีขนาดเพียงครึ่งหนึ่งของโปรแกรมที่เขียนด้วยภาษาระดับสูงอื่นๆ ถึงแม้ว่าจะมีคนเรียกร้องว่าไม่จำเป็นที่จะต้องกังวลเเกี่ยวกับขนาดของโปรแกรมอีกต่อไปแล้ว เพราะว่าเทคโนโลยีของหน่วยความจำต่างๆได้พัฒนาไปมาก ทำให้สามารถเก็บข้อมูลได้เป็นจำนวนมาก จึงไม่มีความจำเป็นที่จะต้องใช้ภาษา Assembly เขียนเพื่อทำให้โปรแกรมมีขนาดเล็กลง แต่ว่าถ้าโปรแกรมที่เขียนมีขนาดเล็กก็จะทำให้ผู้ใช้เสียค่าใช้จ่ายในการจัดเก็บน้อยลง เช่น ถ้าหากเขียนด้วยภาษาระดับสูงแล้วโปรแกรมจะมีขนาด 1.5 MB แต่ว่า Floppy disk นั้นสามารถเก็บได้เพียงแค่ 1.44 MB เท่านั้น ดังนั้นถ้าจะเก็บโปรแกรมนี้จึงต้องใช้ Diskette ถึง 2 แผ่นซึ่งถ้าหากเขียนด้วยภาษา Assembly แล้วจะสามารถเก็บได้ใน Diskette เพียงแค่แผ่นเดียวทำให้สามารถประหยัดค่าใช้จ่ายในส่วนนี้ไปได้
• ความสามารถ ในภาษาระดับสูงนั้น อาจจะมีงานบางอย่างที่ไม่สามารถควบคุมการทำงานของเครื่องคอมพิวเตอร์ได้อย่างที่เราต้องการได้ทั้งหมด เนื่องจากในภาษานั้นอาจไม่ได้มีการเตรียมคำสั่งไว้สำหรับการทำงานตามที่เราต้องการ แต่ว่าในภาษา Assembly นั้น เราสามารถกำหนดได้ว่าจะให้เครื่องคอมพิวเตอร์ทำงานอะไรบ้างได้ทั้งหมด
• ความรู้ ถ้าหากเรามีความรู้เรื่องการเขียนโปรแกรมด้วยภาษา Assembly ได้ ก็จะช่วยให้เราสามารถใช้ความรู้ในการเขียนภาษา Assembly นี้ไปช่วยในการเขียนโปรแกรมภาษาระดับสูงอื่นๆให้ดีขึ้นได้ เมื่อเราเข้าใจภาษา assembly ดีพอเราก็จะเข้าใจว่าตัว Compiler นั้นส่งข้อมูลต่างๆอย่างไร โปรแกรมเมอร์ที่เขียนภาษา Assembly ได้นั้นจะเขียนโปรแกรมได้ดีกว่าคนที่เขียนด้วยภาษาระดับสูงเพียงอย่างเดียว เพราะว่าเขารู้ถึงข้อจำกัดของ Compiler และรู้ว่าใน Code ที่เขาเขียนขึ้นมานั้นสั่งให้มันทำอะไรบ้าง

ข้อเสีย
• เป็นภาษาที่ยึดติดกับเครื่อง ภาษา Assembly นั้นเป็นภาษาที่ยึดติดกับตัว Microprocessor คือ ไม่สามารถนำไปประมวลผลบนตัว Microprocessor ต่างชนิดกันได้ นอกจากนี้คำสั่งที่ใช้ใน Microprocessor ต่างชนิดกันยังอาจจะไม่เหมือนกันด้วย จึงทำให้โปรแกรมที่เขียนด้วยภาษา Assembly นี้ไม่สามารถนำไปทำงานบนเครื่องอื่นได้
• เรียนรู้ยาก การเรียนภาษา Assembly นั้นอาจจะยากกว่าการเรียนภาษาระดับสูงอื่นๆ เพราะว่าภาษาระดับสูงนั้นคำสั่งต่างๆมักจะเป็นคำในภาษาอังกฤษที่มีความหมายจึงทำให้เข้าใจได้ง่าย และมีโครงสร้างของโปรแกรมที่เป็นระเบียบทำให้ทำความเข้าใจได้ไม่ยาก อย่างไรก็ตามการเรียนภาษา Assembly นั้นก็ไม่ยากไปกว่าการที่คุณเรียนภาษาระดับสูงเป็นครั้งแรกเท่าไรนัก
• อ่านและทำความเข้าใจโปรแกรมยาก ผู้คนส่วนใหญ่มักจะไม่สนใจที่จะเรียนรู้ภาษา Assembly ดังนั้นมันจึงเป็นไปไม่ได้ถ้าหากไม่เคยไม่เคยศึกษาภาษา Assembly มาก่อนแล้วจะสามารถอ่านหรือเขียนได้เหมือนกับภาษาระดับสูงอื่นๆ แต่ว่าเมื่อมีประสบการณ์มากขึ้นก็จะทำให้เรารู้สึกว่าสามารถทำความเข้าใจกับมันได้ง่ายขึ้น
• ทำการแก้ไขโปรแกรมยาก ก็เหมือนกับข้อที่แล้ว นั่นคือถ้าหากเราไม่มีประสบการณ์ในการแก้ไขโปรแกรมภาษา Assembly แล้ว ก็เป็นเรื่องยากที่จะแก้ไขมัน ก็เหมือนกับในภาษาระดับสูงอื่นๆ เมื่อคุณเริ่มเรียนรู้ในครั้งแรกคุณก็จะพบปัญหาในการแก้ไขโปรแกรมอยู่เป็นประจำ ซึ่งปัญหานี้จะหมดไปเมื่อคุณมีประสบการณ์มากขึ้น
• การบำรุงรักษาทำได้ยาก โปรแกรมต่างๆนั้นยากที่จะทำการบำรุงรักษา ถ้าหากคุณไม่มีประสบการณ์แล้วก็จะเป็นเรื่องยากที่จะทำการบำรุงรักษามัน การจะทำการบำรุงรักษาโปรแกรมให้ดีนั้นจำเป็นที่จะต้องอาศัยประสบการณ์ในการเขียนโปรแกรมภาษานั้นๆเป็นอย่างมาก
• การเขียนโปรแกรมทำได้ยาก โปรแกรมเมอร์ที่ทำงานด้วยภาษา Assembly นั้นต้องใช้เวลานานมากกว่าจะเขียนโปรแกรมให้เสร็จได้ การเขียนภาษา Assembly นั้นต่างจากการเขียนด้วยภาษาระดับสูงคือ ในภาษาระดับสูงนั้นมี Standard Library เอาไว้ใช้ในการแก้ปัญหาทั่วๆไปอยู่แล้ว แต่ว่าในภาษา Assembly นั้นผู้เขียนจำเป็นที่จะต้องกำหนดเองทั้งหมดว่าจะให้มีอะไรบ้าง อีกทั้งภาษา Assembly ยังเป็นภาษาที่ยึดติดกับตัว Microprocessor ซึ่งหากเขียนบนเครื่องต่างชนิดกันก็จำเป็นที่จะต้องรู้คำสั่งของเครื่องแต่ละรุ่นด้วย จึงทำให้ยากในการเขียนโปรแกรม
• ใช้เวลาในการเขียนโปรแกรมมาก วิศวกรซอฟต์แวร์ได้ประเมินว่า พวกเขาต้องใช้เวลาประมาณ 30% ในการเขียนโปรแกรมด้วยภาษา Assembly ซึ่งใช้เวลามากกว่าการเขียนด้วยภาษาระดับสูงอื่นๆเป็น 2 เท่า แต่ว่าโปรแกรมเมอร์ที่เชี่ยวชาญนั้นสามารถทำงานโดยใช้เวลาเท่ากันกับการเขียนด้วยภาษาระดับสูงได้
• เทคโนโลยีได้พัฒนาไปมาก เทคโนโลยีด้านต่างๆได้ถูกพัฒนาไปมากทั้งในด้านตัว Compiler ความเร็วของเครื่อง หรือขนาดของหน่วยความจำ
• ตัว Compiler นั้น ได้มีการพัฒนาเทคนิคในการ Compile อยู่ตลอดเวลา หาก โปรแกรมเมอร์รู้สึกว่าโปรแกรมที่เขาเขียนด้วยภาษา Assembly นั้นทำงานได้ดีแล้วเมื่อเขาลองมาเขียนด้วยภาษาระดับสูงแล้วเมื่อมีตัว Compiler ที่ดีแล้วก็สามารถทำงานได้เท่าๆกันกับโปรแกรมที่เขียนด้วยภาษา Assembly ทำให้คนหันมาใช้ภาษาระดับสูงมากกว่า
• ความเร็วของเครื่อง เป็นเรื่องน่าประหลาดใจที่คนส่วนมากมักจะใช้เงินเป็นจำนวนมากไปเพื่อเพิ่มความเร็วของเครื่อง โดยไม่คิดที่จะใช้โปรแกรมที่เขียนขึ้นมาจากภาษา Assembly ซึ่งจะทำให้สามารถทำงานได้เร็วขึ้นแม้ว่าจะยังใช้เครื่องเดิมอยู่ แต่ว่าเราก็จะยังต้องการให้มีความเร็วมากขึ้นไปอีกจนเกินความสามารถของโปรแกรมที่จะทำได้ หรืออาจเลือกใช้การแก้ไขโปรแกรมภาษาระดับสูงให้มี Algorithm ดีขึ้นมากกว่าการที่จะเปลี่ยนมาเขียนด้วยโปรแกรมภาษา Assembly
• ขนาดของหน่วยความจำ ในปัจจุบันหน่วยความจำต่างๆได้ถูกพัฒนาไปมากทำ ให้ขนาดของหน่วยความจำมีมากพอที่จะจัดเก็บโปรแกรมได้เป็นจำนวนมาก ทำให้ผู้ใช้ไม่ต้องกังวลในเรื่องที่มีหน่วยความจำไม่เพียงพอที่จะใช้งานโปรแกรมต่างๆ

การจัดระบบโครงสร้างคอมพิวเตอร์

การทำงานภายในคอมพิวเตอร์ทุกเครื่องจะประกอบด้วยส่วนประกอบสามส่วนคือ หน่วยประมวลผลกลาง(Central Processing Unit : CPU)และอุปกรณ์อินพุต เอาต์พุต (I/O devices) ดังแสดงในรูปที่ 1.1
การทำงานของระบบคอมพิวเตอร์นั้น CPU จะต้องทำงานตามคำสั่งที่เก็บเอาไว้ในหน่วยความจำ จากนั้นจะติดต่อกับผู้ใช้หรือแสดงผลลัพธ์จากการประมวลผลทางอินพุต เอาต์พุต เอาต์พุตที่เราพบโดยทั่วไปได้แก่ คีย์บอร์ด จอแสดงผล เครื่องพิมพ์ เป็นต้น ตัว CPU จะติดต่อกับหน่วยความจำและอุปกรณ์อินพุต เอาต์พุตต่างๆ ทางระบบบัส(bus)
บัสภายในคอมพิวเตอร์ หมายถึงกลุ่มของสัญญาณที่ใช้ในการติดต่อสื่อสารข้อมูลต่าง ๆ ของระบบคอมพิวเตอร์ ในคอมพิวเตอร์จะมีระบบบัสอยู่สามประเภทได้แก่ แอดเดสบัส(address bus) บัสข้อมูล(data bus) และบัสควมคุบ (control bus)

1.แอดเดรสบัส จะประกอบด้วยสายสัญญาณแอดเดรสหลายเส้นขึ้นอยู่กับรุ่นของ CPU ถ้าเป็น CPU รุ่น8080 หรือ8086 จะมีทั้งหมด20 เว้นหรือ20บิต แอดเดรสนี้ CPU จะใช้การอ้างตำแหน่งของหน่วยความจำและอ้างตำแหน่งของพอร์ต CPU รุ่น 8088 หรือ 8086 ที่มีสัญญาณแอดเดรส 20 เส้น จะทำให้อ้างตำแหน่งได้ 220 หรือ 1,048,576 ตำแหน่ง หรือ 1 MB lสำหรับ CPU จะมีสายสัญญาณแอดเดรสมากขึ้นทำให้อ้างตำแหน่งความจำได้มากขึ้นอย่างเช่น CPU รุ่น 80286 และ 80386SX จะมีสัญญาณแอดเดรส 24 เส้นทำให้อ้างตำแหน่งได้16 MB เป็นต้น แอดเดรสนี้เป็นบัสที่ส่งข้อมูลออกจาก CPU ได้ทิศทางเดียว เราเรียกบัสประเภทนี้ว่า unidirectional bus

2.บัสข้อมูล เป็นเส้นทางที่ใช้ข้อมูลเข้าออกให้กับตัว CPU โดยจะทำงานร่วมกับแอดเดรสบัสบัสประเภทนี้ข้อมูลจะวิ่งได้สองทิศทางเราเรียกบัสประเภทนี้ว่า directional bus จำนวนสายสัญญาณของบัส ข้อมูลจะขึ้นอยู่กับรุ่นของ CPU อย่างเช่น CPU รุ่น 8086 จะมีจะมีจำนวนสายสัญญาณของบัสข้อมูล 8 เส้น ให้ส่งผ่านข้อมูลได้ครั้งล่ะ 1 ไบต์ ในคอมพิวเตอร์ที่ใช้ CPU รุ่น 8088 การประมวลผลภายในแต่ล่ะครั้งจะได้ข้อมูล 16 บิต ที่เรียกว่าคอมพิวเตอร์แบบ 16 บิตที่ไม่แท้จริง สาเหตูที่คอมพิวเตอร์รุ่นแรกๆใช้บัสข้อมูลขนาด 8 บิตเพราะว่าต้องการทำให้ต้นทุนของระบบถูกลง ต่อมาคอมพิวเตอร์ที่ใช้ CPU รุ่น 80286 หรือเรียกว่าเครื่อง AT จะเปลี่ยนมาใช้สัญญาณข้อมูลแบบ 16 บิต ทำให้การโอนย้ายข้อมูลหนึ่งครั้งจะได้ข้อมูลขนาด 2 ไบต์ เรียกระบบบัสแบบนี้ว่าบัสเอที (AT BUS)

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

1 ความคิดเห็น: