ไมโครโปรเซสเซอร์ เก่าสุดๆ
Microprocessor นั้นมีหลายชนิดตามแต่บริษัทจะผลิตขึ้นมา เช่น Microprocessor ที่ผลิตโดยบริษัท Intel ซึ่งเป็นตระกูล x86 ซึ่งในปัจจุบันเป็นรุ่น Pentium นอกจากนี้ยังมี Microprocessor ที่ผลิตขึ้นโดยบริษัทอื่นๆอีก เช่น ตระกูล 68000 และ PowerPC ซึ่งเป็นของบริษัท Motorola ตระกูล Alpha ของบริษัท DEC และตระกูล Sparc ของบริษัท Sun Microsystem เป็นต้น โดย Microprocessor แต่ละตัวนี้จะมีชุดของคำสั่งที่ไม่เหมือนกันจึงทำให้ภาษา Assembly นี้ไม่สามารถนำไปใช้บนเครื่องต่างชนิดกันได้ ดังนั้นในรายงานฉบับนี้จึงขอนำเสนอภาษา Assembly ที่ใช้กับเครื่องตระกูล x86 ซึ่งเป็นของบริษัท Intel ส่วนภาษา Assembly สำหรับเครื่องตระกูล PowerPC
รายละเอียดของ Microprocessor รุ่นต่างๆในตระกูล x86 เป็นดังนี้
1. ไมโครโพรเซสเซอร์ 4004 (1971) เป็นชิพ CPU ตัวแรกของบริษัท Intel ซึ่งเป็น Microprocessor ขนาด 4 บิต มีหน่วยความจำที่เก็บโปรแกรมและข้อมูลแยกกันต่างหาก มันทำงานที่ความเร็วของสัญญาณนาฬิกาเท่ากับ 740 kHz มีคำสั่งภาษาเครื่องอยู่ 46 คำสั่ง
2. ไมโครโพรเซสเซอร์ 4040 (1972) ได้ถูกพัฒนาต่อมาจาก 4004 ยังคงเป็น Microprocessor ขนาด 4 บิต แต่ว่าได้มีการเพิ่มคำสั่งภาษาเครื่องเข้ามาจากเดิมอีก 14 คำสั่ง
3. ไมโครโพรเซสเซอร์ 8008 (1972) ถูกพัฒนาให้กลายเป็น Microprocessor ขนาด 8 บิต ทำให้สามารถประมวลผลข้อมูลได้เป็น 2 เท่าของเครื่อง 4004 และ 4040
4. ไมโครโพรเซสเซอร์ 8080 (1974) 8080 นี้ได้ถูกพัฒนาให้มีความเร็วในการทำงานมากกว่า 4004 ถึง 20 เท่า แต่ว่าก็ยังคงเป็น Microprocessor ขนาด 8 บิตเหมือนเดิม
5. ไมโครโพรเซสเซอร์ 8088/8086
คอมพิวเตอร์ IBM PC รุ่นแรกจะเป็นคอมพิวเตอร์แบบ 16 บิต โดยใช้ CPU ที่เป็นไมโครโพรเซสเซอร์เบอร์ 8088 เรียกคอมพิวเตอร์รุ่นนี้ว่ารุ่น XT หรือ PC/XT ส่วนประกอบภายในจะกระทำกับข้อมูลขนาด 16 บิต จำนวน 14 ตัว โดยการประมวลผลภายในจะกระทำกับข้อมูลขนาด 16 บิต แต่การติดต่อกับอุปกรณ์ภายนอก CPU จะใช้บัสข้อมูล ขนาด 8 บิต CPU รุ่นนี้จะมีสายแอดเดรสทั้งหมด 20 เส้นทำให้อ้างตำแหน่งได้ 1 MB สำหรับ CPU รุ่น 8086 โครงสร้างภายในจะเหมือนกับรุ่น 8088 แต่จะติดต่อกับอุปกรณ์ภายนอกด้วยบัสข้อมูลแบบ 16 บิต จึงเรียกรุ่น 8086 ว่าเป็น 16 บิตที่แท้จริง
6. ไมโครโพรเซสเซอร์ 80286
ไมโครโพรเซสเซอร์รุ่นนี้เรียกสั้น ๆ ว่า 286 เป็นรุ่นที่พัฒนาต่อจาก 8086 มีประสิทธิภาพสูงมากใช้ในเครื่อง คอมพิวเตอร์ IBM PC/AT บัสข้อมูลของไมโครโพรเซสเซอร์รุ่นนี้เป็นแบบ 16 บิต แต่มีแอดเดรสบัส 24 เส้นทำให้อ้างตำแหน่งของ ข้อมูลได้มาก ขึ้นการทำงานของ 286 จะมีสองแบบคือแบบเรียลโหมด และแบบโปรเทคต์โหมด โดย แบบเรียลโหมดการทำงานจะเหมือนกับ 8086 อ้างหน่วยความจำได้ 1MB แต่แบบโปรเทคต์โหมดจะติดต่อกับ หน่วยความจำได้มากที่สุดเท่าที่มีหน่วยความจำต่ออยู่ แต่ ไม่เกิน 16 MB การทำงานของไมโครโพรเซสเซอร์รุ่นนี้ สามารถ ทำงานหลายโปรแกรมในเวลาเดียวกันได้ เรียกการทำงานแบบ นี้ว่า มัลติทาสกิ่ง นอกจากนี้ 286 ยังทำงานท ี่ความถี่สัญญาณที่สูงขึ้น ทำให้ CPU ทำงานได้เร็วมากขึ้น
7. ไมโครโพรเซสเซอร์ 80386
เป็นรุ่นที่พัฒนาจากรุ่น 286 ให้ทำงานได้ดีขึ้นใช้สัญญาณนาฬิกาที่มีความถี่สูงขึ้น รีจิสเตอร์เป็นแบบ 32 บิต ดังนั้น การโอนย้าย ข้อมูลจะเป็นแบบ 32 บิตสามารถอ้างหน่วยความจำได้สูงถึง 4000 MB สามารถอ้างหน่วยความจำ ได้ทั้งแบบเรียลโหมด และแบบโปรเทคต์โหมด ไมโครโพรเซสเซอร์รุ่นได้ออกมาสองรุ่นคือ 80386DX และ 80386SX โดย 80386DX จะใช้บัส ข้อมูลขนาด 32 บิต บัสแอดเดรสขนาด 32 บิต ส่วน 80386SX ใช้บัสข้อมูล ภายนอกขนาด 16 บิต และใช้แอดเดรสบัสขนาด 24 บิต
8. ไมโครโพรเซสเซอร์ 80486
เป็นรุ่นที่พัฒนาต่อจากรุ่น 386 โดยใช้สัญญาณนาฬิกาที่เร็วกว่าและมีหน่วยความจำแคชประกอบอยู่ภายใน ไมโครโพรเซสเซอร์รุ่น ได้ออกมาหลายรุ่นคือ 486DX เป็นรุ่นที่มีหน่วยประมวลผลร่วมทางคณิตศาสตร์ประกอบ อยู่ภายใน รุ่น 486SX เป็นรุ่นที่มีราคา ถูกลงโดยตัดหน่วยประมวลผลร่วมทางคณิตศาสตร์ออกไป รุ่น 486DX2 และ DX4 เป็นรุ่นที่พัฒนาให้ทำงานได้เร็วขึ้นเรียกว่า Overdrive Processor โดยจะเพิ่มความถี่ของสัญญาณนาฬิกาภายใน จากสัญญาณนาฬิกาภายนอก 2 และ 3 เท่าตามลำดับสำหรับ หน่วยความจำแคชเป็นหน่วยความจำที่ทำให้ คอมพิวเตอร์ทำงานได้เร็วขึ้นถ้าหาก CPU ทำงานร่วมกับหน่วยความจำทั่วไปบางครั้ง CPU ทำงานได้เร็วกว่า เวลาที่หน่วยความจำทำงาน ทำให้ CPU ต้องหยุดรอในการอ่านเขียนข้อมูกับหน่วยความจำ จึงมีการ นำหน่วยความจำ แคชมาใช้ โดยแคชเป็นหน่วยความจำประเภทหนึ่งที่ทำงานได้เร็วมาก และจะมีตัวควบคุมแคช ทำหน้าที่เก็บ ข้อมูลที่ CPU ต้องการใช้บ่อย ๆ เอาไว้ เมื่อ CPU ทำงาน CPU จะหาข้อมูลในแคชก่อนถ้าไม่มีข้อมูลที่ต้องการ CPU จะไปหา ข้อมูลในหน่วยความจำ RAM ซึ่งทำงานช้ากว่าหน่วยความจำแคช
9. ไมโครโพรเซสเซอร์เพนเทียม
เป็นไมโครโพรเซสเซอร์ที่ถูกพัฒนาให้มีประสิทธิภาพสูงขึ้น บัสข้อมูลในการติดต่อกับอุปกรณ์ภายนอกเป็นแบบ 64 บิต สามารถอ้างหน่วยความจำได้มากขึ้น มีหน่วยความจำแคชภายในขนาดใหญ่ขึ้นในไมโครโพรเซสเซอร์จะ ทำงาน ออกเป็นสองส่วน คือ Execute Unit (EU) และ Bus Interface Unit (BIU) ดังรูป การทำงานของ EU จะทำหน้าที่ ประมวลผล รหัสคำสั่งและข้อมูลที่ได้รับมาจาก BIU การเปลี่ยนแปลงหรือการกระทำกับข้อมูลใด ๆ จะต้องเกิดจากส่วย EU จะประกอบ ด้วยรีจิสเตอร์ที่ใช้งานทั่วไปได้แก่ AX, BX, CX, DX สแตกพอยน์เตอร์ (SP) เบสพอยน์เตอร์ (BP) ซอร์สอินเด็กซ์ (SI) เดสทิเนชันอินเด็กซ์ (DI) รีจีสเตอร์แฟลก หน่วยควบคุม รวมทั้งหน่วยประมวลผลทางคณิตศาสตร์และลอจิกที่เรียกว่า ALU ส่วน BIU จะทำหน้าที่เชื่อมต่อบัสในการส่งข้อมูล ต่าง ๆ ควบคุมการเข้าถึงหน่วยความจำและการติดต่อกับอุปกรณ์ภายนอกต่าง ๆ ของตัวไมโครโพรเซสเซอร์ ประกอบด้วย หน่วยควบคุมบัส รีจิสเตอร์เซกเมนต์ วงจรลอจิกที่ใช้อ้างตำแหน่งหน่วยความจำ เป็นต้น ในโพรเซส เซอร์โมเดลเราจะเห็นว่าประกอบด้วยรีจิสเตอร์ต่าง ๆ มากมาย โดยรีจิสเตอร์หมายถึงหน่วยเก็บข้อมูลชั่วคราว ที่มีหน้าท ี่เฉพาะภายในไมโครโพรเซสเซอร์
การให้คอมพิวเตอร์ทำงานคือการให้ไมโครโพรเซสเซอร์ทำงานโดยจะเริ่มจากการอ่านข้อมูลจากหน่วยความจำ โปรแกรมเข้ามาในตัวไมโครโพรเซส เซอร์จากนั้น จะถอด รหัสคำสั่งและทำงานตามคำสั่งเมื่อทำงานตาม
รีจิสเตอร์ (Register)
รีจิสเตอร์เป็นส่วนประกอบส่วนหนึ่งของไมโครโพรเซสเซอร์ที่ทำหน้าที่เก็บข้อมูลชั่วคราวภายใน CPU สำหรับเตรียมการประมวลผลต่างๆดังที่กล่าวมาแล้ว โดยรีจิสเตอร์ภายใน CPU นั้นมีหลายตัว สามารถแบ่งเป็นกลุ่มๆ ได้ดังนี้
Þ รีจิสเตอร์ใช้งานทั่วไป ( General Purpose Register )
Þ รีจิสเตอร์ตัวชี้และอินเด็กซ์ ( Pointer & Index Register )
Þ รีจิสเตอร์เซกเมนต์ ( Segment Register )
Þ รีจิสเตอร์แฟลก ( Flag Register )
รีจิสเตอร์ใช้งานทั่วไป ( Gerneral Purpose Register )
กลุ่มรีจิสเตอร์ใช้งานทั่วไปหรือกลุ่มรีจิสเตอร์ข้อมูลประกอบด้วยรีจิสเตอร์ AX หรือ Accumulator และรีจิสเตอร์ BX,CX และ DX ซึ่งเป็นรีจิสเตอร์ขนาด 16 บิต ( ถ้าเป็นไมโครโพรเซสเซอร์รุ่น 80386 จะเป็น 32 บิต โดยมีตัว E นำหน้า เช่น EAX ) รีจิสเตอร์เหล่านี้จะแบ่งเป็นรีจิสเตอร์ขนาด 8 บิต 2 ตัวได้ อย่างเช่นรีจิสเตอร์ AX แบ่งเป็น 8 บิตต่ำคือ AL และ 8 บิตสูงคือ AH รีจิสเตอร์เหล่านี้สามารถใช้เก็บข้อมูลทั่วไปได้ แต่โดยทั่วไปแล้วรีจิสเตอร์ AX จะใช้เก็บข้อมูลที่จะนำไปประมวลผลและเก็บค่าผลลัพธ์จากการประมวลผล เช่นการ บวก ลบ คูณ หาร ภายใน CPU โดยรีจิสเตอร์ AX ยังทำงานกับอุกรณ์อินพุต เอาท์พุตได้อีกด้วย รีจิสเตอร์ BX ( Base register ) ใช้เป็นรีจิสเตอร์ชี้ฐานข้อมูลในการประมวลผลแบบตาราง รีจิสเตอร์ CX ( Count Register ) ใช้เป็นตัวนับในการให้โปรแกรมทำงานแบบซ้ำๆหรือแบบลูป โดยคำสั่งต่างๆ ของไมโครโพรเซสเซอร์ที่ทำงานเกี่ยวกับการนับ การหมุนข้อมูล การเลื่อนข้อมูล จะใช้รีจิสเตอร์ตัวนี้ด้วย รีจิสเตอร์ DX ( Data Register ) ใช้ในการเก็บข้อมูลเพื่อทำการคูณ หารเลขและใช้ในากรอ้สางตำแหน่งข้อมูลโดยอ้อมในการเขียนโปรแกรม
รีจิสเตอร์ขนาด 16 บิตทั้ง 4 ตัว สามารถแยกออกเป็นรีจิสเตอร์ 8 บิตได้ โดย AX แยกออกเป็น AH และ AL รีจิสเตอร์ BH และBL แยกออกจากรีจิสเตอร์ BX เป็นต้น
ดังรูป
AX BX
AH AL BH BL
CX DX
CH CL DH DL
รูป ลักษณะของรีจิสเตอร์
เราสามารถเขียนคำสั่งย้ายข้อมูลต่างๆกับรีจิสเตอร์ได้ เช่น MOV AL,BH ,
MOV DL,CL หรืออาจเป็นคำสั่งบวกเช่น ADD BL,DH รีจิสเตอร์ขนาด 8 บิต จะนำไปกระทำกับรจิสเตอร์ 16 บิตไม่ได้ เช่น MOV DL,DH จะทำงานไม่ได้
รีจิสเตอร์ตัวชี้และอินเด็กซ์ ( Pointer & Index Register )
ในไมโครโพรเซสเวอร์ 8086 รีจิสเตอร์กลุ่มนี้จะเป็น 16 บิตทั้งหมด ไม่สามารถแบ่งเป็น 8 บิตต่ำและ 8 บิตสูงได้ รีจิสเตอร์กลุ่มนี้ใช้ในการชี้ตำแหน่งหน่วยความจำที่ต้องการติดต่อ ประกอบด้วยรีจิสเตอร์ SP,BP,SI และ DI รีจิสเตอร์แต่ละตัวมีหน้าที่เฉพาะอย่างดังต่อไปนี้
SP ( Stack Pointer ) ใช้ตำแหน่งหน่วยความจำที่เป็นแสตกโดยใช้ร่วมกับรีจิสเตอร์ SS
BP ( Base Pointer ) ใช้ชี้ตำแหน่งของข้อมูลคล้ายกับรีจิสเตอร์ SP แต่จะชี้ตำแหน่งของข้อมูลทั่วไป
SI ( Source Index ) ใช้ร่วมกับรีจิสเตอร์ DS ใช้ชี้ตำแหน่งของหน่วยความจำข้อมูล
DI ( Destination Index ) คล้ายกับรีจิสเตอร์ SI แต่จะทำงานเกี่ยวกับสตริงและทำงานร่วมกับรีจิสเตอร์ ES
รีจิสเตอร์เซกเมนต์ ( Segment Registers)
กลุ่มเซกเมนต์เป็นรีจิสเตอร์ในส่วนของ BIU ที่ใช้ในการอ้างตำแหน่งหน่วยความจำเมื่อต้องการอ่านเขียนข้อมูล โดยจะแบ่งหน่วยความจำออกเป็นเซกเมนต์ รีจิสเตอร์แต่ละตัวมีหน้าที่ดังนี้
รีจิสเตอร์ CS ใช้เก็บค่าเซกเมนต์แอดเดรสเอาไว้หรือตำแหน่งของโปรแกรมใน Code Segment โดยจะทำงานร่วมกับรีจิสเตอร์ชี้คำสั่ง IP ซึ่งเป็นค่า Offset ในการชี้ตำแหน่งคำสั่งโปรแกรม
รีจิสเตอร์ DS ใช้เก็บค่าตำแหน่งเซกเมนต์ส่วนที่เป็นข้อมูล หรือ Data Segment ดดยทั่วไปจะใช้ในการอ้างแอดเดรสที่เก็บข้อมูลสตริง ข้อมูลที่อยู่ใน DS จะถูกนำมาบวกกับค่าออฟเซตเพื่ออ้างตำแหน่งหน่วยความจำที่ต้องการติดต่อ
รีจิสเตอร์ SS ใช้เก็บตำแหน่งเซกเมนต์ส่วนที่เป็นหน่วยความจำแสตกหรือ Stack Segment โดยจะทำงานร่วมกับรีจิสเตอร์ SP หรือตัวชี้แสตก
รีจิสเตอร์ ES ใช้ชี้แอดเดรสหน่วยความจำที่เป็น Extra Segment โดยใช้ร่วมกับรีจิสเตอร์ DI
รีจิสเตอร์คำสั่ง ( Instruction Pointer )
รีจิสเตอร์ Instruction Pointer ( IP ) หรือรีจิสเตอร์คำสั่ง จะทำงานร่วมกับรีจิสเตอร์ CS โดยใช้เก็บตำแหน่งคำสั่งถัดไปที่จะให้ไมโครโพรเซสเซอร์ทำงาน
รีจิสเตอร์แฟลก ( Flags Register )
รีจิสเตอร์จะใช้เก็บสถานะต่างๆจากการประมวลผลของไมโครโพรเซสเซอร์ เมื่อไมโครโพรเซสเซอร์ทำคำสั่งบางคำสั่ง ผลลัพธ์ที่ได้อาจมีผลต่อแฟลกเพื่อบอกสถานะของผลลัพธืที่ได้ รีจิสเตอร์แฟลกแบ่งเป็น 2 ส่วนคือ แฟลกสถานะ ( Status Flags ) และแฟลกควบคุม ( Control Flags ) โดยรีจิสเตอร์แฟลกนี้ค่าบิตต่างๆจะมีความหมายเฉพาะดังรูป
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
รูป บิตต่างๆในรีจิสเตอร์แฟลก
Þ OF ( Overflow ) เป็นบิตที่บอกว่าผลลัพธ์จากการคำนวณมีค่าเกินกว่าที่รีจิสเตอร์จะเก็บได้
Þ DF ( Direction ) เป็นบิตที่กำหนดทิศทางการเคลื่อนที่ของข้อมูลสตริงว่าจะให้เคลื่อนที่จากซ้ายไปขวาหรือขวาไปซ้าย
Þ IF ( Interrupt ) เป็นบิตกำหนดให้ยอมรับการอินเทอร์รัพต์จากภายนอก ถ้าเป็น 1หมายความว่า CPU จะถูกอินเทอร์รัพต์จากภายนอกได้ แต่ถ้าเป็น 0 หมายความว่า CPU จะถูกอินเทอร์รัพต์จากภายนอกไม่ได้
Þ TF ( Trap ) เป็นบิตที่บอกให้ไมโครโพรเซสเซอร์ทำงานทีละคำสั่ง ถ้าบิตนี้ถูกเซตเป็น 1 CPU จะทำงานแบบซิงเกิลสเตป ( Single Step ) ซึ่งทำให้เราสามารถดูผลการทำงานทีละคำสั่งได้
Þ SF ( Sign ) เป็นบิตแสดงเครื่องหมายผลลลัพต์ที่ได้จากการทำงานทางคณิตศาสตร์ ถ้าเป็น 0 หมายความว่าเป็นเลขบวก ถ้าเป็น 1 แสดงว่าเป็นเลขลบ
Þ ZF ( Zero ) เป็นบิตแสดงผลลัพธ์จากการคำนวณทางคณิตศาสตร์ว่ามีค่าเป็น 0 หรือไม่ ถ้าบิตนี้เซตเป็น 1 หมายความว่าข้อมูลที่ได้เป็น 0
Þ AF ( Auxiliary ) เป็นบิตที่ช่วยคิดดการคำนวณแบบ BCD โดยจะเป็นตัวช่วยทดถ้ามีการทดจากบิต 3 ไป 4
Þ PF ( Parity ) เป็นบิตบอกพาริตี้ข้อมูลว่ามีจำนวนบิตที่เป็นลอจิก 1 เป็นคู่หรือคี่
Þ CF ( Carry ) เป็นบิตแฟลกตัวทดที่เก็บข้อมูลการทดจากการทดบิตสูงสุดการคำนวณทางคณิตศาสตร์ ถ้ามีการทดหรือการยืมเกิดขึ้นบิตนี้จะถูกเซ็ตเป็นลอจิก 1
เซกเมนต์หน่วยความจำ
การจัดหน่วยความจำที่นิยมใช้มีอยู่ 2 ประเภทโดยไมโครโพรเซสเซอร์ของโมโตโลราจะอ้างตำแหน่งหน่วยความจำแบบ Linear addressing ส่วนไมโครโพรเซสเซอร์ของอินเทลตระกูล 80*86 จะอ้างหน่วยความจำแบบ segment addressing
รีจิสเตอร์ CS,DS,SS และ ES เป็นรีจิสเตอร์เซกเมนต์ใช้ชี้ตำแหน่งหน่วยความจำที่เก็บรหัสคำสั่งและข้อมูลทำให้ไมโครโพรเซสเซอร์สามารถเข้าถึงตำแหน่งหน่วยความจำได้
เนื่องจากขนาดของข้อมูลที่เก็บในหน่วยความจำมีขาดเป็นไบต์โพรเซสเซอร์ 8086 มีขาแอดเดรสจำนวน 20 บิต ดังนั้น จะอ้างตำแหน่งหน่วยความจำได้ 220 หรือ 1,048,576 หรือ 1 เมกกะไบต์ ตำแหน่งนี้เรียกว่า physical address ค่าแอดเดรส 5 ตำแหน่งแรกค่าของบิตต่างๆ ในแอดเดรสบัสจะเป็นดังนี้
0000 0000 0000 0000 0000
0000 0000 0000 0000 0001
0000 0000 0000 0000 0010
0000 0000 0000 0000 0011
0000 0000 0000 0000 0100
แต่การเขียนค่าแอดเดรสเป็นเลขไบนารีจะยาวจึงนิยมเขียนเป็นเลขฐาน 16 ห้าหลัก ดังต่อไปนี้
00000H
00001H
00002H
………
00009H
0000AH
ค่าตำแหน่งแอดเดรสสูงสุดที่โพรเซสเซอร์ 8086 อ้างได้คือ FFFFFH
ในการอ้างตำแหน่งหน่วยความจำจะใช้รีจิสเตอร์เซกเมนต์เป็นตัวชี้ตำแหน่ง โดยรีจิสเตอร์ CS ใช้ชี้เซกเมนต์หน่วยความจำที่เก็บรหัสคำสั่ง รีจิสเตอร์ DS ใช้ชี้เซกเมนต์หน่วยความจำที่เก็บข้อมูล รีจิสเตอร์ SS ใช้ชี้หน่วยความจำที่เป็นสแตก
ไมโครโพรเซสเซอร์ 8086 ขนาดของแอดเดรสบัสมีขนาด 20 บิต ดังนั้นจะอ้างตำแหน่งได้ 1,048,576 ตำแหน่ง ในรูป 1.9 จะแสดงตำแหน่งหน่วยความจำจะเห็นว่าสามารถเก็บเวิร์ดข้อมูลขนาด 16 บิต ได้จำนวน 524,288 เวิร์ด โดย 1 เวิร์ดมีขนาดเท่ากับ 2 ไบต์
เนื่องจากไมโครโพรเซสเซอร์ 8086 มีขาแอดเดรส 20 เส้น แต่รีจิสเตอร์ที่เก็บตำแหน่งของหน่วยความจำมีขนาด 16 บิต จึงมีการแบ่งหน่วยความจำออกเป็นบล็อกๆ เรียกว่าเซกเมนต์หน่วยความจำ ( Memory Segment ) โดยหนึ่งเซกเมนต์มีขนาด 216 หรือ 64K เซกเมนต์แต่ละเซกเมนต์กำหนดด้วยตัวเลขเซกเมนต์ ( Segment Number ) ซึ่งมีข้อมูขขนาด 16 บิต ค่าตัวเลขเซกเมนต์สูงสุด คือ 0FFFFH
ไบต์ 1,048,575
ไบต์ 1,048,574
ไบต์ 3
ไบต์ 2
ไบต์ 1
ไบต์ 0
รูป แสดงหน่วยความจำที่เก็บข้อมูลไบต์ขนาด 16 บิต
เมื่อมีการกำหนดตำแหน่งหน่วยความจำเป็นเซกเมนต์ การเข้าถึงหน่วยความจำต้องระบุว่าเป็นค่าตำแหน่งใดในเซกเมนต์นั้นๆ ค่านี้เรียกว่าค่าออฟเซต ( Offset Addressing ) คล้ายกับการมองหน่วยความจำเป็นตึกหนึ่งหลังโดยแต่ละห้องจะแทนตำแหน่งไบต์ข้อมูล ค่าเซกเมนต์จะแทนด้วยหมายเลขชั้นของตึก ส่วนตำแหน่งห้องในแต่ละชั้นจะแทนด้วยค่าออฟเซต โดยการบอกตำแหน่งห้องจะต้องบอกว่าอยู่ชั้นใด ห้องลำดับที่เท่าไร ดังนั้นในการบอกตำแหน่งหน่วยความจำที่ต้องการติดต่อจะต้องบอกทั้งเลขเซกเมนต์และค่าออฟเซตแอดเดรส ซึ่งมีรูปแบบเป็น
<> : <>
ค่าแอดเดรสแบบนี้เรียกว่า logical address ถ้าหากไมโครโพรเซสเซอร์ตัวที่กำลังศึกษาอยู่มีรีจิสเตอร์ที่เป็นตัวชี้เซกเมนต์ขนาด 16 บิต และรีจิสเตอร์ขนาดที่เป็นค่าออฟเซตขนาด 16 บิต ด้วยแอดเดรสของหน่วยความจำเริ่มต้นในแต่ละเวกเมนต์จะมีค่าออฟเซตเป็น 0000H และแอดเดรสสุดท้ายในเซกเมนต์นั้นจะมีค่าออฟเซตเป็น FFFFH ดังรูป
หน่วยความจำตำแหน่งต่างๆ
ตำแหน่งเริ่มต้นเซกเมนต์ ค่าออฟเซตเป็น 0000
รูป ตัวอย่างเซกเมนต์หน่วยความจำ
ตัวอย่างเช่นถ้าบอกค่าแอดเดรสเป็น A4FB:4872H หมายความว่าค่าออฟเซตเป็น 4872H ในเซกเมนต์ A4FBH สำหรับไมโครโพรเซสเซอร์ 8086 จะคำนวณค่า logic address เป็นข้อมูล 20 บิต หรือ physical address ได้โดยเลื่อนค่าเซกเมนต์แอดเดรสออกไป 4 บิต ซึ่งทำได้โดยเลื่อนฐาน 16 ออกไปหนึ่งหลักและบวกด้วยค่าออฟเซต ดังนั้นค่า physical address ของ A4FB : 4872 คือ
A4FB0H
+ 4872H
A9822H ( 20 บิต physical address )
การแบ่งหน่วยความจำออกเป็นเซกเมนต์นั้นเซกเมนต์แรกจะเป็นเซกเมนต์ที่ 0 โดยเริ่มที่ตำแหน่ง 0000 : 0000 = 00000H สิ้นสุดที่ตำแหน่ง 0000 : FFFF = 0FFFFH ต่อไปจะเป็นเซกเมนต์ที่ 1 เริ่มที่ตำแหน่ง 0001 : 0000 = 00010H และสิ้นสุดเซกเมนต์ที่ตำแหน่ง 0001 : FFFF = 1000FH จะเห็นว่าแต่ละเซกเมนต์จะมีตำแหน่งที่เหลื่อมซ้อนกันอยู่
ในไมโครโพรเซสเซอร์เบอร์ 8086 การเขียนโปรแกรมจะต้องกำหนดเซกเมนต์ต่างๆ ของหน่วยความจำ สำหรับเก็บโปรแกรมและเก็บข้อมูลต่างๆ ดังรูป การจัดเซกเมนต์หน่วยความจำ
FFFFF
Data EFFFF
Segment
E0000
Code segment ( CS )
B 3 F F Code
Segment C3FEF
Data segment ( DS ) B3FF0
E 0 0 0
Stack segment ( SS ) 6D26F
5 D 2 7
Extra segment ( ES )
5 2 B 9 0000
ถึงตรงนี้เราอาจมองว่าในการอ้างตำแหน่งต่างๆของหน่วยความจำในโหมดจริง จะต้องใช้รีจิสเตอร์ 2 ตัวเป็นตัวชี้ โดยรีจิสเตอร์ตัวหนึ่งเป็นค่าเซกเมนต์ โดยรีจิสเตอร์อีกตัวเป็นค่าออฟเซต ตัวอย่างเช่นการชี้ตำแหน่งความจำที่เก็บคำสั่งจะต้องใช้รีจิสเตอร์ 2 ตัว คือ รีจิสเตอร์ CS เป็นตัวชี้ segment รีจิสเตอร์ IP เป็นค่าออฟเซต และไมโครโพรเซสเซอร์จะนำรีจิสเตอร์ 2 ตัวมาคำนวณเป็นค่าแอดเดรสจริงได้
ดังรูป
16 บิต
CS A 0 0 0
+ 16 บิต
IP 5 F 0 0
20 บิต
A 5 F 0 0
รูป การนำรีจิสเตอร์ 2 ตัวมาชี้ตำแหน่งหน่วยความจำ
โครงสร้างของคอมพิวเตอร์ PC
ระบบคอมพิวเตอร์จะประกอบด้วยส่วนที่เป็นฮาร์ดแวร์(hardeare) ซอฟต์แวร์ (solftware) โดยซอฟต์แวร์หรือโปรแกรมจะทำหน้าที่ควบคุมต่างๆ ตามที่ต้องการ
การทำงานของคอมพิวเตอร์นั้นจะถูกควบคุมด้วยโปรแกรม และเนื่องจากคอมพิวเตอร์เป็นอุปกรณ์ที่ทำงานได้หลายอย่างซึ่งการทำงานแต่ล่ะอย่างจะต้องใช้โปรแกรมที่แตกต่างกัน ดังนั้นโปรแกรมจึงถูกเก็บไว้ในหน่วยความจำสำรอง เมื่อต้องการใช้โปรแกรมใดจะต้องเรียกโปรแกรมจากหน่วยความจำสำรองขึ้นมาเก็บในหน่วยความจำหลักเสียก่อนคอมพิวเตอร์จึงทำงานต่างๆต่อไปได้
ระบบปฎิบัติการ
ซอฟต์แวร์ที่สำคัญที่คอมพิวเตอร์จะต้องใช้คือระบบปฏิบัติการ(operating system)โดยซอฟแวร์ตัวนี้จะทำหน้าที่ควบคุมอุปกรณ์ทุกตัวที่ต่ออยู่กับระบบคอมพิวเตอร์ หน้าที่ต่างๆของระบบ ปฏิบัติการดังนี้
1. อ่านคำสั่งและทำตามคำสั่งที่ผู้ใช้พิมพ์เข้าไป
2. ควบคุมอุปกรณ์อินพุต เอาร์พุต
3. บอกข้อผิดพลาดต่างๆ
4. จัดการควบคุมหน่วยความจำ
ระบบปฏิบัติการที่นิยมใช้ในเครื่องคอมพิวเตอร์ IBM PC คือ Disk Operating System หรือ DOS ที่ใช้กันมีอยู่สองตัว คือ PC DOS และ MS DOS เมือ่คอมพิวเตอร์ทำงานจะถูกควบคุมโดยโปรแกรมดอสทันที หน้าที่สำคัญของดอสคืออ่านเขียนข้อมูลบนหน่วยความจำได้เมื่อคอมพิวเตอทำงานจะมีโปรแกรมย่อยตัวหนึ่งของ DOS ที่อยู่ในหน่วยควายจำสำรองคือโปรแกรม COMMAND.COM ซึ่งจะทำให้คอมพิวเตอร์รอรับคำสั่งและทำตามคำสั่งที่เราป้อนเข้าไป คำสั่งของ COMMAND.COM มีอยู่สองประเภทคือคำสั่งภายใน(internal) และคำสั่งภายนอก (extenal)
คำสั่งภายในของ command.com จะเป็นโปรแกรมย่อยของ ดอส ที่ถูกโหลดเข้าไปในหน่วยความจำและสามารถเรียกใช้ได้ทันทีคือคำสั่ง COPY,DIR,TIME เป็นต้น ส่วนคำสั่งภายนอกเมื่อเรียกใช้จะต้องมีไฟล์นั้นๆ อยู่ในหน่วยความจำสำรองเช่นคำสั่ง DISKCOPY,FORMAT เป็นต้น
โปรแกรม ดอส เป็นโปรแกรมที่อยู่ในแผ่นดิสก์หรือหน่วยความจำ ROM ระบบคอมพิวเตอร์ซึ่งเป็นโปรแกรมซึ่งมีประสิทธิภาพในการควบคุมฮาร์ดแวร์ต่างๆได้ดีกว่า เรียกโปรแกรม BIOS
โปรแกรม BIOS
BIOS เป็นโปรแกรมย่อยที่ควบคุมอุปกรณ์อินพุต เอาต์พุตของคอมพิวเตอร์ PC คล้ายๆกับโปรแกรมย่อยของ DOS แต่โปรแกรม BIOS จะเข้าถึงฮาร์ดแวร์ได้มากกว่าและโดยตรงกว่า DOS
หน่วยเชื่อมต่อบัส
หน่วยเชื่อมต่อบัสจะเป็นส่วนประกอบภายในไมโครโพเซสเซอร์ ทำหน้าที่อ่านรหัสคำสั่งจากหน่วยความจำเข้ามาเก็บใน CPU และทำตามคำสั่งนั้นที่เรียกว่า fetch,decode andexecute cycle
ในการอ่านหรัสคำสั่งจากหน่วยความจำมาเก็บในหน่วยเชื่อต่อบัส คำสั่งแต่ล่ะคำสั่งจะมีขนาดไม่เท่ากัน ความเร็วของการอ่านรหัสคำสั่งจะขึ้นกับความถี่สัญญาณนาฬิกาที่ป้อนให้กับ CPU ด้วย
ในหนังสือเล่มนี้รายละเอียดต่างๆ จะอ้างถึงไมโครโพรเซสเซอร์เบอร์ 8088 ซึ่งถือว่าเป็นพื้นฐานที่เข้าใจง่าย และสามารถนำคำสั่งต่างๆ ไปใช้กับไมโครโพรเซสเซอร์รุ่นสูงกว่าได้
ลิงค์ถึงเพื่อน
15 ปีที่ผ่านมา
ไม่มีความคิดเห็น:
แสดงความคิดเห็น