Operating System 2

Download Report

Transcript Operating System 2

Microprocessor and
Assembly Language
By Juthawut Chantharamalee
Suan Dusit Rajabhat University (Computer Science)
1
บทที่ 2 ไมโครโพรเซสเซอร์และไมโครคอนโทรลเลอร์
(Microprocessor and Microcontroller)
บทที่ 2
Suan Dusit Rajabhat University (Computer Science)
2
2.1 ไมโครโพรเซสเซอร์และไมโครคอนโทรลเลอร์
 ไมโครโพรเซสเซอร์ (Microprocessor) เป็ นอุ ปกรณ์อเิ ล็กทรอนิกส์ชนิดหนึง่
ซึง่ มีลกั ษณะวงจรรวม (Integrated Circuit) หรือชิพ (Chip) โครงสร้างภายในจะมี
วงจรรวมขนาดใหญ่ประกอบไปด้วย หน่วยคานวณทางคณิตศาสตร์ (Arithmetic
Unit) รีจสิ เตอร์ (Register) บัสข้อมูล (Data Bus) บัสควบคุม (Control Bus)
บัสทีอ่ ยู่ (Address Bus) รวมกันเป็ นหน่วยประมวลผลกลาง (Central
Processing Unit) เพือ่ ทาหน้าทีใ่ นการประมวลผลตามโปรแกรมคาสัง่ ทีป่ ้ อนเข้ามา
แสดงได้ดงั รูปที่ 2.1
Suan Dusit Rajabhat University (Computer Science)
3
รูปที่ 2.1 แสดงบล็อกไดอะแกรมของไมโครโพรเซสเซอร์
(Block Diagram of Microprocessor)
Suan Dusit Rajabhat University (Computer Science)
4
2.1 ไมโครโพรเซสเซอร์และไมโครคอนโทรลเลอร์
 ไมโครคอนโทรลเลอร์ (Microcontroller) เป็ นชิพประมวลผลประเภทหนึง่ ซึง่
ทาหน้าตามโปรแกรมหรือขุดคาสัง่ ทีเ่ ขียนขึน้ มา ภายในประกอบด้วยวงจรรวมขนาดใหญ่
(Very Large Scale Integrated Circuit) ประกอบไปด้วย หน่วยคานวณทาง
คณิตศาสตร์ (Arithmetic Unit) รีจสิ เตอร์ (Register) บัสข้อมูล (Data Bus)
บัสควบคุม (Control Bus) บัสทีอ่ ยู่ (Address Bus) รวมกันเป็ นหน่วย
ประมวลผลกลาง (Central Processing Unit) หน่วยความจา (Memory) วงจร
นับ (Counter Circuit) วงจรจับเวลา (Timing Circuit) หรือวงจรอืน่ ๆ รวมอยู่ใน
ชิพไมโครคอนโทรลเลอร์ แสดงได้ดงั รูปที่ 2.2
Suan Dusit Rajabhat University (Computer Science)
5
รูปที่ 2.2 แสดงไมโครคอนโทรลเลอร์ (Microcontroller)
Suan Dusit Rajabhat University (Computer Science)
6
2.2 ชนิดของไมโครโพรเซสเซอร์
2.2.1 Dedicated or Embedded Controller
เป็ นไมโครโพรเซสเซอร์ทใี่ ช้ในอุ ปกรณ์อเิ ล็กทรอนิกส์โดยเฉพาะที่ เช่น ใช้ในการ
ควบคุมการทางานของเครือ่ งซักผ้า เตาไมโครเวฟ เครือ่ งคิดเลข และอืน่ ๆ โดยมากมักจะ
เรียกไมโครโพรเซสเซอร์ ประเภทนีว้ ่า “ไมโครคอนโทรลเลอร์ (Micro Controller)” เช่น
TMS-1000 ของบริษทั Texas Instrument สาหรับบริษทั Intel ได้เริม่ พัฒนาจาก
ชิปขนาด 4 bits และในปี 1976 บริษทั Intel ได้เปิ ดตัว 8048 ซึง่ เป็ น
ไมโครคอนโทรลเลอร์ขนาด 8 bits ทีม่ ี RAM, ROM และ I/O port ภายในชิปตัว
เดียวกัน ในปัจจุบนั มี 8096 ซึง่ มีทงั้ 16-bit CPU, RAM, ROM, UART, Port,
Timer และ analog-to-digital converter ขนาด 16-bit ภายในชิปตัวเดียว
Suan Dusit Rajabhat University (Computer Science)
7
2.2 ชนิดของไมโครโพรเซสเซอร์
2.2.2 Bit-slice Processor
เป็ นไมโครโพรเซสเซอร์ทไี่ ด้รบั การพัฒนาให้สามารถนาฟั งก์ชนั บางอย่างทีไ่ ม่มใี น
ไมโครคอนโทรลเลอร์ เช่น ฟั งก์ชนั การทางานแบบ Multiplexer และ Sequencer เข้ามา
ทางานบนชิพประมวลผลได้ และสามารถควบคุมการทางานด้วยโปรแกรม โดยโปรแกรม
สาหรับฟั งก์ชนั การทางานต่างๆ เหล่านัน้ จะเรียกว่า “Micro Code”
Suan Dusit Rajabhat University (Computer Science)
8
2.2 ชนิดของไมโครโพรเซสเซอร์
2.2.3 General-purpose Processor
เป็ นไมโครโพรเซสเซอร์ทใี่ ช้ในอุ ปกรณ์อเิ ล็กทรอนิกส์โดยทัว่ ไป ซึง่ ควบคุมการทางานด้วย
โปรแกรม แบ่งตามรุ่นทีพ่ ฒั นาโดยบริษทั อินเทล ((Intel Corporation) ผู ผ้ ลิต โดยมี
การพัฒนามาตัง้ แต่รุ่น 4040 ซึง่ เป็ นไมโครโพรเซสเซอร์ขนาด 4 บิต และพัฒนาเป็ นรุ่น
Pentium จาแนกได้ดงั นี้
Suan Dusit Rajabhat University (Computer Science)
9
2.2 ชนิดของไมโครโพรเซสเซอร์
 8086 มี data bus ขนาด 16 bits ดังนัน้ จึงสามารถ อ่าน/เขียนข้อมูลได้ครัง้ ละ
16 bit 8086 มี data bus ขนาด 16 bits ดังนัน้ จึงสามารถ อ่าน/เขียนข้อมูล
ได้ครัง้ ละ 16 bits หรือ 8 bits
 8086 มี address bus ขนาด 20 bits ดังนัน้ จึงสามารถระบุตาแหน่งใน
หน่วยความจาได้สูงสุด 220 หรือ 1,048,576 ตาแหน่ง โดยแอดเดรสแต่ละ
ตาแหน่งจะจัดเก็บข้อมูลขนาด 8 bits ข้อมูลขนาด 16 bit word จะถูกจัดเก็บไว้ใน
หน่วยความจา ตาแหน่งทีแ่ อดเดรสอยู่ต่อจากกัน ดังนัน้ ถ้าไบต์แรกของ word ถูก
จัดเก็บไว้ใน memory address เลขคู่ 8086 จะสามารถอ่านได้ภายในการปฏิบตั ิ
เพียงครัง้ เดียว แต่ถา้ ไบต์แรกของ word ถูกจัดเก็บไว้ใน memory address เลขคี่
8086 จะอ่านข้อมูลนัน้ โดยใช้ Bus Operation 2 ครัง้ (อ่านทีละ byte)
Suan Dusit Rajabhat University (Computer Science)
10
2.2 ชนิดของไมโครโพรเซสเซอร์
 8088 เป็ นไมโครโพรเซสเซอร์ขนาด 16 bit (ALU, รีจสิ เตอร์ภายใน และชุดคาสัง่
(Instruction) จะมีขนาด 16 bit word เช่นเดียวกับ 8086)
- 8088 มี data bus ขนาด 8 bits ดังนัน้ จึงสามารถอ่าน หรือเขียนข้อมูลได้ครัง้ ละ
8 bits เท่านัน้ ใน การอ่าน/เขียนข้อมูลหรือชุดคาสัง่ ขนาด 16 bits จะต้องใช้ Bus
Operation 2 ครัง้
- 8088 มี address bus ขนาด 20 bits ดังนัน้ จึงสามารถ address ตาแหน่งใน
หน่วยความจาได้สูงสุด 220 หรือ 1,048,576 ตาแหน่ง
Suan Dusit Rajabhat University (Computer Science)
11
2.2 ชนิดของไมโครโพรเซสเซอร์
 80186 และ 80188 เป็ นไมโครโพรเซสเซอร์ทปี่ รับปรุงมาจาก 8086 และ
8088 นอกจากทัง้ คู่จะเป็ น CPU ขนาด 16 bit แล้ว ยังมี programmable
peripheral devices บูรณาการรวมอยู่ใน package เดียวกัน ชุดคาสัง่ ต่างๆ ใน
80186 และ 80188 เป็ น superset ของชุดคาสัง่ ของ 8086 และ 8088 ซึง่
หมายความว่าชุดคาสัง่ เดิมใน 8086 และ 8088 ยังคงสามารถทางานได้ใน
80186 และ 80188 โดยมีชุดคาสัง่ เพิม่ เติมไม่มากนัก ดังนัน้ โปรแกรมทีเ่ ขียนให้
สามารถทางานได้ใน 8086 หรือ 8088 จะยังคงสามารถทางานได้ใน 80186 และ
80188 (เรียกว่า upward compatible) แต่โปรแกรมทีเ่ ขียนให้ทางานบน
80186 และ 80188 อาจจะไม่สามารถทางานได้ใน 8086 และ 8088
Suan Dusit Rajabhat University (Computer Science)
12
2.2 ชนิดของไมโครโพรเซสเซอร์
 80286 เป็ นไมโครโพรเซสเซอร์ ทีป่ รับปรุงมาจาก 8086 (มีการปรับปรุงใน
ระดับสูง) ทีไ่ ด้รบั การ ออกแบบให้ใช้เป็ น CPU ในเครือ่ งไมโครคอมพิวเตอร์ทมี่ ี
ความสามารถในการทางานแบบ Multi-user/ Multitasking การทางานของ
80286 ใน real address mode จะมีฟังก์ชนั การทางานเหมือน 8086
ความเร็วสูงการทางานใน virtual address mode จะมีคุณสมบัตใิ นการแยก
โปรแกรมประยุกต์ของ ผู ใ้ ช้ออกจากระบบปฏิบตั กิ าร เพือ่ ไม่ให้ส่วนของโปรแกรมไป
ทาลายโปรแกรมระบบได้
Suan Dusit Rajabhat University (Computer Science)
13
2.2 ชนิดของไมโครโพรเซสเซอร์
 80386 และ 80486 เป็ นไมโครโพรเซสเซอร์ ขนาด 32 bit ซึง่ สามารถระบุ
ตาแหน่งของแอดเดรสในหน่วยความจาได้สูงสุดถึง 4GB และมีการนาเทคโนโลยี RISC
(Reduced Instruction Set Computer) มาใช้ ทาให้มคี ุณสมบัตทิ ซี่ บั ซ้อนเพิม่ มาก
ขึน้ ในเรือ่ งของการทางานแบบ Multi-user/ Multitasking
Suan Dusit Rajabhat University (Computer Science)
14
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
 ไมโครโพรเซสเซอร์ตระกูลของ Intel จะมีโครงสร้างสถาปัตยกรรมในลักษณะเดียวกัน
สาหรับการเริม่ ต้น เราจะศึกษาโครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์จาก
8086 เพือ่ ให้เข้าใจได้โดยง่าย และไม่ซบั ซ้อนมากนักและก่อนทีจ่ ะเข้าไปถึงการเขียน
โปรแกรมสาหรับทางานบน 8086 จะต้องทราบโครงสร้างการทางานภายใน ไม่ว่าจะเป็ น
ALU, Flag, Register, Instruction Byte Queue และ Segment
Register 38 CPU 8086 มีแอดเดรส 20 เส้น (Address Bus 20 bits) ทาให้
สามารถอ้างถึงแอดเดรสได้ 1,045,576 ไบต์ (หรือ 1 MB - เมกะไบต์) หรือมาก
เป็ น 16 เท่า ของไมโครโปรเซสเซอร์ขนาด 8 บิต และมี data bus ขนาด 16 บิต
จึงทาให้ CPU 8086 สามารถเรียกข้อมูลได้ทลี ะ 1 เวิร์ด หรือ 2 ไบต์ และยัง
เตรียมพร้อมสาหรับการทางานแบบหลาย CPU รวมทัง้ การทางานร่วมกับอุ ปกรณ์อนื่
ได้ด้วย แสดงได้ดงั รูปที่ 2.3
Suan Dusit Rajabhat University (Computer Science)
15
รูปที่ 2.3 แสดง Block Diagram ของ ซีพยี ู (CPU 8086)
Suan Dusit Rajabhat University (Computer Science)
16
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
 8086 แบ่งส่วนตามฟั งก์ชนั การทางานทีเ่ ป็ นอิสระต่อกันออกเป็ น 2 ส่วน คือ BIU
(Bus Interface Unit) และ EU (Execution Unit) เพราะจะทาให้
ความเร็วในการทางานสูงขึน้
- BIU จะทาหน้าทีส่ ่งค่าแอดเดรสเพือ่ ไป fetch คาสัง่ จากหน่วยความจา, อ่าน
ข้อมูลจากหน่วยความจา และพอร์ต, และเขียนข้อมูลไปยังหน่วยความจา และพอร์ต
- EU ของ 8086 จะบอก location ทีจ่ ะไป fetch instruction,
decode instruction และ execute instruction
Suan Dusit Rajabhat University (Computer Science)
17
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
2.3.1 EU (Execution Unit) ประกอบด้วย
- Control Circuitry ทาหน้าทีค่ วบคุม Operation ภายในทัง้ หมด
- Instruction Decoder ทาหน้าทีแ่ ปลความหมายของชุดคาสัง่ ทีน่ ามา
จาก Memory ให้เป็ นลาดับของภาษาเครือ่ งที่ EU สามารถปฏิบตั ไิ ด้
- ALU มีขนาด 16 bits ซึง่ มีฟังก์ชนั ในการ Add (บวก), Subtraction
(ลบ), AND, OR, XOR, increment, decrement,
complement และ shift
Suan Dusit Rajabhat University (Computer Science)
18
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
- Flag Register เป็ น flip-flop ทีแ่ สดงสถานะของการ execute
instruction หรือการควบคุมการทางานของชุดคาสัง่ Flag Register ขนาด
16 บิต ใน EU จะบรรจุ active flag 9 ตัว โดยเป็ น flag แสดงสถานะ
(Condition flags) จานวน 6 บิต และ flag ควบคุม (Control flags)
จานวน 3 บิต สาหรับบิตส่วนทีเ่ หลือก็ไม่ได้ใช้ประโยชน์ใดๆ แสดงได้ดงั รูปที่ 2.4
Suan Dusit Rajabhat University (Computer Science)
19
รูปที่ 2.4 แสดงสถานะแฟล็ก (Flag Status)
ทีใ่ ช้ในการตรวจสอบการทางานของซีพยี ู (CPU 8086)
Suan Dusit Rajabhat University (Computer Science)
20
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
แฟล็กแสดงสถานะ (Conditional Flag) มีทงั้ หมด 6 ตัว จะถูกใช้ในการ
แสดงเงือ่ นไขบางอย่างทีส่ ร้างโดยชุดคาสัง่ ในการ SET หรือ RESET ค่า Flag
เหล่านี้ จะดาเนินการโดย EU บนพืน้ ฐานของผลลัพธ์ของการคานวณ เช่น carry
out flag จะถูก set ให้มคี ่าเป็ น 1 หากผลลัพธ์ของการบวกเลขฐาน 2 จานวน 16
bits มีตวั ทดหลักเพิม่ เติมจากบิตทีม่ คี วามสาคัญสูงสุด หรือ MSB (Most
Significant Bit)
- CF (Carry Flag) จะถูก SET เมือ่ มี CARRY OUT ของ MSB
- PF (Parity Flag) จะถูก SET เมือ่ ผลลัพธ์ม ี parity เป็ น EVEN
- AF (Auxiliary Carry Flag) สาหรับ BCD
- ZF (Zero Flag) จะถูก SET เมือ่ ผลลัพธ์ = 0
Suan Dusit Rajabhat University (Computer Science)
21
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
- SF (Sign Flag) เป็ นค่า MSB ของผลลัพธ์ (0 เป็ นค่าบวก และ 1 เป็ นค่าลบ)
- OF (Overflow Flag) จะถูก SET เมือ่ ผลลัพธ์เกิดการ Overflow
แฟล็กควบคุม (Control Flag) มีทงั้ หมด 3 ตัว จะถูกใช้ในการควบคุมการ
ปฏิบตั ทิ แี่ น่นอนของโพรเซสเซอร์ ซึง่
แฟล็กเหล่านีจ้ ะถูก SET หรือ RESET โดยเจตนาของชุดคาสัง่ ทีใ่ ส่ไว้ในโปรแกรม
- TF (Trap Flag) ถูกนามาใช้สาหรับโปรแกรมทีท่ างานในลักษณะ Single Step
- IF (Interrupt Flag) ถูกใช้ในการกาหนดให้อนุญาตหรือปฏิเสธการ
อินเตอร์รพั ต์โปรแกรม
- DF (Direction Flag) ถูกนามาใช้กบั ชุดคาสัง่ ทีเ่ ป็ น String
Suan Dusit Rajabhat University (Computer Science)
22
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
 แฟล็ก (flag) จะได้ถูกออกแบบมาเพือ่ แสดงผลของการกระทาทางคณิตศาสตร์
และลอจิก สถานะทีเ่ ป็ นไปได้ของflag จะมีได้แค่สองสถานะ คือ ถูกเซตทาให้มคี ่าเป็ น 1
หรือถูกรีเซตให้มคี ่าเป็ น 0 แฟล็กตัวทด (carry flag) จะแสดงลักษณะบอกการ
ทดหรือ การขอยืมของบิตสูงสุดของผลลัพธ์ , แฟล็กพาริต้ ี (parity flag) จะใช้
แสดงจานวนคู่หรือคีข่ องตัวเลขทีเ่ ป็ น 1 ในรีจสิ เตอร์ ถ้าเป็ นคู่ flag นีจ้ ะถูกเซตเป็ น
1, แฟล็กตัวทดช่วย (auxiliary carry flag) จะใช้งานแบบ "decimal
adjust" ในการคานวณ BCD, แฟล็กศูนย์ (zero flag) จะมีค่าเป็ น 1 เมือ่
ผลลัพธ์เป็ นศูนย์แฟล็กเครือ่ งหมาย (sign flag) จะได้รบั การเซตเมือ่ ผลลัพธ์เป็ น
เลขจานวนลบ
Suan Dusit Rajabhat University (Computer Science)
23
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
 แฟล็กควบคุมทิศทาง (direction flag) จะกาหนดทิศทางของกลุม่
คาสัง่ เกีย่ วกับสตริง ว่าจะมีทศิ ทางการทางานจากแอดเดรสมากไปน้อยหรือจาก
แอดเดรสน้อยไปมาก แฟล็กอินเตอร์รพั ต์ (IE) ถ้าถูกเซตเป็ น 1 แสดงว่าจะยอมรับ
อินเตอร์รพั ต์จากภายนอก โดยหยุดการทางานตามปกติของโปรแกรมไว้ก่อน และ
Tap flag (TF) จะทาให้ 8086 ทางานแบบทีละคาสัง่ เพือ่ การแก้ไขโปรแกรม
Suan Dusit Rajabhat University (Computer Science)
24
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
 2.3.2 BIU (Bus Interface Unit) ประกอบด้วย
- Queue : BIU จะจัดเก็บชุดคาสัง่ ที่ fetch มาจากหน่วยความจาได้สูงสุด 6
คาสัง่ โดยจะใช้เทคโนโลยีทเี่ รียกว่า FIFO (First-In First-Out) เมือ่ EU
พร้อมทีจ่ ะทางานกับชุดคาสัง่ ต่อไปก็เพียงแต่นาข้อมูลและชุดคาสัง่ มาจาก Queue โดย
ไม่ต้องไปยุ่งเกีย่ วกับ Bus จึงสามารถทางานได้เร็วขึน้ อีกหลายเท่า แทนทีจ่ ะต้องรอการ
อ่านข้อมูลและชุดคาสัง่ มาจากหน่วยความจาภายนอก เว้นแต่ว่าเมือ่ เมือ่ พบคาสัง่ JMP
(Jump) หรือ CALL ทีต่ ้องเรียกข้อมูลมาจากแอดเดรสทีก่ าหนดไว้ในโปรแกรม
คุณสมบัตใิ นการ Fetch คาสัง่ ต่อไปมาเก็บไว้ใน Queue ในขณะที่ EU กาลัง
execute คาสัง่ อืน่ อยู่ เรียกว่า Pipelining
Suan Dusit Rajabhat University (Computer Science)
25
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
- Segment Register : BIU จะส่งค่า address ขนาด 20 bits
ออกไป ดังนัน้ จึงสามารถทีจ่ ะระบุตาแหน่งใน Memory ได 220 =
1,045,576 bytes แต่อย่างไรก็ตาม 8086 จะสามารถทางานกับ segment
4 ส่วน ในหน่วยความจา (ส่วนละ 65,536 bytes = 64 Kbyte) ดังนัน้
ภายในหน่วยความจาขนาด 1 Mbyte (1,045,576 bytes) จึงต้องมี
segment register 4 ตัว เพือ่ จัดเก็บค่าแอดเดรสจุดเริม่ ต้นของแต่ละ
Segment ในหน่วยความจา ที่ 8086 ใช้ในการทางาน
- CS (Code Segment) - SS (Stack Segment)
- ES (Extra Segment) - DS (Data Segment)
Suan Dusit Rajabhat University (Computer Science)
26
2.3 โครงสร้างสถาปัตยกรรมของไมโครโพรเซสเซอร์
Segment Register ถูกใช้ในการจัดเก็บค่าแอดเดรสขนาด 16 bits ของ
จุดเริม่ ต้นของแต่ละส่วน ตัวอย่างเช่น Code Segment Register จะจัดเก็บค่า
แอดเดรสเริม่ ต้นของหน่วยความจาส่วนที่ BIU fetch instruction มา โดย
BIU จะใส่ค่า 0 ให้กบั 4 bits สุดท้ายของแอดเดรสขนาด 20 bits เช่นถ้า code
segment register มีค่า 348A (Hex) แสดงว่าส่วนในหน่วยความจา ที่
จัดเก็บโปรแกรมจะเริม่ ต้นที่ address 348A0 (Hex) จึงหมายความว่าแต่ละส่วน
ขนาด 64 K สามารถทีจ่ ะอยู่ตาแหน่งใดในหน่วยความจาขนาด 1 MB
Stack เป็ นส่วนของหน่วยความจาทีแ่ ยกไว้ต่างหาก เพือ่ จัดเก็บค่าแอดเดรสเริม่ ต้น
ของโปรแกรมย่อยและเก็บข้อมูลทีใ่ ช้ในโปรแกรมย่อย ในขณะทีท่ าการ execute
Subprogram หรือ Procedure
Suan Dusit Rajabhat University (Computer Science)
27
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
 การอินเตอร์รพั ต์ของ 8086 อาจจะมาจากหลาย ๆ แหล่งได้ เช่นอินเตอร์รพ
ั ต์ทมี่ า
จากอุ ปกรณ์ภายนอกอินเตอร์รพั ต์ทาง software หรืออินเตอร์รพั ต์ทมี่ าจากตัว
CPU 8086 เองก็ได้ อินเตอร์รพั ต์จากอุ ปกรณ์ภายนอกจะเข้ามาทางขา 2 ขา คือ
INTR (interrupt request) และ NMI(non-maskable
interrupt) โดยที่ INTR จะถูกกาหนดให้ทางานได้โดยคาสัง่ IE
(interrupt enable flag) ทีเ่ ป็ นส่วนหนึง่ ของ 8086 flag ถ้า flag IE
ถูกเซตจะ ทาให้ 8086 สามารถจะรับอินเตอร์รพั ต์จาก INTR ได้ แต่ถา้ IF ถูก
เคลียร์ 8086 จะไม่รบั อินเตอร์รพั ต์จาก INTR ส่วน NMI จะเป็ นอินเตอร์รพั ต์
ทีไ่ ม่สามารถจะหยุดได้ มักจะใช้ในกรณีทเี่ กิดเหตุการณ์สาคัญ เช่น เกิดความผิดพลาด
ของพาริต้หี น่วยความจา (memory parity) หรือเกิดไฟตก เป็ นต้น
Suan Dusit Rajabhat University (Computer Science)
28
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
 INTO (interrupt overflow) คือ อินเตอร์รพั ต์ของ 8086 ที่
เกิดจากข้อผิดพลาดของการหารและการทางานทีละขัน้ ข้อผิดพลาดจากการหาร
(divide error) เกิดขึน้ เนือ่ งจากผลของการหารอาจจะมีค่ามากกว่าเนือ้ ทีซ่ งึ่
เตรียมไว้เป็ นทีเ่ ก็บผลลัพธ์ หรืออาจจะเกิดจากการหารด้วยเลข 0 ส่วนลักษณะของการ
ทางานทีละขัน้ (single step) จะเป็ นอินเตอร์รพั ต์ทเี่ กิดเนือ่ งจากการ execute
คาสัง่ ทีละคาสัง่ เหตุการณ์นเ้ ี กิดขึน้ เนือ่ งจาก TF (trap flag) ในรีจสิ เตอร์แฟล็
กถูกเซตให้เป็ น 1
Suan Dusit Rajabhat University (Computer Science)
29
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
เมือ่ เกิดอินเตอร์รพั ต์เหล่านีข้ น้ ึ มาแล้วก็จะเกิดเหตุการณ์เฉพาะอย่างขึน้ ถ้ามีการ
อินเตอร์รพั ต์จากภายนอก คาสัง่ ชุดสุดท้ายจะถูก execute จนเสร็จสิน้ ก่อน (ยกเว้น
ถ้าเป็ นคาสัง่ MOV หรือ POP จะมีการ execute คาสัง่
ต่อไปก่อนแล้วจึงหยุด) อินเตอร์รพั ต์ทุกตัวจะทาการเก็บค่าของแฟล็กรีจสิ เตอร์ไว้ในสแตก
เสร็จแล้ว 8086 จะทาการรีเซตแฟล็ก IF และ TF ให้เป็ น 0 ทัง้ นีเ้ พือ่ ป้ องกัน INTR
อินพุ ตทีเ่ ข้ามาใหม่ และป้ องกันการเกิดการทางานทีละขัน้ ในขณะทีอ่ ยู่ในโปรแกรม
อินเตอร์รพั ต์ เนือ่ งจากการทีแ่ ฟล็กถูกเก็บค่าไว้หลังจากโปรแกรมอินเตอร์รพั ต์สน้ ิ สุดแล้ว
ค่าต่าง ๆ ทีเ่ ก็บไว้จะถูกดึงกลับมาใช้งานได้
Suan Dusit Rajabhat University (Computer Science)
30
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
จากนัน้ 8086 จะทาการเก็บค่าของ CS และ IP ลงบนสแตกเพือ่ ทีจ่ ะเก็บ
ตาแหน่งของแอดเดรสส่งกลับ (return address) ในลักษณะเดียวกับคาสัง่
CALL และในขัน้ ตอนสุดท้าย CS และ IP จะถูกอ่านจากตาราง interrupt
vector (ขึน้ กับหมายเลขอินเตอร์รพั ต์) ตาราง interrupt vector ก็คอื
บริเวณของเนือ้ ทีข่ องหน่วยความจาเริม่ ตัง้ แต่แอดเดรส 0000 จานวน หนึง่ กิโลไบต์ ดัง
แสดงได้ดงั รูปที่ 2.5
Suan Dusit Rajabhat University (Computer Science)
31
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
อินเตอร์รพั ต์แต่ละตัวจะชีไ้ ปยังตาแหน่งทีแ่ น่นอนและสามารถทีจ่ ะกระโดดไปถึงทีก่ าหนด
ได้โดยอัตโนมัต ิ เมือ่ เกิดอินเตอร์รพั ต์จากลักษณะของ divide error จะทาให้ เกิด
อินเตอร์รพั ต์ 0, single-step จะเป็ นอินเตอร์รพั ต์ 1, อินเตอร์รพั ต์แบบ Nonmaskable เป็ นแบบอินเตอร์รพั ต์ 2 , bread-point จะเกิดอินเตอร์รพั ต์ 3 ,
และการเกิด over flow จะเป็ นอินเตอร์รพั ต์ 4 ส่วน อินเตอร์รพั ต์ 5 ถึง 31
เตรียมไว้สาหรับ ผู ใ้ ช้จะกาหนดเอาเองภายหลัง ส่วน อินเตอร์รพั ต์ทเี่ หลือเราอาจจะ
ควบคุมโดยใช้คาสัง่ INTR หรือ INT ได้
Suan Dusit Rajabhat University (Computer Science)
32
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
สาหรับ INTR จะตอบรับสัญญาณอินเตอร์รพั ต์จากภายนอก ส่วน INT จะรับ
ได้โดยตัวคาสัง่ นัน่ เอง CPU 8086 สามารถทีจ่ ะรับรู้ชนิดของการอินเตอร์รพั ต์ได้
โดยการคูณค่าของคาสัง่ ด้วย 4 ผลลัพธ์ทไี่ ด้จะบอกตาแหน่งของตารางอินเตอร์รพั ต์
ซึง่ ค่าของตารางจะถูกส่งค่าไปยัง CS และ IP ค่าต่าง ๆในตาราง เราจะต้องเป็ นผู ้
กาหนดโดยกาหนดเป็ นค่าของเซกเมนต์และค่าของออฟเซตทีแ่ สดงตาแหน่งของ
อินเตอร์รพั ต์รูทนี เช่น อินเตอร์รพั ต์ทแี่ อดเดรส 0-3 จะถูกต้องกาหนดเป็ นค่าบอก
แอดเดรสของ CS และ IP เพือ่ จะชีร้ ูทนี ของ divide error เป็ นต้น
Suan Dusit Rajabhat University (Computer Science)
33
2.4 การเกิดอิ นเตอร์รัพต์ (Interrupt Handle)
อินเตอร์รพั ต์รูทนี จะต้องเริม่ ต้นด้วยการเก็บค่าของรีจสิ เตอร์ ต่าง ๆไว้ก่อน เพราะ
เราไม่ทราบว่าจะเกิดอินเตอร์รพั ต์เมือ่ ถึงจุดใด และเราไม่ต้องการทาให้ค่า รีจสิ เตอร์ต่าง ๆ
เสียไปและเราต้อง ปิ ดท้ายรูทนี ด้วยคาสัง่ IRET คาสัง่ นีจ้ ะทางานเหมือนคาสัง่ RET
ธรรมดาแต่จะทาการอ่านค่าของแฟล็กออกมาจากสแตกด้วย
Suan Dusit Rajabhat University (Computer Science)
34
รูปที่ 2.5 แสดงการเกิดอินเตอร์รพั ต์ ทีต่ าแหน่ง 0000- 03FF
ขนาด 1 กิโลไบต์ (1Kbytes)
Suan Dusit Rajabhat University (Computer Science)
35
2.5 รีจีสเตอร์ของซีพยี ู 8086
CPU 8086 ประกอบด้วยรีจสิ เตอร์ทเี่ กีย่ วข้อง ออกเป็ น 2 กลุม่ ดังนี้
2.5.1 กลุม่ ข้อมูล (Data Group Register) แบ่งออกเป็ น
2.5.1.1 รีจสี เตอร์ทวั่ ไป (General-Purpose Register)
2.5.1.2 รีจสิ เตอร์ตวั ชี้ (Instruction Pointer Register)
2.5.1.3 แฟล็ก (flag)
2.5.2 กลุม่ กาหนดเซกเมนต์ (Segment Register) แบ่งออกเป็ น
2.5.2.1 รีจสิ เตอร์กาหนดเซกเมนต์ (Segment Register)
Suan Dusit Rajabhat University (Computer Science)
36
รูปที่ 2.6 แสดงรีจสี เตอร์ทใี่ ช้ในไมโครโพรเซสเซอร์ 8086
Suan Dusit Rajabhat University (Computer Science)
37
2.5 รีจีสเตอร์ของซีพยี ู 8086
2.5.1.1 รีจีสเตอร์ทั่วไป (General-Purpose Register)
รีจสิ เตอร์ทมี่ อี ยู่ทงั้ หมดของ 8086 เป็ นรีจสิ เตอร์ขนาด 16 บิต ซึง่ กลุม่ ข้อมูลจะ
แบ่งย่อยออกเป็ น
1. รีจิสเตอร์ AX (Accumulator) หรือแอกคูมวิ เลเตอร์ จะประกอบด้วย
AH และ AL โดย AX ทาหน้าทีใ่ นการใช้คูณหารหรือเป็ นรีจสิ เตอร์เกีย่ วกับอินพุ ต
เอาต์พุตทีเ่ ป็ นเวิร์ดส่วน AL ทาหน้าทีใ่ ช้ในการ คานวณ คูณหาร หรือทางานเกีย่ วกับ
อินพุ ต (Input) เอาต์พุท (Output) แปลง ข้อมูลจัดการคานวณ แบบตัว
เลขฐานสิบแบบ 8 บิต และ AH ใช้เป็ นรีจสิ เตอร์ในการคูณและหารได้
Suan Dusit Rajabhat University (Computer Science)
38
2.5 รีจีสเตอร์ของซีพยี ู 8086
2. รีจิสเตอร์ BX (Base Register) หรือเบสรีจสิ เตอร์ใช้ในการแปลงข้อมูล
3. รีจิสเตอร์ CX (Counter Register) หรือรีจสิ เตอร์ตวั นับใช้ในคาสัง่
จัดการเกีย่ วกับสตริง และการทาลูป CL ใช้เป็ นตัวแปรสาหรับการเลือ่ นบิตหรือหมุนบิต
4. รีจิสเตอร์ DX (Data Register) หรือรีจสิ เตอร์ขอ้ มูลใช้ในคาสัง่ คูณ
หารเป็ นเวิร์ด (Words) หรือใช้ ในรูปแบบอ้างอินพุ ตเอาต์พุตแบบอ้อม แสดงได้
ดังรูปที่ 2.6
Suan Dusit Rajabhat University (Computer Science)
39
2.5 รีจีสเตอร์ของซีพยี ู 8086
2.5.1.2 รีจิสเตอร์ตัวชี้ (Instruction Pointer Register)
รีจสิ เตอร์ใช้งานทัว่ ไปในกลุม่ ตัวชีแ้ ละอินเด็กซ์ ประกอบด้วย SP หรือสแต็กพอยน์
เตอร์ใช้กบั คาสัง่ สแตก สาหรับรีจสิ เตอร์ต้นทางหรือ SI (Source Index)
รีจสิ เตอร์ ปลายทางหรือ DI (Destination Index) จะใช้กบั คาสัง่ ทีเ่ กีย่ วกับ
สตริง และเบสพอยน์เตอร์หรือ BP (base pointer) รีจสิ เตอร์เหล่านีส้ ามารถทีจ่ ะ
นามาใช้เป็ นตัวอ้างถึง Physical address ได้ด้วยวิธกี ารต่างๆ แสดงได้ดงั รูปที่ 2.7
Suan Dusit Rajabhat University (Computer Science)
40
รูปที่ 2.7 แสดงโครงสร้างรีจสี เตอร์ของ 8086 กับการคานวณหาค่าตาแหน่งในหน่วยความจา
Suan Dusit Rajabhat University (Computer Science)
41
2.5 รีจีสเตอร์ของซีพยี ู 8086
2.5.2.1 รีจิสเตอร์กาหนดเซกเมนต์ (Segment Register)
ประกอบด้วยรีจสี เตอร์ย่อยมี 4 ตัว คือ CS (code segment), DS
(data segment), SS (stack segment) และ ES (extra
segment) ซึง่ จะนามาใช้ในหลักการแบบบล็อกแอดเดรสของ 8086 หน่วยความจา
(Memory) จะได้รบั การจัดสรรเป็ นส่วนใหญ่ ๆ คือ code (หรือชุดคาสัง่ ), ข้อมูล
(ตัวเลข หรือตัวอักษร) และสแตกสาหรับการเก็บค่าแอดเดรสกลับคืนจากโปรแกรมย่อย
เพือ่ ทีจ่ ะป้ องกันการสับสน จึงกาหนดค่าให้แยกกันได้ซงึ่ 8086 จะมองลักษณะของ
หน่วยความจา โดยแบ่งหน่วยความจาเป็ นกลุม่ ๆ ในรูปแบบของ เซกเมนต์ ในหนึง่ เซกเมนต์
จะชีไ้ ด้ถงึ 64 กิโลไบต์ โดยเซกเมนต์รจี สี เตอร์ทงั้ สีต่ วั จะแสดงแอดเดรสเริม่ ต้นของ
หน่วยความจาทีจ่ ะติดต่อด้วย
Suan Dusit Rajabhat University (Computer Science)
42
รูปที่ 2.8 แสดงการแบ่งกลุม่ ของ Segment Register
Suan Dusit Rajabhat University (Computer Science)
43
2.5 รีจีสเตอร์ของซีพยี ู 8086
 เซกเมนต์จะแสดงตาแหน่งเหมือนกับ Paragraph โดยจะเลือ่ นไปทางซ้าย 4 บิต
เพือ่ ทีจ่ ะกาหนด หรืออ้างแอดเดรสให้ครบ 20 เส้น โดยจุดเริม่ ต้นของ
Paragraph จะต้องมี 4 บิต หลังสุดเป็ น 0 เช่น เป็ น 00000H, 00010H
, 00020H เป็ นต้น จากรูป ค่าของ SS จะชีต้ าแหน่งของเซกเมนต์ค่า D89F0
สังเกตเห็นว่าส่วนพืน้ ที่ ของหน่วยความจาอาจจะสลับหรือใช้บริเวณเดียวกันของ
หน่วยความจาได้แสดงได้ดงั รูปที่ 2.8
Suan Dusit Rajabhat University (Computer Science)
44
รูปที่ 2.9 แสดงตาแหน่งเหมือนกับ Paragraph ใน Segment Register
Suan Dusit Rajabhat University (Computer Science)
45
2.5 รีจีสเตอร์ของซีพยี ู 8086
 เพือ่ ทีจ่ ะทาการติดต่อกับข้อมูลหนึง่ ไบต์หรือหนึง่ เวิร์ดนัน้ 8086 ได้เตรียมค่า
ออฟเซต เพือ่ ใช้อ้างตาแหน่งตัง้ แต่จุดเริม่ ต้นของเซกเมนต์แอดเดรส ตาแหน่งใด ๆ จะ
ได้มาจากการบวกค่า เซกเมนต์ รีจสิ เตอร์กบั ค่าของออฟเซต 16 บิต เช่นถ้า
เซกเมนต์มคี ่า E89F จะให้ออฟเซตมีค่า 0003H จะทาให้การอ้างแอดเดรสไปที่
89F3 การจะใช้เซกเมนตฺ รจี สิ เตอร์และค่าออฟเซตตัวใดนัน้ จะขึน้ อยู่กบั ชนิดของคาสัง่
ด้วย ดังแสดงในตารางที่ 2.1
Suan Dusit Rajabhat University (Computer Science)
46
ตารางที่ 2.1 แสดงชนิดของการอ้างอิงหน่วยความจาในเซกเมนต์รจี สี เตอร์
Suan Dusit Rajabhat University (Computer Science)
47
2.6 การระบุตาแหน่งในรีจีสเตอร์
 การเข้าถึงข้อมูลในรีจสิ เตอร์นบั ว่าเป็ นหัวใจสาคัญในการเขียนโปรแกรมควบคุมการ
ทางานของไมโครโพรเซสเซอร์ 8086 สามารถ access เข้าไปในส่วนของโปรแกรม
โดยใช้ค่าในรีจสิ เตอร์ โดย
CS + IP -> physical address (20 bits)
แสดงได้ดงั รูปที่ 2.10
Suan Dusit Rajabhat University (Computer Science)
48
รูปที่ 2.10 แสดงการบวกค่าในรีจสี เตอร์ CS และ IP เพือ่ คานวณหา Physical Address
Suan Dusit Rajabhat University (Computer Science)
49
2.6 การระบุตาแหน่งในรีจีสเตอร์
ในการ Access เข้าไปยังข้อมูล เพือ่ นามาใช้ในการทางาน เรียกว่า “addressing
mode” ซึง่ ในภาษาแอสเซมบลี ใช้คาสัง่
MOV: format -- MOV destination, source
เมือ่ ชุดคาสัง่ นีถ้ ูก execute 8086 จะทาการคัดลอก word หรือ byte
จากตาแหน่งต้นทางไปยังจุดหมายปลายทาง Addressing Mode ใช้ในการระบุ
ตาแหน่งของ operand ใน Memory ซึง่ สามารถแบ่งวิธกี ารเข้าถึงหน่วยความจา
ได้ดงั นี้ คือ
Suan Dusit Rajabhat University (Computer Science)
50
2.6 การระบุตาแหน่งในรีจีสเตอร์
2.6.1 Immediate Addressing Mode
เป็ นวิธกี ารอย่างง่ายในการกาหนดแอดเดรสในรีจสิ เตอร์ กล่าวคือสามารถกาหนด
operand ซึง่ เป็ นค่าแอดเดรสให้กบั ชุดคาสัง่ ภาษาแอสเซมบลีได้โดยตรง ตัวอย่างเช่น
ถ้าโปรแกรมต้องการทีจ่ ะใส่ค่า 437B (Hex) ลงใน CX Register ก็สามารถใช้
คาสัง่ MOV CX, 437B (Hex) ได้โดยตรง
Suan Dusit Rajabhat University (Computer Science)
51
2.6 การระบุตาแหน่งในรีจีสเตอร์
2.6.2 Register Addressing Mode
ในกรณีทใี่ ช้ค่าในรีจสิ เตอร์เป็ น operand ของชุดคาสัง่ เช่น MOV CX,
AX คือการคัดลอก เนือ้ หาหรือข้อมูล(Content or Data) ทีอ่ ยู่ใน AX
Register มาไว้ใน CX Register ใช้ในกรณีทจี่ านวน bit เท่ากันเท่านัน้ ในกรณีท ี่
รีจสิ เตอร์มขี นาดไม่เท่ากันจะไม่สามารถใช้คาสัง่ MOV CX, AL ได้ ทัง้ นีเ้ นือ่ งจาก
หากใช้คาสัง่ นี้ 8086 จะพยายามทีจ่ ะทาสาเนาข้อมูล (Copy Data) ในรูปแบบ
byte-type (AL) เข้าไปเก็บในรีจสิ เตอร์ซงึ่ เป็ นรูปแบบ word-type (CX) ซึง่
เป็ นไปไม่ได้ อย่างไรก็ตามหากใช้คาสัง่ MOV AL, CX ก็ยงั เป็ นไปไม่ได้
Suan Dusit Rajabhat University (Computer Science)
52
2.6 การระบุตาแหน่งในรีจีสเตอร์
เนือ่ งจากถึงแม้ว่าขนาดของรีจสิ เตอร์จะสามารถรองรับข้อมูลได้ แต่ 8086 จะไม่
ทราบว่าผู เ้ ขียนโปรแกรมต้องการทีจ่ ะนาข้อมูลสาเนาไปเก็บไว้ในครึง่ ใดของรีจสิ เตอร์ CX
ในกรณีเช่นนี้ โดยทัว่ ไป Assembler จะตรวจสอบพบ และจะบอกให้ทราบว่า Type
error ดังนัน้ การทีจ่ ะคัดลอกไบต์จาก AL ไปเก็บยังไบต์สูงของ CX จะใช้คาสัง่
MOV CH, AL และหากต้องการคัดลอกไบต์จาก AL ไปเก็บยังไบต์ต่าของ CX
จะใช้คาสัง่ MOV CL, AL
Suan Dusit Rajabhat University (Computer Science)
53
2.6 การระบุตาแหน่งในรีจีสเตอร์
2.7 การเข้าถึงข้อมูลในหน่วยความจา
(Addressing Data in Memory)
ทีผ่ า่ นมาได้กล่าวถึง Addressing Mode ทีจ่ ะระบุตาแหน่งของ operand
ในหน่วยความจา ในกรณีทตี่ ้องการทีจ่ ะเข้าถึงข้อมูลในหน่วยความจา 8086 จะต้องสร้าง
physical address (20 bits) ซึง่ สามารถทาได้โดยการรวม Effective
address (16 bits) เข้ากับ Segment Base Address (16 bits)
แสดงได้ดงั รูปที่ 2.11
Suan Dusit Rajabhat University (Computer Science)
54
รูปที่ 2.11 แสดงการบวกค่าในรีจสี เตอร์ DS กับ EA เพือ่ หา Physical Address
Suan Dusit Rajabhat University (Computer Science)
55
วิธกี ารเข้าถึงข้อมูลในหน่วยความจาในไมโครโพรเซสเซอร์ 8086
2.7.1 วิธีการเข้าถึงข้อมูลในหน่วยความจาโดยตรง
(Direct Addressing Mode)
เป็ นวิธกี ารเข้าถึงข้อมูลในหน่วยความจาทีง่ ่ายทีส่ ุด ซึง่ สามารถทาได้โดยการนาค่า
effective address (16 bits) ใส่เข้าไปในชุดคาสัง่ โดยตรง ตัวอย่างเช่นคาสัง่
MOV BL, [437A (Hex)] – 8086 จะคัดลอก Low byte ->
Low address (437A) และ High byte -> High address
(437B) ดังนัน้ ในกรณีทตี่ ้องการ Load รีจสิ เตอร์ R1 ด้วยค่าทีอ่ ยู่ในแอดเดรส
1000 จะมีการทางานแสดงได้ดงั รูปที่ 2.12
Suan Dusit Rajabhat University (Computer Science)
56
รูปที่ 2.12 แสดงวิธกี ารเข้าถึงข้อมูลในหน่วยความจาโดยตรง (Direct Addressing Mode)
Suan Dusit Rajabhat University (Computer Science)
57
วิธกี ารเข้าถึงข้อมูลในหน่วยความจาในไมโครโพรเซสเซอร์ 8086
2.7.2 วิธีการเข้าถึงข้อมูลในหน่วยความจาโดยอ้ อม
(Indirect Addressing Mode)
เป็ นวิธกี ารเข้าถึงข้อมูลในหน่วยความจาทีแ่ ตกต่างจาก Direct Addressing
ตรงทีแ่ ทนทีจ่ ะใส่ค่า effective address (16 bits) เข้าไปในชุดคาสัง่ โดยตรง
แต่จะใส่ค่า Address ของหน่วยความจาในตาแหน่งทีจ่ ดั เก็บ effective address
เข้าไปในชุดคาสัง่ จะเห็นได้ว่าวิธกี ารนี้ ค่าในแอดเดรสทีร่ ะบุจะเป็ นแอดเดรสทีบ่ รรจุค่าที่
ต้องการไว้ เราเรียกแอดเดรสภายในแอดเดรสทีร่ ะบุว่า “ตัวชี้ (Pointer)” เช่น
ถ้าต้องการ Load รีจสิ เตอร์ R1 ด้วยค่าในแอดเดรสทีแ่ อดเดรส 1000 กาหนดไว้
จะมีการทางานแสดงได้ดงั รูปที่ 2.13
Suan Dusit Rajabhat University (Computer Science)
58
รูปที่ 2.13 แสดงวิธกี ารเข้าถึงข้อมูลในหน่วยความจาโดยอ้อม (Indirect Addressing Mode)
Suan Dusit Rajabhat University (Computer Science)
59
วิธกี ารเข้าถึงข้อมูลในหน่วยความจาในไมโครโพรเซสเซอร์ 8086
2.7.3 วิธีการเข้าถึงข้อมูลในหน่วยความจาโดยใช้ตัวชี้
(Indexing Addressing Mode)
บางครัง้ ในการทางานซึง่ ต้องการกระทาบางอย่างกับชุดข้อมูลเป็ นจานวนมากทีม่ ี
โครงสร้างการจัดเก็บไว้เป็ นลาดับ อาจจะสามารถทาได้โดยใช้วธิ ี Indirect
Addressing แต่อย่างไรก็ตามหากต้องการ Load ค่า 2 ค่าจาก 2 แอดเดรส
เข้ามาในรีจสิ เตอร์ตวั เดียวกัน จาเป็ นต้องใช้ Pointer 2 ตัว และทุกครัง้ ที่ Pointer
เลือ่ นไปชีท้ แี่ อดเดรสหนึง่ Pointer จะถูกเพิม่ ค่าขึน้ 1 เพือ่ ชีไ้ ปยังแอดเดรสถัดไป จึง
สามารถทางานกับชุดข้อมูลทีม่ โี ครงสร้างการจัดเก็บเป็ นลาดับได้ แต่ อย่างไรก็ตาม
เนือ่ งจาก Pointer เป็ นส่วนหนึง่ ของข้อมูล ไม่ได้เป็ นส่วนของโปรแกรม
Suan Dusit Rajabhat University (Computer Science)
60
วิธกี ารเข้าถึงข้อมูลในหน่วยความจาในไมโครโพรเซสเซอร์ 8086
ดังนัน้ ผู อ้ นื่ จะไม่สามารถทราบได้ว่าโปรแกรมนัน้ ต้องการใช้ทาอะไรแน่ การแก้ปญั หา
อย่างหนึง่ คือการใช้รจี สิ เตอร์เพิม่ ขึน้ มาจากเดิมอีก 1 ตัว เรียกว่า “Index
Register” โดยจะทาหน้าทีใ่ นการจัดเก็บค่าดัชนีแอดเดรสของชุดข้อมูลเพือ่ ให้สะดวก
ต่อการเรียกใช้ ในปัจจุบนั ได้มกี ารพัฒนารีจสิ เตอร์ชนิดนีใ้ ห้มขี ดี ความสามารถในการเพิม่
หรือลดค่าลงครัง้ ละ 1เพือ่ ให้สามารถจัดการกับชุดข้อมูลทีม่ โี ครงสร้างการจัดเก็บเรียง
เป็ นลาดับได้โดยอัตโนมัต ิ จึงทาให้มคี วามสามารถในการ Address โดยอัตโนมัตเิ รียกว่า
“autoindexing”
Suan Dusit Rajabhat University (Computer Science)
61
วิธกี ารเข้าถึงข้อมูลในหน่วยความจาในไมโครโพรเซสเซอร์ 8086
2.7.4 วิธีการเข้าถึงข้อมูลในหน่วยความจาโดยใช้ สแต็ก
(Stack Addressing Mode)
เป็ นวิธกี ารเข้าถึงข้อมูลในหน่วยความจาโดยใช้สแต็ก (Stack Addressing)
ซึง่ สแต็กประกอบด้วยข้อมูลทีถ่ ูกจัดเก็บเรียงเป็ นลาดับไว้ในหน่วยความจา โดยข้อมูลแรกจะ
ถูกใส่ (Push) เข้าไปในสแต็ก และจะลงไปอยู่ทสี่ ่วนล่างสุดของสแต็ก ข้อมูลต่อๆ ไปก็จะ
ถูกนาไปจัดเก็บในแอดเดรสถัดมา การทีจ่ ะเข้าไปเรียกข้อมูลในสแต็กจึงจาเป็ นต้องมี
แอดเดรสทีร่ ะบุว่าเป็ นส่วนบนสุดของสแต็ก ซึง่ เรียกว่า “Stack Pointer”
กระบวนการเข้าไปยังสแต็กสามารถทาได้โดยนาค่า
SS (Stack Segment ) + SP (Stack Pointer) -> Physical
address (Stack’s top address) แสดงได้ดงั รูปที่ 2.14
Suan Dusit Rajabhat University (Computer Science)
62
รูปที่ 2.14 แสดงวิธกี ารเข้าถึงข้อมูลในหน่วยความจาโดยใช้สแต็ก (Stack Addressing Mode)
Suan Dusit Rajabhat University (Computer Science)
63
The End
Lesson 2
Suan Dusit Rajabhat University (Computer Science)
64