Top Banner
CS344-321 Assembly Language Programming chapter 1 page ______________________________________________________________________ _ Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul 1 Chapter 1 Introduction 1.1 ภาษาคอมพิวเตอร์ ภาษาคอมพิวเตอร์ แบ่งออกเป็นสองพวกใหญ่ๆ คือ ภาษาระดับสูงกับภาษาระดับตํา ภาษาระดับตํา ได้แก่ ภาษาแอสเซมบลี และภาษาเครือง ซึงจะมีรหัสคําสังทีแตกต่างกันระหว่างเครือง จึงเป็นภาษาทีขึ นอยู ่กับ เครือง ส่วนภาษาระดับสูง เป็นภาษาทีไม่ขึ นอยู ่กับเครืองใดเครืองหนึและแบ่งออกได้เป็นกลุ่มย่อยได้หลาย กลุ่มดังนี ก. ภาษาเชิงกระบวนงาน (procedure oriented language) หรือ ภาษาเชิงคําสัง (imperative language) หรือ ภาษาสัญนิยม (conventional language) เป็นภาษาทีเน้นการคํานวณด้วยผลกระทบข้างเคียง (side- effect) โดยการกําหนดค่าให้กับหน่วยความจําทีตําแหน่งต่างๆ แล้วเปลียนค่าเหล่านั น หรือกล่าวได้ว่าเป็ นการ เปลียนสถานะของเครือง โดยใช้ข้อความสังกําหนดค่า และข้อความสังควบคุมทีทํางานซํ าๆ เช่น ข้อความสัง while, repeat หรือ for เป็นต้น มีข้อความสังกระโดดมีเงือนไข เช่น if เป็นต้น และข้อความสังกระโดดไม่มี เงือนไข เช่น goto เป็นต้น ข้อความสังทีกล่าวมาข้างต้น มีหลักการทํางานเหมือนคําสังระดับภาษาเครือง เช่น ข้อความสังควบคุมทีทํางานซํ าๆ แทนได้ด้วยคําสังภาษาเครือง แบบกระโดดทีมีเงือนไขและไม่มีเงือนไข เป็นต้น สําหรับการเคลือนย้ายข้อมูล จะกระทําทีละเล็กละน้อยขนาด ไบต์ คํา หรือ สองเท่าของคํา ส่วนการกําหนดค่า คือ คําสังเคลือนย้ายข้อมูลในภาษาเครืองนันเอง และมองแถวลําดับ (array) หรือระเบียน (record) เป็ นข้อมูล หน่วยย่อยหลายๆ หน่วย ทีเรียงติดต่อกันในหน่วยความจํา การเคลือนย้ายข้อมูลยังคงทําทีละหน่วยย่อย แนวคิด ในการเขียนโปรแกรมด้วยภาษาในกลุ่มนี จึงไม่ได้แตกต่างจากแนวคิดในการเขียนโปรแกรมด้วยภาษาเครือง เท่าใดนัก ตัวอย่างของภาษาในกลุ่มนี ได้แก่ ซี ปาสกาล โคบอล (COBOL) และ ฟอร์แทรน (FORTRAN) เป็ นต้น ข. ภาษาเชิงหน้าที (applicative หรือ functional language) ภาษากลุ่มนี มีแนวคิดมาจาก แคลคูลัส แลมบ์ดา (lambda calculus) โดยมองว่าการเขียนโปรแกรม ก็คือการนิยามฟังก์ชัน การวิงโปรแกรม คือ การ คํานวณหาค่าของฟังก์ชัน โดยการส่งค่าพารามิเตอร์ไปให้ฟังก์ชัน เน้นฟังก์ชันทีเรียกซํ า (recursive function) เป็นหลัก ซึงต่างกับภาษาในกลุ่มแรก ทีแม้จะมีฟังก์ชันการเรียกซํ าให้ใช้ แต่มักจะมองว่าเป็นลักษณะพิเศษ และไม่ นิยมใช้กัน ภาษาในกลุ่มนี มองข้อมูลในระดับทีใหญ่ขึ น เช่น มองหน่วยความจําเป็ นรายการ (list) ของนิพจน์ สัญลักษณ์ (symbolic expression หรือ s-expression) จึงเป็ นภาษาทีเหมาะสําหรับการคํานวณทางสัญลักษณ์ เป็ นทีนิยมใช้กันมากในกลุ่มทีศึกษาทางด้านปัญญาประดิษฐ์ ในการคํานวณข้อมูลมักจะทําเป็นกลุ่มใหญ่ๆ ตัวอย่างของภาษาในกลุ่มนี ได้แก่ ลิสป์ (LISP) สกรีม (SCHEME) และ เอ็มแอล (ML) เป็นต้น ค. ภาษาการเขียนโปรแกรมเชิงตรรกะ (logic programming language) ตรรกะทีใช้ในภาษากลุ่มนี คือ first-order predicate calculus ซึงใช้อธิบายประโยคทางตรรกะ ทีเป็นจริงหรือเท็จอย่างใดอย่างหนึง เช่น ประโยค “2 เป็นเลขคู ่” เป็นจริง แต่ประโยค “3 เป็นเลขคู ่” เป็นเท็จ เป็นต้น แล้วใช้กฎของการอนุมาน เพื
233

Prince of Songkla Universitystaff.cs.psu.ac.th/iew/cs344-321/cs344-321-handout.pdf · CS344-321 Assembly Language Programming chapter 1 page...

Oct 19, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    1

    Chapter 1

    Introduction

    1.1 ภาษาคอมพิวเตอร ์ ภาษาคอมพวิเตอร ์ แบ่งออกเป็นสองพวกใหญ่ๆ คือ ภาษาระดบัสงูกบัภาษาระดบัตํ "า ภาษาระดบัตํ "าไดแ้ก่ ภาษาแอสเซมบลี และภาษาเครื"อง ซึ"งจะมีรหสัคาํสั "งที"แตกต่างกนัระหวา่งเครื"อง จึงเป็นภาษาที"ขึ, นอยูก่บัเครื"อง ส่วนภาษาระดบัสงู เป็นภาษาที"ไม่ขึ, นอยูก่บัเครื"องใดเครื"องหนึ"ง และแบ่งออกไดเ้ป็นกลุ่มยอ่ยไดห้ลายกลุ่มดงันี, ก. ภาษาเชิงกระบวนงาน (procedure oriented language) หรือ ภาษาเชิงคาํสั "ง (imperative language) หรือ ภาษาสญันิยม (conventional language) เป็นภาษาที"เน้นการคาํนวณดว้ยผลกระทบขา้งเคียง (side-effect) โดยการกาํหนดค่าใหก้บัหน่วยความจาํที"ตาํแหน่งต่างๆ แลว้เปลี"ยนค่าเหล่านั,น หรือกล่าวไดว้า่เป็นการเปลี"ยนสถานะของเครื"อง โดยใชข้อ้ความสั "งกาํหนดค่า และขอ้ความสั "งควบคุมที"ทาํงานซํ,าๆ เช่น ขอ้ความสั "ง while, repeat หรือ for เป็นตน้ มีขอ้ความสั "งกระโดดมีเงื"อนไข เช่น if เป็นตน้ และขอ้ความสั "งกระโดดไม่มีเงื"อนไข เช่น goto เป็นตน้ ขอ้ความสั "งที"กล่าวมาขา้งตน้ มีหลกัการทาํงานเหมือนคาํสั "งระดบัภาษาเครื"อง เช่น ขอ้ความสั "งควบคุมที"ทาํงานซํ,าๆ แทนไดด้ว้ยคาํสั "งภาษาเครื"อง แบบกระโดดที"มีเงื"อนไขและไม่มีเงื"อนไข เป็นตน้ สาํหรบัการเคลื"อนยา้ยขอ้มลู จะกระทาํที"ละเล็กละน้อยขนาด ไบต ์ คาํ หรือ สองเท่าของคาํ ส่วนการกาํหนดค่า คือ คาํสั "งเคลื"อนยา้ยขอ้มลูในภาษาเครื"องนั"นเอง และมองแถวลาํดบั (array) หรือระเบียน (record) เป็นขอ้มลูหน่วยยอ่ยหลายๆ หน่วย ที"เรียงติดต่อกนัในหน่วยความจาํ การเคลื"อนยา้ยขอ้มลูยงัคงทาํทีละหน่วยยอ่ย แนวคิดในการเขยีนโปรแกรมดว้ยภาษาในกลุ่มนี, จึงไม่ไดแ้ตกต่างจากแนวคิดในการเขยีนโปรแกรมดว้ยภาษาเครื"องเท่าใดนัก ตวัอยา่งของภาษาในกลุ่มนี, ไดแ้ก่ ซี ปาสกาล โคบอล (COBOL) และ ฟอรแ์ทรน (FORTRAN) เป็นตน้ ข. ภาษาเชิงหน้าที" (applicative หรือ functional language) ภาษากลุ่มนี, มีแนวคิดมาจาก แคลคลูสัแลมบด์า (lambda calculus) โดยมองว่าการเขยีนโปรแกรม ก็คือการนิยามฟังกช์นั การวิ"งโปรแกรม คือ การคาํนวณหาค่าของฟังกช์นั โดยการส่งค่าพารามิเตอรไ์ปใหฟั้งกช์นั เน้นฟังกช์นัที"เรียกซํ,า (recursive function) เป็นหลกั ซึ"งต่างกบัภาษาในกลุ่มแรก ที"แมจ้ะมีฟังกช์นัการเรียกซํ,าใหใ้ช ้แต่มกัจะมองว่าเป็นลกัษณะพิเศษ และไม่นิยมใชก้นั ภาษาในกลุ่มนี, มองขอ้มลูในระดบัที"ใหญ่ขึ, น เช่น มองหน่วยความจาํเป็นรายการ (list) ของนิพจน์สญัลกัษณ ์ (symbolic expression หรือ s-expression) จึงเป็นภาษาที"เหมาะสาํหรบัการคาํนวณทางสญัลกัษณ ์ เป็นที"นิยมใชก้นัมากในกลุ่มที"ศึกษาทางดา้นปัญญาประดิษฐ ์ ในการคาํนวณขอ้มลูมกัจะทาํเป็นกลุ่มใหญ่ๆ ตวัอยา่งของภาษาในกลุ่มนี, ไดแ้ก่ ลิสป์ (LISP) สกรีม (SCHEME) และ เอ็มแอล (ML) เป็นตน้ ค. ภาษาการเขยีนโปรแกรมเชิงตรรกะ (logic programming language) ตรรกะที"ใชใ้นภาษากลุ่มนี, คือ first-order predicate calculus ซึ"งใชอ้ธิบายประโยคทางตรรกะ ที"เป็นจริงหรือเท็จอยา่งใดอยา่งหนึ"ง เช่น ประโยค “2 เป็นเลขคู”่ เป็นจริง แต่ประโยค “3 เป็นเลขคู”่ เป็นเท็จ เป็นตน้ แลว้ใชก้ฎของการอนุมาน เพื"อ

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    2

    พิสจูน์ประโยควา่ เป็นจริงหรือเท็จ หรือสรา้งประโยคใหม่จากประโยคเดิมที"มีอยูแ่ลว้ เช่น ถา้มีประโยค “ถา้ a เป็นจริง แลว้ b เป็นจริง” และ “ถา้ b เป็นจริง แลว้ c เป็นจริง” สามารถสรุปเป็นประโยคใหม่ไดว้่า “ถา้ a เป็นจริง แลว้ c เป็นจริง “ เป็นตน้ การเขยีนโปรแกรมของภาษาในกลุ่มนี, คือ การเขยีนเซตของประโยค ที"สมมุติว่าเป็นจริง และสามารถนําไปพสิจูน์หรือสรา้งประโยคอื"นได ้เช่น เซตของประโยคต่อไปนี, “มา้เป็นสตัวเ์ลี, ยงลกูดว้ยนํ,านม” “คนเป็นสตัวเ์ลี, ยงลกูดว้ยนํ,านม” “สตัวเ์ลี, ยงลกูดว้ยนํ,านมมี 4 ขา และไม่มีมือ หรือ มี 2 ขาและ 2 มือ” “มา้ไม่มีมือ” “คนมีมือ 2 มือ” สามารถเขยีนเป็นโปรแกรมได ้ดงันี, mammal(horse). mammal(human).

    ∀x, mammal(x) -> legs(x,4) and arms(x,0) or legs(x,2) and arms(x,2). arms(horse,0). arms(human,2). สาํหรบัขอ้มลูของโปรแกรม ก็คือ ประโยคสอบถามหรือประโยคเป้าหมายนั"นเอง เช่น ถามว่า

    ∃y, legs(human,y)? โปรแกรมจะใหค้าํตอบ ดงันี, yes: y=2 เป็นตน้ เป็นภาษาอีกกลุ่มหนึ"งที"นิยมใชใ้นกลุ่มที"ศึกษาทางดา้นปัญญาประดิษฐ ์ ตวัอยา่งของภาษาในกลุ่มนี, ไดแ้ก่ โปรล็อก (PROLOG) เป็นตน้ ง. ภาษาเชิงวตัถุ (object oriented language) ภาษาในกลุ่มนี, เน้นการเขยีนโปแกรม โดยการส่งขอ้ความ (message) ระหวา่งวตัถุ วตัถุประกอบดว้ยขอ้มลูและการดาํเนินการกบัขอ้มลู การดาํเนินการกบัขอ้มลูเรียกอีกอยา่งหนึ"งว่า วิธีการ (method) การส่งขอ้ความไปยงัวตัถุใด ก็คือการเรียกใช ้ วธีิการ ของวตัถุนั,น ตวัอยา่งเช่น วตัถุที"เป็นกองซอ้น (stack) มีขอ้มลูเป็นแถวลาํดบัและดรรชนีชี, ไปยงัยอดกองซอ้น (top of stack) มีวิธีการ เช่น กด (push) ผุด (pop) ทดสอบกองซอ้นว่าง (stack empty) และทดสอบกองซอ้นลน้ (stack overflow) เป็นตน้ ภาษากลุ่มนี, มีลกัษณะที"สาํคญั คือ 1. การซ่อนสารสนเทศ (information hiding) แนวคิดของการซ่อนสารสนเทศ มีมานานแลว้ อยา่งเช่น กระบวนงานหรือฟังกช์นัในภาษาสองกลุ่มแรก ก็เป็นลกัษณะการซ่อนสารสนเทศอยา่งหนึ"ง เป็นตน้ ผูใ้ชไ้ม่จาํเป็นตอ้งรูว้่าขา้งในเขยีนอยา่งไร เพียงแต่รูว้่าทาํอะไร ก็สามารถเรียกใชไ้ดโ้ดยการอา้งชื"อและผ่านพารามิเตอร ์ไปมาระหวา่งกนัเท่านั,น แต่ลกัษณะเด่นของการซ่อนสารสนเทศในภาษากลุ่มนี, ก็คือ การซ่อนขอ้มลูและวธีิการไว้ดว้ยกนั ดงันั,นการเปลี"ยนแปลงขอ้มลู และวิธีการของวตัถุ จะไม่มีผลกระทบกบัวตัถุอื"นๆ ที"เรียกใช ้ เช่น การเปลี"ยนขอ้มลูจากกองซอ้น เป็น รายการโยง และตวัชี, ไปยงัยอดกองซอ้น พรอ้มทั,งเปลี"ยนวธีิการ กด ผุด ทดสอบกองซอ้นว่าง และทดสอบกองซอ้นลน้ ตามโครงสรา้งขอ้มลูใหม่ จะไม่มีผลกบัวตัถุอื"นๆ

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    3

    2. หลกันามธรรมขอ้มลู (data abstraction) ลกัษณะการซ่อนสารสนเทศอยา่งเดียว ยงัไม่เพียงพอที"จะทาํใหภ้าษาในกลุ่มนี, มีลกัษณะเด่น แตกต่างจากภาษาในกลุ่มอื"นๆ วตัถุยงัสามารถมองไดใ้นรปูของหลกันามธรรมขอ้มลู ที"ผูใ้ชส้ามารถกาํหนดแบบชนิดขอ้มลูและการดาํเนินการได ้ เช่น ในตวัอยา่งวตัถุแบบกองซอ้น ผูใ้ชม้องกองซอ้นเป็นที"เก็บขอ้มลูเหมือนลกัษณะการวางจานซอ้นๆ กนั การเอาขอ้มลูออกจากกองซอ้น จะกระทาํกบัขอ้มลูตาํแหน่งบนสุดเสมอ เหมือนการนําจานใบบนสุดออกก่อนเสมอ ตราบใดที"การทาํงานของกอ้งซอ้นเป็นไปตามที"กล่าวมาขา้งตน้ การใชแ้ถวลาํดบัหรือรายการโยงเป็นกองซอ้นจึงไม่ใช่สาระสาํคญั เป็นตน้ 3. การถ่ายทอดพนัธุกรรม (inheritance) ลกัษณะการถ่ายทอดพนัธุกรรมในภาษากลุ่มนี, เลียนแบบลกัษณะพนัธุกรรมตามธรรมชาติ เช่น สรรพสิ"งในโลก แบ่งออกเป็นสองกลุ่ม คือ สิ"งมีชีวติ และสิ"งไม่มีชีวติ สิ"งมีชีวิตแบ่งออกเป็นกลุ่มยอ่ยๆ ระดบัล่าง ไดเ้ป็นสองกลุ่มยอ่ย คือ พชืกบัสตัว ์พืชและสตัวส์ามารถแบ่งออกเป็นกลุ่มยอ่ยๆ ระดบัล่างลงไปไดอ้ีกหลายระดบั แต่ละกลุ่มมีคุณสมบติัที"เหมือนกนั หรือร่วมกนั เช่น สิ"งมีชีวิตหายใจ แต่สิ"งไม่มีชีวิตไม่หายใจ เป็นตน้ การหายใจและไม่หายใจ เป็นคุณสมบติัที"แบ่งแยกสิ"งมีชีวิตและสิ"งไม่มีชีวิต คุณสมบติัที"เหมือนกนั จะถ่ายถอดจากระดบับน (แม่) ลงไปสู่ระดบัล่าง (ลกู) เช่น การหายใจ จะเป็นคุณสมบติัของสิ"งมีชีวิต ที"ถ่ายทอดไปยงัพชื สตัว ์และกลุ่มยอ่ยระดบัล่าง (หลาน เหลน ฯลฯ) ของพืชและสตัว ์เป็นตน้ ศพัท์ที"ใชใ้นภาษากลุ่มนี, เรียก กลุ่ม ว่า class เรียก กลุ่มระดบับน วา่ super class และ เรียก กลุ่มระดบัลา่ง ว่า sub class วตัถุก็คือสิ"งของที"อยูใ่นกลุ่ม คุณสมบติัของกลุ่ม แทนดว้ยขอ้มลูและวิธีการ แต่ละวตัถุจะมีขอ้มลูเป็นของตวัเอง แต่ทุกๆ วตัถุในกลุ่มเดียวกนั จะมีวิธีการเหมือนกนั โดยใชว้ิธีการของกลุ่ม ภาษาในกลุ่มนี, สามารถกาํหนดใหก้ลุ่มของวตัถุ มีโครงสรา้งเป็นระดบัดงัที"กล่าวมาแลว้ได ้ และสามารถถ่ายทอดพนัธุกรรม ในลกัษณะที"วตัถุในระดบัล่าง สามารถเรียกใชว้ธีิการของวตัถุในระดบับน ที"มีคุณสมบติัเหมือนกนัได ้ โดยไม่ตอ้งมีวิธีการดงักล่าวเป็นของตวัเอง ทาํใหป้ระหยดัเนื, อที" 4. โพลีมอรฟิ์ซึม (polymorphism) คาํวา่ โพลีมอรฟิ์ซึม มาจากรากศพัทภ์าษากรีก ซึ"งมีความหมายว่า หลายรปูแบบ โพลีมอรฟิ์ซึมในภาษาคอมพิวเตอรมี์หลายอยา่ง เช่น

    • ตวัแปรโพลีมอรฟิ์ก (polymorphic variable) คือ ตวัแปรที"เป็นไดห้ลายๆ ชนิด เช่น ในภาษาลิสป์หรือสมอลทอค (Smalltalk) เป็นตน้ ชนิดของตวัแปรแบบนี, จะเปลี"ยนไปขณะกระทาํการ ขึ, นอยูก่บัค่าที"กาํหนดใหก้บัตวัแปรในขณะนั,น ถา้กาํหนดค่าจาํนวนเต็มให ้ ชนิดของตวัแปรในขณะนั,น ก็จะเป็นชนิดจาํนวนเต็ม แต่ถา้ในภายหลงั เปลี"ยนเป็นกาํหนดค่าจาํนวนจริงให ้ ตวัแปรนั,นก็จะเปลี"ยนชนิดไปเป็นจาํนวนจริง เป็นตน้

    • ฟังกช์นัโพลีมอรฟิ์ก (polymorphic function) ไดแ้ก่ ฟังกช์นัที"มีพารามิเตอรซึ์"งสามารถรบัค่าไดห้ลายชนิด และค่าที"ส่งกลบัอาจเป็นไดห้ลายชนิด เช่น ฟังกช์นัในภาษาลิสป์ และสมอลทอค เป็นตน้

    • ชนิดโพลีมอรฟิ์ก (polymorphic type) ในภาษาเอ็มแอล สามารถกาํหนดชนิด เป็นชนิดใดๆ ได ้ตวัแปลจะตรวจสอบและรูช้นิด ในช่วงการแปล โดยวิธีการที"เรียกว่า การอนุมานชนิด ตวัแปรหรือฟังกช์นัเดียวกนั จึงอาจจะมีชนิดไดห้ลายชนิด ลกัษณะที"คลา้ยกนันี, ก็มีในภาษาอื"นๆ เช่น template ในภาษาซี หรือ generics ในภาษาเอดา (Ada) เป็นตน้

    • โอเวอรโ์หลดดิง (overloading) มีหลายรปูแบบ เช่น ตวัดาํเนินการเดียวกนั สามารถดาํเนินการไดก้บัขอ้มลูหลายชนิด หรือฟังกช์นัมากกว่าหนึ"งฟังกช์นัมีชื"อเดียวกนั แต่แตกต่างกนัที"จาํนวนพารามิเตอร ์หรือชนิดของพารามิเตอร ์หรือชนิดของค่าที"ส่งกลบั เป็นตน้ ในภาษาปาสกาล ตวัดาํเนินการ อยา่งเช่น + สามารถดาํเนินการ

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    4

    ไดท้ั,งขอ้มลูชนิดจาํนวนเต็ม และจาํนวนจริง แต่ไม่อนุญาตใหฟั้งกช์นัหรือกระบวนงาน มีชื"อเหมือนกนั ตวัดาํเนินการในภาษาปาสกาลถูกกาํหนดตายตวัไวแ้ลว้ในภาษา ต่างกบัภาษาในกลุ่มนี, ที"อนุญาตใหผู้ใ้ช ้กาํหนดตวัดาํเนินการที"มีอยูแ่ลว้ในภาษา ไปดาํเนินการกบัขอ้มลูชนิดใหม่ที"ผูใ้ชก้าํหนดขึ, นได ้ และฟังกช์นัมากกวา่หนึ"งฟังกช์นัสามารถมีชื"อเหมือนกนัได ้

    • โพลีมอรฟิ์ซึมอีกแบบหนึ"งที"เป็นลกัษณะเด่นของภาษาในกลุ่มนี, คือ สามารถเขยีนวิธีการที"มีคุณสมบติัเหมือนกนั ซึ"งถ่ายทอดทางพนัธุกรรม จากระดบับนลงสู่ระดบัล่าง ไวที้"ระดบัแม่ เพียงครั,งเดียว ที"เดียว แลว้ให้วตัถุที"มีคุณสมบติัเหมือนกนัดงักล่าว ที"ระดบั ลกู หลาน แหลน ฯลฯ เรียกใชว้ิธีการนี, ร่วมกนัได ้วิธีการร่วมที"วา่นี, จึงมีลกัษณะเป็นโพลีมอรฟิ์ซึม เพราะวธีิการเดียวกนั สามารถใชไ้ดก้บัวตัถุหลายกลุ่ม 5 การยดึเหนี"ยวพลวตั (dynamic binding) วตัถุอาจจะเกิดขึ, นในช่วงกระทาํการ และขอ้ความเดียวกนัเมื"อส่งไปยงัวตัถุต่างกลุ่มกนั อาจจะหมายถึงการเรียกใชว้ิธีการที"ต่างกนั เนื"องจากโครงสรา้งระดบัของการถ่ายทอดพนัธุกรรม กลุ่มวตัถุระดบัล่าง นอกจากจะมีคุณสมบติัร่วมกบักลุ่มวตัถุระดบับนแลว้ ยงัมีคุณสมบติัที"แตกต่างจากกลุ่มวตัถุระดบับน ซึ"งเป็นสาเหตุที"ตอ้งทาํใหแ้ยกกลุ่มออกมา คุณสมบติัที"แตกต่างดงักล่าวนี, สามารถกาํหนด ชื"อวธีิการ ใหเ้หมือนกบั ชื"อวิธีการ ของกลุ่มวตัถุระดบับนได ้ ซึ"งเป็นลกัษณะของโอเวอรโ์หลดดิง ดงัที"กล่าวมาแลว้ขา้งตน้ แมชื้"อของวธีิการจะเหมือนกนั แต่การทาํงานจะแตกต่างกนั ดงันั,น ชื"อ(ขอ้ความ) อยา่งเดียว ไม่สามารถกาํหนดไดว้่าหมายถึงวิธีการใด จาํเป็นตอ้งมีการคน้หา โดยเริ"มคน้หาจากชื"อของวิธีการในกลุ่มที"วตัถุนั,นอยูก่่อน ถา้ไม่พบจึงจะไปคน้หาชื"อวิธีการในกลุ่มระดบับน ไล่ขึ, นไปตามลาํดบั ถา้ไม่พบก็แสดงขอ้ความผิดพลาดใหผู้ใ้ชรู้ ้แต่ถา้พบที"ระดบัใด ก็เรียกใชว้ิธีการในระดบันั,น ดงันั,นตวัแปลจึงไม่สามารถยดึเหนี"ยววิธีการกบัขอ้ความที"ส่งมาในช่วงการแปลได ้จาํเป็นตอ้งยดึเหนี"ยวในช่วงกระทาํการ เรียกวา่ การยดึเหนี(ยวพลวตั ขอ้เสียก็คือตอ้งเสียเวลาในการยดึเหนี"ยว ภาษาบางภาษา เช่น ซี++ เป็นตน้ จึงออกแบบใหก้ารยดึเหนี"ยวขอ้ความกบัวิธีการส่วนใหญ่ทาํไดใ้นช่วงการแปล ส่วนการยดึเหนี"ยวที"ไม่สามารถทาํไดใ้นช่วงการแปล จะใชว้ธีิสรา้งตาราง เพื"อช่วยใหก้ารยดึเหนี"ยวในช่วงกระทาํการทาํงานไดเ้ร็วขึ, น แต่มีขอ้เสีย คือ ตอ้งเสียเนื, อที"เก็บตาราง ลกัษณะที"กล่าวมาขา้งตน้ เกิดจากความพยายามที"จะแกปั้ญหาของการเขยีนโปรแกรม ที"มกัจะลา้ชา้กวา่กาํหนด และตอ้งทิ, งไปเมื"อเริ"มงานใหม่ ลกัษณะของภาษาในกลุ่มนี, จะช่วยใหก้ารเขยีนโปรแกรมเร็วขึ, น และสามารถนํากลบัมาใชใ้หม่ได ้ แนวความคิดก็คือ ออกแบบโปรแกรมใหเ้หมือนกบัการสรา้งบา้นหรือรถยนต ์ โดยการสรา้งส่วนประกอบยอ่ยๆ แลว้เอามาประกอบกนั ส่วนประกอบยอ่ยดงักล่าว อาจนําไปใชใ้นงานอื"นได ้ เช่น การนําแบตเตอรี"ของรถยนต ์ไปใชใ้นเรือยนต ์เป็นตน้ ถา้สามารถออกแบบโครงสรา้งระดบัของวตัถุกลุ่มต่างๆ ได้ดี เมื"อมีงานใหม่ ก็ไม่จาํเป็นตอ้งเขยีนใหม่ทั,งหมด เพียงแต่ออกแบบวตัถุใหม่ที"สามารถติดต่อสื"อสารกบัวตัถุเดิมที"มีอยูแ่ลว้ หรือออกแบบกลุ่มวตัถุใหม่ ใหเ้ป็นกลุ่มยอ่ยของกลุ่มวตัถุเดิมที"มีอยูแ่ลว้ แลว้เรียกใชว้ิธีการที"มีคุณสมบติัร่วมกนัของกลุ่มดงักล่าว โดยไม่ตอ้งเขียนวิธีการใหม่ทั,งหมด เขยีนเฉพาะวิธีการที"แตกต่างเท่านั,น เป็นการประหยดัทั,งเนื, อที"และเวลา ตวัอยา่งภาษาในกลุ่มนี, ไดแ้ก่ ซี++ จาวา และ สมอลทอค เป็นตน้ จ. ภาษาการโปรแกรมเชิงขนาน (parallel programming language) หรือ ภาษาการโปรแกรมภาวะพรอ้มกนั (concurrent programming language) เป็นภาษาที"มีขอ้ความสั "ง เพื"อใหผู้ใ้ชส้ามารถเขยีนโปรแกรมในลกัษณะขนานได ้เช่น การคณูแมทริกซ ์อาจจะทาํไดโ้ดยการคณูทีละแถวแบบขนานกนั แลว้นําผลคณูที"ไดม้าบวกกนัในภายหลงั เป็นตน้ จะเห็นไดว้่าการทาํงานแบบขนานไม่ไดท้าํขนานตลอดเวลา จะตอ้งมีการมาบรรจบกนัที"

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    5

    จุดหนึ"ง ณ. เวลาหนึ"ง เรียกว่า การประสานเวลา (synchronization) เช่น การคณูแมทริกซข์า้งตน้ การคณูแต่ละแถวเป็นแบบขนาน แต่การบวกไม่ใช่ ตอ้งรอใหก้ารคณูในแถวเสร็จก่อน จึงจะบวกกนัได ้ การประสานเวลาทาํได้หลายวธีิ เช่น ใช ้semaphore, monitor หรือ message passing เป็นตน้ ลกัษณะของการขนานที"ใชใ้นโปรแกรม อาจจะไม่ใช่การทาํงานขนานจริงๆ ดว้ยส่วนเครื"อง (hardware) แต่สามารถทาํงานในภาวะพรอ้มกนั (concurrency) เช่น ระบบปฏบิติัการที"ทาํงานหลายๆ งานพรอ้มกนั โดยใชซี้พียเูพียงตวัเดียว เป็นลกัษณะหนึ"งของการทาํงานในภาวะพรอ้มกนั การทาํงานแบบขนานจริงกบัภาวะพรอ้มกนั จึงแตกต่างกนัที"ระดบัส่วนเครื"อง การทาํงานแบบขนานจริงดว้ยส่วนเครื"อง เช่น การทาํงานดว้ยซีพียมูากกว่าหนึ"งตวั (จะกล่าวถึงในหวัขอ้ถดัไป) เป็นตน้ ตวัอยา่งภาษาในกลุ่มนี, ไดแ้ก่ โมดลูา-2 (Modular-2), เอดา, ซีเอสพ ี(CSP), และ ภาษาในกลุ่มที"กล่าวมาแลว้ขา้งตน้ทั,งหมดที"มีขอ้ความสั "งในการทาํงานขนานหรือภาวะพรอ้มกนัเพิ"มเขา้ไปในภาษา เช่น concurrent Pascal เป็นตน้

    1.2 ตวัแปล

    เครื"องคอมพิวเตอรส์ามารถเขา้ใจคาํสั "งภาษาเครื"องเท่านั,น ไม่สามารถเขา้ใจภาษาระดบัสงู เช่น ภาษาปาสคาล หรือภาษาซี เป็นตน้ ฉะนั,นโปรแกรมที"เขยีนดว้ยภาษาระดบัสงู จะตอ้งมีตวัแปล ตวัแปลมีหลายประเภท ตวัแปลที"แปลจากภาษาระดบัสงูไปเป็นภาษาแอสเซมบลีหรือภาษาเครื"อง เรียกวา่ คอมไพเลอร ์(compiler) ตวัแปลที"แปลจากภาษาระดบัสงูไปเป็นรหสัชั "วคราว แลว้กระทาํการกบัรหสัชั "วคราวโดยตรง เรียกวา่ อินเทอรพ์รีเตอร ์ (interpreter) ตวัแปลที"แปลภาษาแอสเซมบลีไปเป็นภาษาเครื"อง เรียกว่า แอสเซมเบลอร ์(assembler)

    1.3 สถาปัตยกรรมของคอมพิวเตอร ์ คอมพิวเตอรป์ระกอบดว้ยส่วนที"สาํคญั 4 ส่วนใหญ่ๆ คือ หน่วยประมวลผลกลาง (Central Processor Unit) หรือ ซีพีย ู(CPU) หน่วยความจาํ(Memory Unit) หน่วยรบัเขา้/ส่งออก (Input/Output Unit) และหน่วยเก็บช่วย (Auxiliary Storage Unit) หรือ หน่วยเก็บรอง (Secondary Storage Unit) ดงัแสดงในรปูที" 1.1 หน่วยประมวลผลกลาง หน่วยคาํนวณและตรรกะ หน่วยควบคุม หน่วยรบัเขา้/ส่งออก หน่วยความจาํ หน่วยเก็บช่วย

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    6

    รปูที" 1.1 ส่วนประกอบที"สาํคญัของคอมพิวเตอร ์ ซีพียปูระกอบดว้ยหน่วยคาํนวณและตรรกะ (arithmetic-logic unit) หรือเอแอลย ู (ALU) ทาํหน้าที"คาํนวณและทดสอบทางตรรกะ และหน่วยควบคุม (control unit) ทาํหน้าที"ควบคุมหน่วยอื"นๆ ตวัอยา่งของซีพีย ูเช่น ซีพียขูองบริษัทอินเทล ซึ"งใชใ้นเครื"องไอบีเอ็มพีซี มีหมายเลขที"สาํคญัเรียงจากน้อยไปมาก คือ 8086/8088, 80286, 80386, 80486, Pentium, Pentium Pro, Pentium MMX, Pentium II, และ Pentium III หมายเลขที"ตํ "ากว่า 80486 จะมีหน่วยคาํนวณตวัเลขจาํนวนจริง แยกออกไปต่างหาก เรียกว่า ซีพียรู่วม (math co-processor หรือ co-processor) ซึ"งลงทา้ยดว้ยหมายเลข 7 เช่น 8087 เป็นตน้ ตั,งแต่ 80486 เป็นตน้ไป จะรวมซีพียรู่วมไว้ดว้ย ถา้ไม่มีซีพียรู่วมผูใ้ชจ้ะตอ้งเขยีนโปรแกรมเพื"อคาํนวณเลขจาํนวนจริงเอง ตวัแปลภาษาคอมพิวเตอรส่์วนใหญ่จะจดัการโปรแกรมส่วนนี, ให ้ ซีพียทีู"มีหมายเลขสงูขึ, นจะยงัคงรกัษาความสามารถในการทาํงานของซีพียทีู"มีหมายเลขตํ "ากว่า แต่มีความเร็วสงูขึ, น มีคาํสั "งเพิ"มขึ, น และมีความสามารถเพิ"มขึ, น เช่น Pentium MMX มีคาํสั "งที"ทาํงานทางดา้นกราฟฟิกไดดี้ เพิ"มขึ, น เป็นตน้ ซีพียขูองบริษัทโมโตโรลา ซึ"งใชใ้นเครื"องแอปเปิล มีหมายเลขที"สาํคญั เช่น M68000 เป็นตน้ ซีพียขูองทั,งสองบริษัทที"กล่าวมาขา้งตน้ เป็นสถาปัตยกรรมแบบที"เรียกว่า CISC (Complex Instruction Set Computer) ซีพียอูื"นๆ เช่น MIPS, SPARC และ PowerPC ซึ"งใชก้บัเครื"อง Siligon Graphic, Sun และ Apple Macintosh ตามลาํดบั เป็นสถาปัตยกรรมแบบที"เรียกว่า RISC (Reduce Instruction Set) สถาปัตยกรรมแบบ RISC มีคุณสมบติัที"สาํคญั คือ

    ก. การทาํงานแบบสายท่อ (pipeline) สามารถปฏบิติัการกบัคาํสั "งไดม้ากกวา่หนึ"งคาํสั "งพรอ้มๆ กนัโดยแบ่งรอบของการกระทาํการออกเป็นส่วนยอ่ยๆ คือ ส่วนดึงคาํสั "ง (instruction fetch), ส่วนถอดรหสัคาํสั "ง (instruction decode), ส่วนดึงตวัถูกดาํเนินการ (operand fetch), ส่วนกระทาํการคาํสั "ง (instruction execute) และ ส่วนเก็บผลลพัธ ์(store result) แต่ละส่วนจะทาํงานพรอ้มกนัอยา่งอิสระ ส่วนไปนําคาํสั "งมาจะไม่รอใหค้าํสั "งที"นําเขา้มาทาํงานเสร็จก่อน แต่จะไปนําคาํสั "งถดัไปมาเลย ในทาํนองเดียวกนักบัส่วนอื"น ดงัแสดงในรปูที" 1.2 ไม่ใชแ่บบสายท่อ ดึงคาํสั "ง ถอดรหสั ดึงตวัถกู กระทาํการ เก็บผลลพัธ ์ ดึงคาํสั "ง ถอดรหสั ดึงตวัถกู กระทาํการ เก็บผลลพัธ ์ ดาํเนินการ ดาํเนินการ แบบสายท่อ ดึงคาํสั "ง ดึงคาํสั "ง ดึงคาํสั "ง ดึงคาํสั "ง ดึงคาํสั "ง ดึงคาํสั "ง ถอดรหสั ถอดรหสั ถอดรหสั ถอดรหสั ถอดรหสั ถอดรหสั ดึงตวัถกู ดึงตวัถกู ดึงตวัถกู ดึงตวัถกู ดึงตวัถกู ดึงตวัถกู ดาํเนินการ ดาํเนินการ ดาํเนินการ ดาํเนินการ ดาํเนินการ ดาํเนินการ กระทาํการ กระทาํการ กระทาํการ กระทาํการ กระทาํการ กระทาํการ เก็บผลลพัธ ์ เก็บผลลพัธ ์ เก็บผลลพัธ ์ เก็บผลลพัธ ์ เก็บผลลพัธ ์ เก็บผลลพัธ ์ 1 2 3 4 5 6 7 8 9 10 ระยะวดัเป็นรอบการทาํงานของเครื"อง

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    7

    รปูที" 1.2 ความแตกต่างระหวา่งปฏบิติัการแบบสายท่อกบัที"ไม่ใช่

    รปูที" 1.2 แสดงใหเ้ห็นถึงความแตกต่างระหวา่งการกระทาํการแบบสายท่อ กบัที"ไม่ใช่ ถา้ตอ้งกระทาํการกบัคาํสั "ง 6 คาํสั "งที"เรียงติดต่อกนั จะเห็นไดว้่าการทาํงานแบบสายท่อจะใชเ้วลาเพียง 10 รอบการทาํงานของเครื"อง แต่ตอ้งใชเ้วลาถึง 30 รอบ ถา้ไม่ใชก้ารทาํงานแบบสายท่อ อยา่งไรก็ตามการทาํงานจริงๆ ไม่ไดท้าํเรียงตามลาํดบัเสมอไป เมื"อมีการกระโดดไปยงัคาํสั "งที"ไม่อยูติ่ดกนั คาํสั "งที"อยูถ่ดัจากคาํสั "งกระโดดจึงไม่ใช่คาํสั "งถดัไป จาํเป็นตอ้งเอาคาํสั "งที"นํามาแลว้ แต่ยงัทาํงานไม่ครบรอบกระทาํการ ทิ, งทั,งหมด จะเห็นไดว้า่โปรแกรมที"มีคาํสั "งกระโดดมากๆ จะสรา้งปัญหาใหก้บัสถาปัตยกรรมแบบนี, เพราะทาํใหเ้สียเวลาในการนําคาํสั "งมาแลว้ตอ้งทิ, งไป ข. คาํสั "งมีขนาดเท่ากนั ทาํใหไ้ม่ตอ้งรอการถอดรหสัคาํสั "ง สามารถรูเ้ลขที"อยูข่องคาํสั "งที"อยูถ่ดัไป จะต่างกบัสถาปัตยกรรมแบบ CISC ซึ"งมกัจะมีขนาดไม่เท่ากนั จึงจาํเป็นตอ้งถอดรหสัคาํสั "งก่อน เพื"อจะไดรู้ว้า่คาํสั "งถดัไปอยูที่"ไหน อยา่งไรก็ตาม ขอ้ดีของคาํสั "งที"มีขนาดไม่เท่ากนั คือ การใชเ้นื, อที"อยา่งประหยดั ค. มีเรจสิเตอรอ์เนกประสงค ์ (general-purpose register) ค่อนขา้งมาก การคาํนวณจะกระทาํระหว่าง เรจิสเตอรเ์ป็นส่วนใหญ่ เพราะจะเร็วกวา่การคาํนวณระหว่างเรจิสเตอรก์บัหน่วยความจาํ การติดต่อกบัหน่วยความจาํ มีเพียงคาํสั "งบรรจุ (load instruction) เพื"อนําขอ้มลูจากหน่วยความจาํเขา้มายงัเรจิสเตอรใ์นซีพยี ูและคาํสั "งเก็บ (store instruction) เพื"อนําขอ้มลูในเรจสิเตอรไ์ปเก็บในหน่วยความจาํ เท่านั,น ไม่มีคาํสั "งที"คาํนวณระหว่างขอ้มลูในเรจิสเตอรก์บัในหน่วยความจาํ บางครั,งจึงเรียกสถาปัตยกรรมแบบนี, ว่า ‘บรรจ-ุเก็บ’” ต่างกบัสถาปัตยกรรมแบบ CISC ซึ"งมีคาํสั "งที"ใชค้าํนวณระหว่างขอ้มลูในเรจสิเตอรก์บัในหน่วยความจาํ ทาํใหมี้วธีิการอา้งถึงเลขที"อยูใ่นหน่วยความจาํหลายรปูแบบ สถาปัตยกรรมแบบ RISC มองว่าคอมไพเลอรส่์วนใหญ่ผลิตคาํสั "งภาษาเครื"องไม่กี"รปูแบบ และเชื"อถือความสามารถของคอมไพเลอร ์ ในการทาํคาํสั "งภาษาเครื"องใหไ้ดผ้ลดีที"สุด ส่วนสถาปัตยกรรมแบบ CISC คิดถึงการประหยดัเนื, อที" และความสามารถของคาํสั "งแต่ละคาํสั "ง หนึ"งคาํสั "งของสถาปัตยกรรมแบบ CISC อาจทาํงานได้เทียบเท่ากบัหลายๆ คาํสั "งของสถาปัตยกรรมแบบ RISC ขอ้โตเ้ถียงจึงมีว่า การทาํงานโดยใชค้าํสั "งจาํนวนมาก แต่ละคาํสั "งทาํงานน้อยแต่เร็ว กบัใชค้าํสั "งจาํนวนน้อย แต่ละคาํสั "งทาํงานไดม้ากกวา่ แต่ใชเ้วลามากกว่า อนัไหนจะเร็วกวา่กนั ยงัไม่มีคาํตอบที"ชดัเจน แต่แนวโน้มของสถาปัตยกรรมแบบ RISC เริ"มมีมากขึ, น หน่วยความจาํ ทาํหน้าที"เก็บทั,งคาํสั "งและขอ้มลูที"จะนําไปประมวลผล แบ่งออกเป็น 3 ระดบั ไดแ้ก่ หน่วยความจาํแคช หรือเรียกสั,นๆ วา่ แคช (cache) หน่วยความจาํหลกั (main memory หรือ primary memory) และหน่วยความจาํรอง (secondary memory) หน่วยความจาํหลกัจาํเป็นตอ้งมี แต่แคชและหน่วยความจาํรองไม่จาํเป็นตอ้งมีก็ได ้ แคชจะอยูร่ะหว่างซีพียกูบัหน่วยความจาํหลกั ทาํงานไดเ้ร็วกว่าหน่วยความจาํหลกั แต่มีราคาแพงกว่า หน่วยความจาํรอง คือ หน่วยเก็บรองที"มีความเร็วสงู และสามารถเขา้ถึงขอ้มลูแบบสุ่ม คือ จะเขา้ถึงขอ้มลูที"ตาํแหน่งใดก็ได ้ไม่จาํเป็นตอ้งเรียงตามลาํดบั เช่น จานบนัทึกแบบแข็ง (hard disk) เป็นตน้ ซึ"งมีราคาถูกกว่า แต่ทาํงานไดช้า้กว่าหน่วยความจาํหลกั เหตุผลที"ตอ้งมีแคช เพราะทฤษฎขีองการอา้งถึงตาํแหน่งในหน่วยความจาํ กล่าววา่ โปรแกรมมกัจะใชค้าํสั "งและขอ้มลูที"ตาํแหน่ง ที"พึ"งใชไ้ปเมื"อไม่นานมานี, บ่อยๆ กฎหวัแม่มือ (rule of thump) ที"ใชก้นับ่อยๆ ก็คือ โปรแกรมใชเ้วลาส่วนใหญ่ถึง 90% เพื"อกระทาํการกบัคาํสั "งเพียง 10% ตวัอยา่งเช่น โปรแกรมที"ใชเ้วลาส่วนใหญ่คาํนวณบริเวณเดิมเป็นรอบซํ,าๆ หลายรอบ (คาํสั "ง while, repeat หรือ for) เป็นตน้ ทฤษฎขีองการอา้งถึงตาํแหน่งมี 2 แบบ คือ ตาํแหน่งสมัพนัธก์บัเวลา (temporal locality) และ

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    8

    ตาํแหน่งสมัพนัธก์บัสถานที" (spatial locality) แบบแรกกล่าวว่า ตาํแหน่งที"ถูกใช ้ จะถูกกลบัมาใชอ้ีกในไม่ชา้ แบบหลงักล่าววา่ ตาํแหน่งที"อยูใ่กล้ๆ กนั จะถูกใชใ้นเวลาใกลเ้คียงกนั การมีแคช จึงสอดคลอ้งกบัทฤษฎดีงักล่าว เมื"อโปรแกรมในหน่วยความจาํหลกัเริ"มกระทาํการ ขอ้มลู (หรือคาํสั "ง) ตรงตาํแหน่งที"อา้งถึงและบริเวณที"อยู่ใกลเ้คียงกนั เรียกว่า บล็อก จะถูกบรรจุขึ, นไปเก็บไวใ้นบล็อกของแคช ถา้ขอ้มลูที"จะกระทาํการต่อไปอยูใ่นแคช ในกรณีนี, เรียกวา่ แคชฮิต (cache hit) ซีพียจูะใชข้อ้มลูมาจากหน่วยความจาํแคช ทาํใหท้าํงานไดเ้ร็วขึ, น แต่ถา้ไม่อยู่ในแคช ในกรณีนี, เรียกว่า แคชมิส (cache miss) จะตอ้งไปนําบล็อกที"ตอ้งการในหน่วยความจาํหลกั มาบรรจุบนบล็อกของแคช ถา้บล็อกของแคชวา่ง ก็สามารถบรรจุไดท้นัที แต่ถา้ไม่ว่าง จะตอ้งไล่บล็อกที"ไม่ใช ้ ไปเก็บไวใ้นหน่วยความจาํหลกั แลว้บรรจบุล็อกที"ตอ้งการแทน ฉะนั,นเวลาที"ใชใ้นการเขา้ถึงขอ้มลูในหน่วยความจาํหลกัหรือแคช จะชา้หรือเร็ว ขึ, นอยูก่บัปัจจยัสามอยา่ง คือ เวลาที"ใชเ้ขา้ถึงขอ้มลูในแคชในกรณีแคชฮิต อตัราของแคชมิส และเวลาที"ใชใ้นการเคลื"อนยา้ยบล็อกและเขา้ถึงขอ้มลูในกรณีแคชมิส ซึ"งเขยีนเป็นสตูรไดด้งันี, เวลาที"ใชเ้ขา้ถึงขอ้มลูในหน่วยความจาํโดยเฉลี"ย = เวลาที"ใชเ้ขา้ถึงขอ้มลูในแคชในกรณีแคชฮิต + อตัราของแคชมิส x เวลาที"ใชใ้นการเคลื"อนยา้ยบล็อกและเขา้ถึงขอ้มลูในกรณีแคชมิส สาํหรบัเครื"องไอบีเอ็มพีซี หน่วยความจาํหลกัมีทั,งแบบ แรม (RAM หรือ Random Access Memory) ซึ"งมีลกัษณะของการเขา้ถึงขอ้มลู (หรือ คาํสั "ง) เป็นแบบสุ่ม และสามารถอ่านหรือเขยีนขอ้มลูได ้ กบัแบบ รอม (ROM หรือ Read Only Memory) ซึ"งมีลกัษณะของการเขา้ถึงขอ้มลู (หรือ คาํสั "ง) เป็นแบบสุ่ม แต่สามารถอ่านได้อยา่งเดียว แบบรอมจะใชเ้ก็บโปรแกรมที"ทาํหน้าที"ปลุกเครื"อง (boot) ระบบปฏบิติัการและเก็บโปรแกรมขบัอุปกรณร์บัเขา้หรือส่งออกเบื, องตน้ที"เรียกว่า ไบออส (BIOS) ส่วนแบบแรมใชส้าํหรบัเก็บโปรแกรมทั "วๆ ไปที"จะวิ"ง สาํหรบัหน่วยความจาํรอง เกิดขึ, นเนื"องมาจากหลกัการของการวิ"งโปรแกรมหลายๆ โปรแกรมพรอ้มกนั เพราะซีพียมีูความเร็วสงู จึงสามารถสลบัการทาํงานใหก้บัหลายๆ โปรแกรมพรอ้มกนั โดยการจดัสรรเวลาใหก้บัแต่ละโปรแกรม หรือในกรณีที" โปรแกรมใดกาํลงัรอขอ้มลูจากอุปกรณร์บัเขา้ หรือรอใหอ้ปุกรณส่์งออกแสดงผลลพัธเ์สร็จ ซีพียจูะพกัการทาํงานของโปรแกรมดงักล่าวชั "วคราว เพื"อไปบริการโปรแกรมอื"นก่อน จนกว่าอปุกรณ์รบัเขา้หรือส่งออกจะทาํงานเสร็จ แลว้ส่งสญัญานใหซี้พียรูู ้ โปรแกรมดงักล่าวจึงจะกลบัเขา้อยูใ่นขา่ยของการบริการจากซีพียตู่อไป โปรแกรมที"ทาํหน้าที"จดัสรรงานและเวลาใหก้บัซีพีย ู คือ ระบบปฏบิติัการ (Operating System) หรือ โอเอส (OS) ซึ"งจะกล่าวถึงในหวัขอ้ถดัไป โปรแกรมที"นํามาวิ"งภายใตร้ะบบปฏบิติัการ เรียกวา่ ขบวนการ (process) โอเอสจะเป็นตวัจดัสรรเนื, อที"และเวลาใหก้บัขบวนการ โอเอสบางตวัจะแบ่งเนื, อที"หน่วยความจาํออกเป็นบล็อกเท่าๆกนั ในขณะเดียวกนั เนื, อที"ของขบวนการจะถูกแบ่งออกเป็นบล็อกเท่าๆ กนั มีขนาดเท่ากบับล็อกของหน่วยความจาํหลกั อยา่งไรก็ตามไม่จาํเป็นที"ทุกๆ บล็อกของขบวนการ จะตอ้งอยูใ่นหน่วยความจาํหลกัพรอ้มๆ กนั หรืออยูติ่ดต่อกนั บล็อกของขบวนการที"จาํเป็นตอ้งใชเ้ท่านั,น ที"ตอ้งอยูใ่นหน่วยความจาํหลกั บล็อกที"ไม่จาํเป็น สามารถนําไปจดัเก็บในหน่วยความจาํรอง ทาํใหส้ามารถวิ"งโปรแกรมที"มีขนาดใหญ่กวา่หน่วยความจาํหลกัได ้ หน่วยความจาํในสายตาของโอเอสแบบนี, จึงเป็น หน่วยความจาํเสมือน (virtual memory) ดงัตวัอยา่งในรปูที" 1.3 แมบ้ล็อกของขบวนการจะอยูเ่รียงติดกนัในหน่วยความจาํเสมือน แต่ไม่จาํเป็นตอ้งอยูติ่ดกนัในหน่วยความจาํหลกั หรือในจานบนัทึก สถาปัตยกรรมที"สนับสนุนหน่วยความจาํเสมือน จะมีขบวนการแปลงเลขที"

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    9

    ของหน่วยความจาํเสมือน ไปเป็นเลขที"ของหน่วยความจาํหลกั เช่น การทาํเพจ (paging) ของซีพียอูินเทล ตั,งแต่หมายเลข 80386 เป็นตน้ หน่วยเก็บช่วย ไดแ้ก่อุปกรณที์ใชบ้นัทึกขอ้มลู เช่น แถบบนัทึก (tape) จานบนัทึก (disk) และ แผ่นซีดี เป็นตน้ แถบบนัทึกจะมีการทาํงานแบบเรียงลาํดบั จะมีราคาถูกกว่าจานบนัทึก จึงมกันิยมใชใ้นการจดัเก็บสาํเนาขอ้มลู เพื"อเป็นขอ้มลูสาํรองในกรณีที"จานบนัทึกเสีย จานบนัทึกมีหลายแบบ เช่น จานบนัทึกแบบแข็ง หรือจานบนัทึกแบบอ่อน (floppy disk หรือ diskette) เป็นตน้ จานบนัทึกแบบแข็ง จะมีความเร็วมากกวา่ จานบนัทึกแบบอ่อน จึงมกัจะใชเ้ป็นหน่วยความจาํรอง หน่วยรบัเขา้/ส่งออก ไดแ้ก่อุปกรณร์บัเขา้ เช่น แป้นพิมพ ์เมาส ์ไมโครโฟน และหน่วยขบัซีดีรอม เป็นตน้ อุปกรณส่์งออก เช่น จอภาพ ลาํโพง และเครื"องพิมพ ์ เป็นตน้ อุปกรณที์"เป็นไดท้ั,งสองอยา่ง เช่น หน่วยขบัแถบบนัทึก หน่วยขบัจานบนัทึก และหน่วยขบัแผ่นซีดีที"อ่านเขยีนได ้เป็นตน้ เลขที" เลขที" 0 0 A 4096 4096 B D 8192 8192 C 12288 12288 D A 16384 หน่วยความจาํเสมือน 20480 C หน่วยความจาํหลกั B จานบนัทึก รปูที" 1.3 ตวัอยา่งหน่วยความจาํเสมือน

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    10

    ประมาณปี ค.ศ. 1972 Flynn ไดเ้สนอแนวทางในการแบ่งคอมพิวเตอรอ์อกเป็น 4 แบบ ซึ"งยงัคงเป็นที"นิยมใชก้นัในปัจจุบนั ไดแ้ก่ ก. หนึ"งสายคาํสั "งหนึ"งสายขอ้มลู หรือ SISD (Single Instruction stream Single Data stream) เป็นคอมพิวเตอรที์"มีซีพียตูวัเดียว มีสถาปัตยกรรมแบบที"กล่าวมาแลว้ขา้งตน้ ข. หนึ"งสายคาํสั "งหลายสายขอ้มลู หรือ SIMD (Single Instruction stream Multiple Data stream) เป็นคอมพิวเตอรที์"มีซีพียมูากกวา่หนึ"งตวั กระทาํการกบัคาํสั "งเดียวกนั แต่ใชข้อ้มลูต่างกนั มีหน่วยความจาํที"เก็บเฉพาะคาํสั "งร่วมกนั และมีหน่วยที"ใชค้วบคุมซีพียแูต่ละตวั แต่ละซีพียจูะมีหน่วยความจาํเก็บเฉพาะขอ้มลูเป็นของตวัเอง ซีพียจูะมีลกัษณะพิเศษกว่าซีพียโูดยทั "วๆ ไป ตวัอยา่งของคอมพิวเตอรแ์บบนี, ไดแ้ก่ DADO และ CM-5 ค. หลายสายคาํสั "งหนึ"งสายขอ้มลู หรือ MISD (Multiple Instruction stream Single Data stream) ยงัไม่มีคอมพิวเตอรใ์ดจดัอยูใ่นกลุ่มนี, แต่อาจจะมีในอนาคต ง. หลายสายคาํสั "งหลายสายขอ้มลู หรือ MIMD (Multiple Instruction stream Multiple Data stream) เป็นคอมพิวเตอรที์"มีหลายซีพีย ู ซีพียแูต่ละตวักระทาํการกบัคาํสั "งและขอ้มลูของตวัเอง ซีพียจูะเป็นแบบเดียวกนักบัที"มีใชอ้ยูแ่ลว้ในปัจจุบนั แบ่งออกไดเ้ป็นสองพวกยอ่ย คือ พวกที"ใชห้น่วยความจาํร่วมกนั เรียกวา่ มลัติโพรเซสเซอร ์ (multiprocessor) ตวัอยา่งคอมพวิเตอรแ์บบนี, ไดแ้ก่ Sequent, Encore และ Ultracomputer และพวกที"ไม่ใชห้น่วยความจาํร่วมกนั เรียกว่า มลัติคอมพิวเตอร ์ (multicomputer) ตวัอยา่งคอมพิวเตอรแ์บบนี, ไดแ้ก่ Cosmic Cube, Paragon XP/S และคอมพิวเตอรห์ลายๆ เครื"องที"ต่อกนัเป็นเครือขา่ย

    1.4 ระบบปฏิบตักิาร คอมพิวเตอรป์ระกอบดว้ยสองส่วน ส่วนที"เป็นอุปกรณต่์างๆ เรียกว่า สว่นเครื(อง กบัส่วนที"เป็นขอ้มลูและโปรแกรม เรียกว่า สว่นชุดคาํสั (ง (software) ถา้มีเฉพาะส่วนเครื"องคอมพวิเตอรไ์ม่สามารถทาํงานได ้ตอ้งมีส่วนชุดคาํสั "งดว้ย เพื"อไปควบคุมการทาํงานของส่วนเครื"อง ระบบปฏบิติัการเป็นส่วนชุดคาํสั "งที"สาํคญั ทาํหนา้ที"ติดต่อกบัผูใ้ช ้ และจดัการกบัทรพัยากรที"คอมพวิเตอรมี์อยู ่ เช่น การจดัการหน่วยความจาํ การจดัการซีพีย ู การจดัการอปุกรณร์บัเขา้หรือส่งออก และการจดัการแฟ้มขอ้มลู เป็นตน้ ผูใ้ชไ้ม่จาํเป็นตอ้งติดต่อโดยตรงกบัอุปกรณที์"เป็นส่วนเครื"อง แต่สามารถติดต่อผ่านทางระบบปฏบิติัการ ระบบปฏบิติัการมีหลายแบบ ขึ, นอยูก่บัจาํนวนผูใ้ชแ้ละจาํนวนโปรแกรมที"ทาํ เช่น ดอส เป็นแบบผูใ้ชห้นึ"งคนและทาํทีละโปรแกรม, วินโดว ์ 3.1/95/98/NT เป็นแบบผูใ้ชห้นึ"งคนและทาํไดที้ละหลายๆ โปรแกรมพรอ้มกนั, ยนิูก เป็นแบบผูใ้ชห้ลายคนและทาํไดที้ละหลายๆ โปรแกรมพรอ้มกนั เป็นตน้ มีระบบปฏบิติัการอีกแบบหนึ"งที"ออกแบบสาํหรบัคอมพิวเตอรห์ลายๆ เครื"องที"ต่อกนัเป็นเครือขา่ย เรียกวา่ ระบบปฏิบตัิการแบบกระจาย (distributed operating system) เป็นระบบปฏบิติัการที"มองคอมพิวเตอรท์ั,งเครือขา่ยเป็นเสมือนคอมพิวเตอรเ์ครื"องเดียว ผูใ้ชไ้ม่จาํเป็นตอ้งรูว้า่โปรแกรมกาํลงัวิ"งอยูบ่นเครื"องใดในเครือขา่ย ตวัอยา่งระบบปฏบิติัการแบบนี, ไดแ้ก่ Amoeba และ Chorus เป็นตน้ อยา่งไรก็ตาม ระบบปฏบิติัการแบบกระจายที"สมบรูณแ์บบยงัไม่มี ปัจจบุนัยงัอยูใ่นขั,นตอนการวิจยั

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    11

    1.5 ระบบตวัเลข คอมพิวเตอรแ์ทนขอ้มลูในรปูระบบตวัเลขฐานสอง (binary number system) ซึ"งประกอบดว้ย 0 กบั 1 ตวัเลขหนึ"งตวัเรียกว่า หนึ"งบิต (bit ยอ่มาจาก BInary digiT) ระบบอื"น ๆ ไดแ้ก่ ระบบตวัเลขฐานสิบ (decimal number system) ซึ"งประกอบดว้ย 0 ถึง 9 ระบบตวัเลขฐานแปด (octal number system) ซึ"งประกอบดว้ย 0 ถึง 7 ระบบตวัเลขฐานสิบหก (hexadecimal number system) ซึ"งประกอบดว้ย 0 ถึง 9 และ A ถึง F การเปลี"ยนตวัเลขจากระบบหนึ"งไปยงัอีกระบบหนึ"ง หรือเรียกวา่ การเปลี"ยนฐาน ทาํได ้ดงันี,

    • การเปลี"ยนจากเลขฐานสองใหเ้ป็นเลขฐานสิบ ใชส้ตูร (bnb n-1 … b2b1b0.b-1b-2 …b-m)2=(bn2

    n+b n-1 2n-1 + … + b22

    2 + b121+b0 + b-12

    -1 +b-2 2-2 + … + b-m2

    -m)10 เช่น (101101.1011)2 = (2

    5 + 0 + 1*23 +22 + 0 + 1 + 2-1 + 0 + 2-3 + 2-4)10 = (45.6875)10 หมายเหต ุการเปลี"ยนจากเลขฐานแปดหรือสิบหกใหเ้ป็นเลขฐานสิบ ใชส้ตูรเหมือนกนั แต่เปลี"ยนจาก 2 เป็น 8 และ 16 ตามลาํดบั โดยแทน A, B, C, D, E, F ดว้ย 10, 11, 12, 13, 14, 15 ตามลาํดบั

    • การเปลี"ยนตวัเลขหน้าจุด จากเลขฐานสิบใหเ้ป็นเลขฐานสอง ใหใ้ช ้ 2 หาร ไปเรื"อย จนไดผ้ลลพัธเ์ป็น 0 ขณะที"หารใหจ้ดจาํเศษที"ได ้ นําเศษที"ไดจ้ากการหารมาเรียงตามลาํดบั เริ"มจากเศษที"ไดค้รั,งสุดทา้ยเรียงไปยงัเศษที"ไดจ้ากการหารครั,งแรก เช่น 2 ) 123

    61 เศษ 1 30 เศษ 1 15 เศษ 0 7 เศษ 1 3 เศษ 1

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    12

    1 เศษ 1 0 เศษ 1 (123)10 = (1111011)2 หมายเหต ุการเปลี"ยนตวัเลขหน้าจุด จากเลขฐานสิบใหเ้ป็นเลขฐานแปดหรือสิบหก ใชส้ตูรเหมือนกนั แต่เปลี"ยนจากการหารดว้ย 2 เป็นการหารดว้ย 8 และ 16 ตามลาํดบั โดยแทนเศษ 10, 11, 12, 13, 14, 15 ดว้ย A, B, C, D, E, F ตามลาํดบั

    • การเปลี"ยนตวัเลขหลงัจุด จากเลขฐานสิบใหเ้ป็นเลขฐานสอง ใหค้ณูตวัเลขที"อยูห่ลงัจุดทั,งหมดดว้ย 2 ไปเรื"อย ๆ จนกวา่จะไดผ้ลลพัธเ์ป็นศนูย ์หรือไดจ้าํนวนตวัเลขหลงัจุดทศนิยมตามที"ตอ้งการ แลว้นําเลขหน้าจุดที"ไดจ้ากการคณูแต่ละครั,ง มาเรียงกนั เช่น (0.6875)10 = (0. 1 0 1 1)2 .6875

    * 2

    1.3750

    .3750

    * 2

    0.7500

    .7500

    * 2

    1.5000

    .5000

    * 2

    1.0000

    .0000

    หมายเหต ุการเปลี"ยนตวัเลขหลงัจุด จากเลขฐานสิบใหเ้ป็นเลขฐานแปดหรือสิบหก ใชส้ตูรเหมือนกนั แต่เปลี"ยนจากการคณูดว้ย 2 เป็นการคณูดว้ย 8 และ 16 ตามลาํดบั โดยแทนตวัเลขที"อยูห่น้าจุดซึ"งเป็น 10, 11, 12, 13, 14, 15 ดว้ย A, B, C, D, E, F ตามลาํดบั

    1.6 การแทนขอ้มูล

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    13

    • อกัขระ แทนอกัขระ หนึ"งตวั มีสองแบบ คือ ASCII (ใช ้7 บิต แทนรหสั และ parity 1 บิตใชต้รวจสอบ) และ

    EBCDIC (ใชท้ั,ง 8 บิต แทนรหสั)

    • จาํนวนเต็ม แทนเลขจาํนวนเต็มทั,งแบบที"มีเครื"องหมาย และแบบที"ไม่มีเครื"องหมาย

    - กรณีไม่มีเครื"องหมาย ถา้ใชจ้าํนวนบิต n บิต จะแทนเลขจาํนวนเต็มไม่มีเครื"องหมายได ้ตั,งแต่ 0 ถึง

    2n-1 เช่น n = 16 จะแทนเลขจาํนวนเต็มไดต้ั,งแต่ 0 ถึง 65535 เป็นตน้ - กรณีมีเครื"องหมาย สามารถแทนไดใ้นสามรปูแบบ คือ

    • sign magnitude ใชบิ้ตซา้ยสุด (most significant bit) แทนเครื"องหมาย 0 แทน บวก และ 1 แทน ลบ บิตที"เหลือใชแ้ทนขนาดของตวัเลข

    most significant bit least significant bit n-1 n-2 … 2 1 0 sign magnitude

    เช่น สมมุติวา่ใช ้จาํนวนบิต 8 บิต แทนเลขจาํนวน +5 และ –5 ไดเ้ป็น 00000101 และ 10000101 เป็นตน้ ถา้ใชจ้าํนวน n บิต จะแทนเลขจาํนวนเต็มแบบมีเครื"องหมาย ไดต้ั,งแต่ – (2n-1 – 1) ถึง +(2n-1- 1)

    เช่น n = 16 จะแทนเลขจาํนวนเต็มมีเครื"องหมายไดต้ั,งแต่ –32767 ถึง +32767 เป็นตน้ โดยที" 0 แทนไดท้ั,ง +0 และ –0

    • one complement ใชบิ้ตซา้ยสุด (most significant bit) แทนเครื"องหมาย 0 แทน บวก และ 1 แทน ลบ เช่นกนั การแทนเลขบวก จะเหมือนกบัแบบ sign magnitude แต่การแทนตวัเลขลบ จะต่างกนั แบบ one complement จะแทนตวัเลขลบโดยการ ทาํ complement (เปลี"ยนจากเลข 0 เป็น 1 และ เปลี"ยนจากเลข 1 เป็น 0) กบั magnitude เช่น สมมุติว่าใช ้จาํนวนบิต 8 บิต แทนเลขจาํนวน +5 และ –5 ไดเ้ป็น 00000101 และ 11111010 เป็นตน้

    ถา้ใชจ้าํนวน n บิต จะแทนเลขจาํนวนเต็มแบบมีเครื"องหมาย ไดต้ั,งแต่ – (2n-1 – 1) ถึง +(2n-1- 1) เช่น n = 16 จะแทนเลขจาํนวนเต็มมีเครื"องหมายไดต้ั,งแต่ –32767 ถึง +32767 เป็นตน้ โดยที" 0 แทนไดท้ั,ง +0 และ –0

    • two complement ใชบิ้ตซา้ยสุด (most significant bit) แทนเครื"องหมาย 0 แทน บวก และ 1 แทน

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    14

    ลบ เช่นกนั การแทนเลขบวก จะเหมือนกบัแบบ sign magnitude แต่การแทนตวัเลขลบ จะต่างกนั แบบ two complement จะแทนตวัเลขลบโดยการ ทาํ complement (เปลี"ยนจากเลข 0 เป็น 1 และ เปลี"ยนจากเลข 1 เป็น 0) กบั magnitude แลว้บวกดว้ยหนึ"ง เช่น สมมุติวา่ใช ้ จาํนวนบิต 8 บิต แทนเลขจาํนวน +5 และ –5 ไดเ้ป็น 00000101 และ 11111011 เป็นตน้

    ถา้ใชจ้าํนวน n บิต จะแทนเลขจาํนวนเต็มแบบมีเครื"องหมาย ไดต้ั,งแต่ – (2n-1) ถึง +(2n-1- 1) เช่น n = 16 จะแทนเลขจาํนวนเต็มมีเครื"องหมายไดต้ั,งแต่ –32768 ถึง +32767 เป็นตน้ โดยที" 0 แทนดว้ย +0 เท่านั,น

    1.7 การแทนขอ้มูลดว้ยเลขฐานสิบหก เพื"อใหม้นุษยเ์ขา้ใจไดง่้าย และใชจ้าํนวนตวัเลขที"แทนขอ้มลูน้อยลง จึงใชต้วัเลขฐานสิบหกแทน โดยที"ตวัเลขฐานสอง 4 ตวั สามารถเขยีนแทนดว้ยตวัเลขฐานสิบหกหนึ"งตวั ดงันี, ฐานสอง ฐานสิบหก 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8

    1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F

    เช่น 0000 0011 1100 0011 ฐานสอง เท่ากบั 0 3 C 3 ฐานสิบหก เคล็ดลบั (TIPS)

  • CS344-321 Assembly Language Programming chapter 1 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    15

    เลขฐาน สอง, แปด, และ สิบหก สามารถแปลงไปมาได ้ โดยพจิารณา เลขฐานสอง 3 ตวัแทนเลขฐานแปด หนึ"งตวั และเลขฐานสอง 4 ตวัแทนเลขฐานสิบหกหนึ"งตวั เช่น

    (5AF.1E)16 = ( 0101 1010 1111 . 0001 1110 )2 = 010 110 101 111 . 000 111 100 = (2657.074 )8

    เป็นตน้

  • CS344-321 Assembly Language Programming chapter 2 page

    ______________________________________________________________________

    _

    Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul

    1

    Chapter 2

    IBM PC

    2.1 IBM PC Architecture สถาปัตยกรรมของเครื�องไอบีเอ็มพีซี แสดงดงัรปูที� 2.1 ADDRESS BUS นาฬกิา ซีพีย ู DATA BUS CONTROL BUS หน่วยความจาํหลกั หน่วยรบัเขา้/ส่งออก รปูที� 2.1 สถาปัตยกรรมของเครื�องไอบีเอ็มพีซี

    เครื�องไอบีเอ็มพีซีใชน้าฬกิาควบคุมรอบการทาํงานของซีพีย ูส่วนซีพียคูวบคุมหน่วยความจาํหลกั และหน่วยรบัเขา้/ส่งออก ผ่านทาง control bus ส่งผ่านเลขที�ทาง address bus และส่งผ่านขอ