Chapter 7 คุณลักษณะ และหน้าที่ของ Instruction Sets
Download
Report
Transcript Chapter 7 คุณลักษณะ และหน้าที่ของ Instruction Sets
Chapter 7
คุณลักษณะและหน้ าที่ของ Instruction Sets
ANGKANA
หัวข้ อการเรี ยนร้ ู
คุณลักษณะของคาสั่งภาษาเครื่ อง
- องค์ ประกอบของคาสั่งเครื่ อง
- การออกแบบชุดคาสั่ง
- รู ปแบบตัวแทนคาสั่ง
ชนิดของตัวถูกดาเนินการ
- ข้ อมูลชนิดตัวเลข
- ข้ อมูลประเภทตรรกะ
- ข้ อมูลชนิดตัวอักษร
ชนิดของการดาเนินการ
- การคานวณคณิ ตศาสตร์
- การเรี ยกใช้ ฟังก์ ชัน
- การคานวณตรรกะ
ANGKANA
บทนา
ขอบเขตระหว่ างผู้ออกแบบคอมพิ วเตอร์ และผู้พัฒนาโปรแกรมที่
ทางานกับคอมพิวเตอร์ เครื่ องเดียวกันอยู่ตรงที่ ชุดคาสั่งคอมพิวเตอร์ (machine
instruction set) เมื่อมองจากทัศนะของผู้ออกแบบฯ ชุดคาสั่ งคอมพิวเตอร์
จัดเตรี ยมสิ่ งแวดล้ อมในการทางานสาหรั บซี พียู หรื อการสร้ างซี พียูเป็ นงานที่
เกี่ยวข้ องกับการสร้ างชุดคาสั่งคอมพิวเตอร์ เป็ นอย่ างมากจากมุมมองของผู้ใช้
คณ
ุ ลักษณะของคาสั่งภาษาเครื่ อง
การทางานของซี พียูถูกกาหนด
โดยคาสั่ งที่ กาลังทาการประมวลผลอยู่
ในขณะนั้ น ซึ่ งเรี ยกว่ าค าสั่ ง เครื่ อง
(machine instructions or computer
instructions) คาสั่ งเครื่ องเมื่ อถูก นามา
รวมเข้ าไว้ ด้วยกัน หรื อเมื่ออ้ างอิ งถึงกลุ่ม
คาสั่ งเครื่ องสาหรั บคอมพิ วเตอร์ หนึ่ ง ๆ
รวมเรี ยกว่ า ชุดคาสั่ง (Instruction set)
องค์ ประกอบของคาสั่งเครื่อง
รู ปแสดงไดอะแกรมแสดงขัน้ ตอนการทางานของวงรอบคาสั่ง
องค์ ประกอบของคาสั่งเครื่อง
โค้ ดงาน (Operation code): บอกให้ ทราบถึงการทางานที่
ต้ องการทา เช่ น การบวก หรื องานเกี่ยวกับไอโอ วิธีการกาหนดโค้ ดงานจะใช้
รหั ส เลขฐานสอง (binary code) ซึ่ งเรี ยกอี กชื่ อหนึ่ งว่ า รหั สดาเนิ นการ
(opcode)
การอ้ างอิ งแหล่ งที่ มาข้ อมูลโดยตัวถูกดาเนินการ (Source
operand reference): การทางานอาจมีการอ้ างอิ งถึงตัวถูกดาเนิ นการ ที่ บอก
แหล่ งที่ เก็บข้ อมูลที่ ต้องนามาใช้ ในการกระทานั้น ซึ่ งหมายถึ งข้ อมูลนาเข้ า
สาหรั บการทาคาสั่งนั้น ๆ
องค์ ประกอบของคาสั่งเครื่อง
การอ้ างอิ งแหล่ งที่ เก็บข้ อมูลโดยตัวถูกดาเนิ นการ
(Destination operand reference): การทางานอาจมีการสร้ างผลลัพธ์ ขึน้ มา ซึ่ ง
ต้ องการตัวถูกดาเนินการสาหรั บใช้ อ้างอิงถึงแหล่ งที่เก็บผลลัพธ์ นั้น
การอ้ างอิงถึงคาสั่งต่ อไป (Next instruction reference): เป็ น
วิ ธีการที่ บอกซี พียูให้ ทราบตาแหน่ งของคาสั่ งที่ จะถูกนามาประมวลผลใน
ลาดับต่ อไป ภายหลังจากที่ประมวลผลคาสั่งที่กาลังทางานอยู่นีเ้ สร็ จสิ ้นแล้ ว
องค์ ประกอบของคาสั่งเครื่อง
ตัวถูกดาเนิ นการที่ ใช้ บอกตาแหน่ งการอ้ างอิ งแหล่ งที่ มาหรื อที่ เก็บ
ข้ อมูล อาจอยู่ในรู ปแบบดังต่ อไปนี ้
หน่ วยความจาหลัก หรื อหน่ วยความจาเสมือน (Main or
virtual
memory)
ซี พียูรีจิสเตอร์ (CPU register) ส่ วนใหญ่ ซีพียูจะมี
ส่ วนประกอบเป็ นรี จิสเตอร์ อย่ างน้ อยหนึ่ งตัว ซึ่ งจะถูกอ้ างอิ ง โดยคาสั่ งเครื่ อง
ถ้ ามีรีจิสเตอร์ เพียงหนึ่งตัว การอ้ างอิงถึงอาจจะกระทาได้ โดยนั ย ถ้ ามีรีจิสเตอร์
หลายตัวก็จะต้ องกาหนดหมายเลขเฉพาะให้ แก่ รีจิสเตอร์ แต่ ละตัว และคาสั่ ง
เครื่ องจะนาหมายเลขรี จิสเตอร์ ที่ต้องการไปใช้
องค์ ประกอบของคาสั่งเครื่อง
อุปกรณ์ ไอโอ (I/O devices) คาสั่งจะต้ องกาหนดไอโอโมดูล
และอุปกรณ์ ไอโอสาหรั บการทางาน ถ้ ามีการทาแผนที่ ไอโอ (mapped I/O) ก็
จะกาหนดตาแหน่ งหน่ วยความจาหลัก หรื อหน่ วยความจาเสมือนที่ เก็บข้ อมูล
สาหรั บไอโอนั้น ๆ ไว้
รูปแบบตัวแทนคาสั่ง
ภายในเครื่ องคอมพิวเตอร์ คาสั่ งแต่ ละคาสั่ งจะอยู่ในรู ปกลุ่มของบิต
(sequence of bits) คาสั่ งจะถูกแบ่ งออกเป็ นเขตข้ อมูลหลายส่ วน ซึ่ งใช้ แสดง
แทนองค์ ประกอบแต่ ละส่ วน
การที่ จะอธิ บายรายละเอี ยดด้ วยการใช้ เลขฐานสอง ซึ่ งเป็ นรู ป แบบที่
แท้ จริ งของคาสั่ งนั้นเป็ นเรื่ องที่ ทาได้ ยากมาก ดังนั้นจึ ง ได้ เลื อกที่ จะใช้ ภาษา
สั ญลักษณ์ (symbolic language) มาใช้ แทนรู ปแบบที่ แท้ จริ ง ซึ่ งจะช่ วยให้
อธิ บายและทาความเข้ าใจได้ ง่ายขึน้
แสดงรู ปแบบโครงสร้ างคาสั่งแบบง่ าย
การออกแบบชุดคาสั่ง
เป็ นเรื่ องที่ มีความซับซ้ อนมาก และส่ งผลกระทบต่ อส่ วนอื่ น ๆ ของ
ระบบเป็ นอย่ ามาก ชุดคาสั่ งจะเป็ นตัวกาหนดหน้ าที่ การทางานของซี พียู จึ งมี
ผลโดยตรงต่ อการออกแบบและสร้ างซี พียูขึน้ มาใช้ งาน ชุดคาสั่ งเป็ นเสมื อน
เครื่ องมือของนักพัฒนาโปรแกรมที่ใช้ ในการควบคุมการทางานของซี พียู
หัวข้ อที่เป็ นพืน้ ฐานทีสาคัญของการออกแบบได้ แก่
Operation repertoire : ซี พียคู วรจะมีจานวนฟั งก์ ชันการ
ทางานเป็ นเท่ าใด การทางานแต่ ละอย่ างควรทาอะไร และการทางานควรมี
ความซับซ้ อนมากเพียงใด
Data type : ชนิดของข้ อมูลแบบต่ าง ๆ ที่ นามาใช้ งาน
ร่ วมกับการทางานของซี พียู
การออกแบบชุดคาสั่ง
Instruction format : ความยาวของคาสั่ง (หน่ วยเป็ นบิต)
จานวนที่อยู่อ้างอิง ขนาดของแต่ ละเขตข้ อมูล และอื่น ๆ
Registers : จานวนรี จิสเตอร์ ในซี พียทู ี่ สามารถอ้ างอิง
ได้ ในแต่ ละคาสั่ง และการใช้ งาน
Addressing : รู ปแบบการทางานที่ ใช้ กาหนดชนิดของ
ที่อยู่ของตัวถูกดาเนินการ
ชนิดของตัวถูกดาเนินการ
ข้ อมูลชนิดตัวเลข
ความแตกต่ างที่ สาคัญระหว่ างตัวเลขที่ ใช้ ในทางคณิ ตศาสตร์ ทั่วไป
กับตัวเลขที่ เก็บอบอู่ในเครื่ องคอมพิ วเตอร์ คื อ ตัวเลขคอมพิ วเตอร์ มี ขนาดที่
จากัดเนื่องจากเหตุผลสองประการ คือ
1. ตัวเลขที่ เก็บอยู่ในคอมพิวเตอร์ นั้นถูกจากัดขนาดด้ วยรู ปแบบที่ ใช้
อยู่ในเครื่ องฯ นั้น
2. ในกรณี ข องเลขจ านวนจริ งก็ ถู ก จ ากั ด ขนาดด้ ว ยระดั บ ความ
เที่ ยงตรงที่ ต้องการนักพัฒนาโปรแกรมจึ งต้ องทาความเข้ าใจในผลที่ จะเกิดขึน้
จากการปั ดเศษ การ overflow และการ underflow
ชนิดของตัวถูกดาเนินการ
ข้ อมูลชนิดตัวเลข
ข้ อมูลชนิดตัวเลขมักจะแบ่ งออกเป็ นสามชนิดคือ
1. เลขจานวนเต็ม (Integer or fixed point)
2. เลขจานวนจริ ง (Floating point)
3. เลขฐานสิ บ (Decimal point)
ชนิดของตัวถูกดาเนินการ
ข้ อมูลชนิดตัวเลข
โดยธรรมชาติ แ ล้ ว การท างานภายในเครื่ องคอมพิ ว เตอร์ นั้ น ใช้
เลขฐานสองทั้ งหมด แต่ ส่วนที่ ต้องติ ดต่ อกับผู้ใช้ ที่เป็ นมนุ ษย์ นั้นจะจาเป็ น
จะต้ องใช้ เลขฐานสิ บ ดังนั้นจึ งมีความจาเป็ นที่ จะต้ องแปลงค่ าของเลขฐานสิ บ
ที่ ม ากั บ ข้ อ มู ล น าเข้ า ให้ เป็ นเลขฐานสอง และแปลงเลขฐานสองในข้ อ มู ล
ผลลั พ ธ์ ใ ห้ เป็ นเลขฐานสิ บ ส าหรั บ งานประยุก ต์ ที่ เ กี่ ย วข้ อ งกั บ งานไอโอ
ปริ มาณมาก ในขณะที่ มีงานเกี่ ยวกับการคานวณแบบง่ ายและมี อยู่น้ อยนั้ น
เหมาะกับการทางานกับตัวเลขระบบฐานสิ บ วิธีการแทนเลขฐานสิ บในกรณี นี้
เรี ยกว่ า packed decimal ซึ่ งเป็ นวิธีที่ได้ รับความนิยมอย่ างมาก
ชนิดของตัวถูกดาเนินการ
ข้ อมูลชนิดตัวอักษร
รู ปแบบข้ อมูลที่ ใช้ ง านทั่ วไปคื อตัวอั กษร (text) หรื อข้ อ ความ
(character string) ข้ อมูลที่ เป็ นข้ อความนั้น เป็ นรู ปแบบที่ สะดวกสบายต่ อคน
แต่ ในเวลาเดียวกันก็เป็ นรู ปแบบที่ไม่ สามารถเก็บไว้ ในคอมพิวเตอร์ หรื อนาไป
ประมวลผลได้ โดยง่ าย เนื่ องจากระบบดังกล่ าวถูกออกแบบมาให้ ทางานกับ
เลขฐานสองเท่ านั้น ดังนั้นจึ งได้ มีการประดิษฐ์ โค้ ดรหั สสาหรั บการเก็บข้ อมูล
ตัวอักษรไว้ ในคอมพิวเตอร์ โค้ ดรหั สแบบแรกที่ ได้ รับการออกแบบนามาใช้
งานคื อ รหั สมอส (Morse code) ในปั จจุบันโค้ ดรหั สที่ ถูกนามาใช้ อ ย่ าง
แพร่ หลายเรี ยกว่ า International Reference Alphabet (IRA) ซึ่ งมีชื่อเรี ยกใน
ประเทศสหรั ฐอเมริ กาว่ า โค้ ดแอสกี (American Standard Code for
International Interchange)
ชนิดของตัวถูกดาเนินการ
ข้ อมูลประเภทตรรกะ
โดยปกติข้อมูลแต่ ละ word หรื อแต่ ละหน่ วยที่ สามารถอ้ างอิ งได้ จะ
ถือเสมือนหนึ่ งว่ าเป็ นข้ อมูลหน่ วยเดี ยว แต่ ในบางครั้ งก็มีความจาเป็ นจะต้ อง
พิจารณาข้ อมูลในแต่ ละหน่ วยนั้นครั้ งละ 1 บิต ซึ่ งจะมีค่าเป็ น “0” หรื อ “1”
เมื่อข้ อมูลถูกมองในลักษณะนีเ้ รี ยกว่ าเป็ นข้ อมูลแบบตรรกะ
ชนิดของการดาเนินการ
การคานวณคณิ ตศาสตร์
การคานวณทางคณิ ตศาสตร์ (arithmetic operations) ขัน้ พืน้ ฐานอัน
ได้ แก่ การบวก (addition) การลบ (subtraction) การคูณ (multiplication) และ
การหาร (division) คาสั่งเหล่ านีจ้ ะสามารถทางานกับข้ อมูลประเภทเลขจานวน
เต็ม เลขจานวนจริ ง และเลข packed decimal
ชนิดของการดาเนินการ
การคานวณตรรกะ
คอมพิวเตอร์ ส่ วนใหญ่ มักจะจัดเตรี ยมคาสั่ งสาหรั บการจั ดการข้ อมูล
แต่ ละบิต (bit twiddling) ใน word หรื อในกลุ่มข้ อมูลขนาดต่ าง ๆ ซึ่ งมักจะใช้
ควบคู่กับ Boolean operations
รู ปแสดงการกระทาทางตรรกะพืน้ ฐาน
ชนิดของการดาเนินการ
การคานวณตรรกะ
การทางานทางตรรกะเหล่ านี ้สามารถนามาประยุกต์ ใช้ กับการกลับ
ตาแหน่ งบิต (bitwise operation) ขนาด n บิตได้ เช่ น รี จิสเตอร์ สองตัวมีค่าเป็ น
(R1) = 10100101
(R2) = 00001111
ดังนั้น
R1 AND R2 = 00000101
ชนิดของการดาเนินการ
การคานวณตรรกะ
(R1) = 10100101
(R2) = 11111111
ดังนั้น
(R1) XRO (R2) = 01011010
ด้ วยการกาหนดให้ “R2” มีค่าเป็ น “1” ทั้งหมด XOR (exclusive OR)
จะกลับบิตใน “R1” เป็ นบิตตรงกันข้ ามทั้งหมด (หรื อเรี ยกว่ า วันคอมพลีเมนต์
ones complement)
ชนิดของการดาเนินการ
การคานวณตรรกะ
นอกเหนื อจาการทางานกับแล้ ว คอมพิวเตอร์ ส่ วนใหญ่ ยังจัด เตรี ยม
ฟั งก์ ชันในการเลื่อน (shift) และหมุน (rotate) บิตไว้ ด้วย
คาสั่งการเลื่อนบิตแบบตรรกะ (logical shift) บิตทุกบิตใน word จะ
ถูกเลื่อนไปทางซ้ ายหรื อทางขวา บิ ตที่ อยู่ซ้ายสุ ดสาหรั บการเลื่ อนไปทางซ้ าย
และบิ ต ที่ อ ยู่ข วาสุ ด ของการเลื่ อ นไปทางขวาจะถูก ลบทิ ้ง ไปส่ วนทางด้ า น
ตรงกันข้ ามจะถูกเติมด้ วยบิต “0”
ชนิดของการดาเนินการ
รู ปแสดงการเลื่อนและการหมุนบิต
ชนิดของการดาเนินการ
การคานวณตรรกะ
1. อ่ านข้ อมูล word นั้นเข้ าสู่รีจิสเตอร์
2. ทาการคานวณหาค่ าตรรกะของ word นั้นโดยใช้ คาสั่ง AND ด้ วย
ค่ า 1111111100000000 ซึ่ งจะเป็ นการลบตัวอักษรทางด้ านขวาทิง้ ไป
3. ทาการเลื่ อนบิ ตไปทางขวา 8 ครั้ ง นั่นคื อการเลื่ อนตัวอั กษรทาง
ด้ านซ้ ายใน word ให้ ไปอยู่ทางด้ านขวาของ word หรื ออยู่ซีกครึ่ งขวาของ
รี จิสเตอร์
4. ท างานไอโอ คื อ จั ด การส่ งตั ว อั ก ษรนั้ น ไปยั ง อุ ป กรณ์ ไอโอที่
ต้ องการ นั่นคืออุปกรณ์ ไอโอจะอ่ านข้ อมูล 8 บิตทางซี กขวาของรี จิสเตอร์ ไปใช้
ชนิดของการดาเนินการ
การคานวณตรรกะ
การหมุน (rotation) หรื อการเลื่อนบิตเป็ นวงกลม (cyclic shift) จะ
รั กษาข้ อมูลทุกบิ ตเอาไว้ ทั้งหมด การประยุกต์ ใช้ งานการหมุนบิ ต ได้ แก่ การ
หมุนทุกบิตมาอยู่ด้านซ้ ายสุดเพื่อทาการทดสอบเครื่ องหมายของข้ อมูลตัวนั้น
การทางานทั้งที่ เกี่ยวข้ องกับคณิ ตศาสตร์ และตรรกะ จะต้ องเกี่ยวข้ อง
กับหน่ วยเอแอลยู และอาจจะเกี่ยวข้ องกับการถ่ ายโอนข้ อมูล
ชนิดของการดาเนินการ
รู ปแสดงตัวอย่ างการเลื่อนบิต และการหมุนบิต
สแต็ก (Stack)
คื อกลุ่มของข้ อมูลที่ มีการเรี ยงลาดับเอาไว้ และสามารถนาข้ อมูลไป
ใช้ ได้ ครั้ งละหนึ่งตัว จุดที่สามารถติดต่ อกับข้ อมูลได้ เรี ยกว่ า ส่ วนหั วของสแต็ก
จานวนข้ อมูลที่ เก็บไว้ ในสแต็กนั้นสามารถเปลี่ ยนแปลงได้ ข้ อ มูลอาจจะถูก
เพิ่มเข้ าไปหรื อนาออกจากส่ วนหั วของสแต็กเท่ านั้น ด้ วยเหตุผลนั้ นสแต็กจึ ง
ถูกเรี ยกว่ า pushdown list หรื อ last-in-first-out list
สแต็ก (Stack)
รู ปแสดงการทางานพืน้ ฐานกับสแต็ก
การสร้ างสแต็กขึน้ มาใช้ งาน
แสดงการทางานเกี่ยวกับสแต็ก
การสร้ างสแต็กขึน้ มาใช้ งาน
สแต็กเป็ นโครงสร้ างข้ อมูลที่ มีประโยชน์ ต่อการสร้ างซี พี ยูขึน้ มาใช้
งาน ถ้ า กลไกของสแต็ก ถูก น าไปใช้ โ ดยซี พี ยู เช่ น การน าไปใช้ จั ด การการ
เรี ยกใช้ โพรซี เยอร์ ก็ทาให้ ไม่ มีความจาเป็ นจะมี คาสั่ งทางานกับสแต็กไว้ ใน
ชุ ดคาสั่ งเครื่ อง แต่ ในทั้งสองกรณี การสร้ างสแต็กนั้นจะต้ องมี การอ้ างอิ งถึ ง
ตาแหน่ งที่เก็บข้ อมูลในสแต็ก
หน่ วยความจาผืนหนึ่ งในหน่ วยความจาหลัก หรื อในหน่ วยความจา
เสมือนจะถูกจองไว้ สาหรั บสแต็กส่ วนใหญ่ แล้ วเนือ้ ที่ ที่เตรี ยมไว้ มักจะมีข้อมูล
ส่ วนหนึ่งเก็บอยู่ และส่ วนที่เหลือนั้นเตรี ยมไว้ ใช้ เก็บข้ อมูลเพิ่มเติม
การสร้ างสแต็กขึน้ มาใช้ งาน
รู ปแสดงโครงสร้ างของสแต็กทั่วไป
การสร้ างสแต็กขึน้ มาใช้ งาน
การบริ หารสแต็กให้ เหมาะสมนั้น จะต้ องใช้ การอ้ างอิ งตาแหน่ งสาม
แห่ งด้ วยกัน ดังนี ้
1. Stack pointer : หรื อตัวชี ้ตาแหน่ งสแต็ก เป็ นตัวเก็บตาแหน่ งที่ อยู่
ของข้ อมูลตัวบนสุดในสแต็ก ถ้ ามีการเพิ่มข้ อมูลเข้ ามาหรื อดึงข้ อมูลออกไป ก็
จะต้ องเปลี่ยนตาแหน่ งที่อยู่ให้ ชีอ้ ยู่ที่ข้อมูลตัวบนสุ ดเสมอ
2. Stack base: หรื อตัวชี ้ตาแหน่ งฐาน เป็ นตัวเก็บตาแหน่ งที่ อยู่ฐาน
ของสแต็กในพืน้ ที่ หน่ วยความจาที่ สงวนไว้ ถ้ ามีการพยายามถึงข้ อมูล (POP)
ออกจากสแต็กที่ ไม่ มีข้อมูลอยู่ (stack pointer = stack base) ก็จะทาให้ เกิด
ข้ อผิดพลาดขึน้
การสร้ างสแต็กขึน้ มาใช้ งาน
3. Stack limit : หรื อขนาดของ
สแต็ก จะเป็ นตั ว เก็บ ต าแหน่ ง สุ ด ท้ ายที่
สงวนไว้ ใช้ สาหรั บสแต็ก ถ้ ามีการพยายาม
ใส่ ข้อมูล (PUSH) เข้ ามาในสแต็กที่ เต็ม
แล้ ว (stack pointer = stack limit) ก็จะทา
ให้ เกิดข้ อผิดพลาดขึน้
การประเมินค่ านิพจน์
ข้ อดีของรู ปแบบ postfix หรื อ reverse Polish อี กประการหนึ่ งคื อ
สามารถนามาคานวณหาค่ าโดยนาสแต็กมาช่ วยได้ อย่ างง่ ายดาย นิ พจน์ จะถูก
อ่ านเข้ ามาจากซ้ ายไปขวา ข้ อมูลแต่ ละตัวที่อ่านเข้ ามานั้นจะถูกกระทาดังนี ้
1. ถ้ าตัวที่ถกู อ่ านเข้ ามาเป็ น ตัวแปร หรื อค่ าคงที่ ให้ ใส่ ตัวนั้น (PUSH)
ลงในสแต็ก
2. ถ้ าตัวที่ ถูกอ่ านเข้ ามาเป็ น เครื่ องหมาย ให้ อ่านค่ าจากสแต็ก (POP)
ขึน้ มาสองตัว ทาการคานวณค่ า และใส่ ผลลัพธ์ กลับลงไปในสแต็ก
การประเมินค่ านิพจน์
รู ปแสดงการใช้ สแต็กในการคานวณหานิพจน์ “f = (a - b) / (d e + c)”
การประเมินค่ านิพจน์
กระบวนการแปลงนิพจน์ ในรู ปแบ infix ให้ ไปอยู่ในรู ปแบบ postfix
นั้นก็สามารถทาได้ ง่าย โดยนาสแต็กเข้ ามาช่ วย นิ พจน์ infix จะถูกอ่ านเข้ ามา
จากซ้ ายไปขวา รู ปแบบ postfix จะถูกสร้ างขึ น้ มาเป็ นผลลัพธ์ ในขณะที่
อัลกอริ ทึมกาลังทางาน
1. ตรวจข้ อมูลตัวต่ อไปที่ถกู อ่ านเข้ ามา
2. ถ้ าเป็ นตัวถูกกระทา (operand) ให้ ส่งออกเป็ นผลลัพธ์
3. ถ้ าเป็ นเครื่ องหมายวงเล็บเปิ ด ให้ ใส่ ลงไปในสแต็ก
การประเมินค่ านิพจน์
4. ถ้ าเป็ นตัวกระทา (operator) ให้ ทาดังนี ้
- ถ้ าตัวกระทาตัวบนสุดในสแต็กเป็ นเครื่ องหมายวงเล็บเปิ ด
ให้ ใส่ ตัวกระทานั้นลงไปในสแต็ก
- ถ้ าตัวกระทามีค่า precedence สู งกว่ าตัวบนสุ ดในสแต็ก
ให้ ใส่ ตัวกระทานั้นลงไปในสแต็ก
- มิฉะนั้น ให้ อ่านตัวกระทาออกมาจากสแต็ก และส่ ง ออก
ไปเป็ นผลลัพธ์ ตัวต่ อไป และทาซา้ ในขัน้ ตอนที่ 4
การประเมินค่ านิพจน์
5. ถ้ าเป็ นเครื่ องหมายวงเล็บปิ ด ให้ อ่านตัวกระทาออกมาจากสแต็ก
และส่ งออกไปเป็ นผลลัพธ์ ตัวต่ อไปจนกว่ าจะพบเครื่ องหมายวงเล็บเปิ ด ให้ ทิง้
เครื่ องหมายนั้นทิง้ ไปและอ่ านตัวต่ อไปเข้ ามา
6. ถ้ ายังมีตัวต่ อไปให้ กลับไปทาขัน้ ตอนที่ 1
7. ถ้ า ไม่ มี ตั ว ต่ อไปแล้ ว ให้ อ่ า นตั ว กระท าออกมาจากสแต็ก และ
ส่ งออกไปเป็ นผลลัพธ์ ตัวต่ อไปจนหมดสแต็ก
การประเมินค่ านิพจน์
รู ปแสดงการแปลงนิพจน์ จากรู ป Infix ไปเป็ นรู ป Postfix
คาถามท้ ายบท
1. จงแสดงวิธีทาทางตรรกะพืน้ ฐานดังต่ อไปนี ้
NOT P AND R
P OR Q AND R
The End