1 / 22

บทที่ 5

บทที่ 5. โหลดเดอร์ (Loader). แอสเซมเบลอร์ และโหลดเดอร์. Source program ที่เป็นภาษาแอสเซมบลี้ ของผู้ใช้ จะถูกแปลงให้เป็น Object program ( หรือภาษาเครื่อง) โดยตัว แอสเซมเบลอร์ ตัวโหลดเดอร์ ก็คือโปรแกรมที่ยอมรับ Object หรือภาษาเครื่องที่ได้ แล้วจัดการเตรียมส่งให้เครื่องคอมพิวเตอร์ทำงาน. A.

jensen
Download Presentation

บทที่ 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 5 โหลดเดอร์ (Loader) Loader

  2. แอสเซมเบลอร์ และโหลดเดอร์ • Source program ที่เป็นภาษาแอสเซมบลี้ ของผู้ใช้ จะถูกแปลงให้เป็น Object program (หรือภาษาเครื่อง) โดยตัว แอสเซมเบลอร์ • ตัวโหลดเดอร์ ก็คือโปรแกรมที่ยอมรับ Object หรือภาษาเครื่องที่ได้ แล้วจัดการเตรียมส่งให้เครื่องคอมพิวเตอร์ทำงาน Loader

  3. A LOADER A B B DATABASE แสดงผังการทำงานทั่วไปของตัวโหลดเดอร์ Loader

  4. โหลดเดอร์ ทำหน้าที่ 4 อย่าง • จัดหาที่ว่างในหน่วยความจำ เพื่อจะนำโปรแกรมไปใส่ในที่ว่างนั้น (Allocation) • แก้ปัญหา การเชื่อมโยงแอดเดรสของสัญลักษณ์ต่างๆ (Symbolic references) ระหว่าง Objects (ที่มาจากแต่ละโปรแกรมย่อย) (Linking) • ปรับตำแหน่งแอดเดรสที่ไม่อิสระทั้งหมด (เช่น แอดเดรสที่เป็นค่าคงที่ แอดเดรสที่ต้องอ้างอิงตารางอื่น) ให้สัมพันธ์กับที่ว่างในหน่วยความจำ ที่ได้จัดเตรียมไว้ (Relocation) • วางภาษาเครื่อง (คำสั่ง และข้อมูล) ลงไปในหน่วยความจำ (Loading) Loader

  5. Segment • เป็นหน่วยของสารสนเทศที่ป้อนเข้าไป ซึ่งอาจจะเป็นข้อมูล หรือโปรแกรมก็ได้ (Data or Program) โดยปกติ Segment หมายถึง แหล่งข้อมูลชุดเดียว หรือ Object ชุดเดียว Loader

  6. Source Program Deck Compile-and-go Translator (e.g. assembler) Program Loaded In Memory Assembler “Compile-and-Go”Loader Loader

  7. “Compile-and-Go”Loader • คอมไพล์ หรือแอสเซมเบิลเสร็จ ก็ให้โปรแกรมทำงานเลย • ตัวแอสเซมเบลอร์จะวางภาษาเครื่องที่ได้ลงในหน่วยความจำ และตัวโหลดเดอร์ (ซึ่งประกอบด้วยเพียงคำสั่งเดียว) จะทำหน้าที่บอกแอดเดรสเริ่มต้นของโปรแกรมภาษาเครื่องในหน่วยความจำนั้น เพื่อให้เครื่องเริ่มทำงานที่แอดเดรสเริ่มต้นนั้น • ง่ายต่อการออกแบบและเขียนโปแกรม Loader

  8. ข้อเสีย • บางส่วนของหน่วยความจำต้องสูญเสียไปเพราะว่าตัวแอสเซมเบลอร์ต้องถูกใช้งานด้วย • จะต้องแปลงภาษาแอสเซมบลี้ ให้เป็นภาษาเครื่องทุกครั้ง ที่จะทำการ Run โปรแกรม • ในกรณีที่โปรแกรมมีหลาย Segments (เช่น มีหลายโปรแกรมย่อย หรือ Source program มาจากหลายภาษาที่ต่างกัน ) โหลดเดอร์วิธีนี้จะไม่สามารถทำได้ Loader

  9. Source Program Translator Object Program 1 Loader Object Programs Ready for Execution Source Program Translator Object Program 2 Loader โหลดเดอร์ที่ใช้งานโดยทั่วไป Loader

  10. โหลดเดอร์ที่ใช้งานโดยทั่วไปโหลดเดอร์ที่ใช้งานโดยทั่วไป • แทนที่เราจะเอาภาษเครื่องที่ได้ลงไปไว้ในหน่วยความจำ เราก็เอาไปเก็บไว้ในหน่วยความจำสำรองก่อน (เช่น ดิสก์ เป็นต้น) • จะทำการโหลดมาไว้ในหน่วยความจำหลัก ก็เฉพาะตอนที่เราจะทำการ Run โปรแกรม • เราสามารถโหลดโปรแกรมภาษาเครื่อง ลงแทนที่พื้นที่เดิมของตัวแอสเซมเบลอร์ได้ • ถ้าภาษาเครื่องที่ได้จากตัวแอสเซมเบลอร์ หรือตัวคอมไพเลอร์ อยู่ใน Format เดียวกัน ใช้ข้อตกลงการ Link โปรแกรมร่วมกัน ก็จะทำให้สามารถ เขียนโปรแกรมย่อย ที่มาจากภาษาที่แตกต่างกันได้ (เช่น ภาษา C หรือปาสคาล เป็นต้น) Loader

  11. โหลดเดอร์ชนิด แอบโซลุท (Absolute Loader) • ง่ายต่อการออกแบบและเขียนโปรแกรม • ภาษาเครื่องที่ได้จากตัวแอสเซมเบลอร์จะเกือบเหมือนกับวิธี Assemble-and-Go เพียงแต่ภาษาเครื่องที่ได้ จะถูกเก็บลงในดิสก์ก่อน แทนที่จะส่งไปหน่วยความจำโดยตรง • วิธีนี้จะเหลือพื้นที่ในหน่วยความจำไว้ใช้งานเยอะ เพราะตัวแอสเซมเบลอร์ ไม่จำเป็นต้องอยู่ในหน่วยความจำในช่วงของการโหลด Loader

  12. Loader

  13. MAIN 100 MAIN 248 400 SQRT 478 Absolute Loader SQRT Object decks ตัวอย่างของโหลดเดอร์ชนิด แอบโซลุท Loader

  14. ข้อเสีย • โปรแกรมเมอร์ ต้องกำหนดแอดเดรสในหน่วยความจำของโปรแกรม ให้กับตัวแอสเซมเบลอร์ ว่าโปรแกรม จะถูกโหลดลงที่แอดเดรสไหน • ถ้าโปรแกรมนั้น มีหลายโปรแกรมย่อย โปรแกรมเมอร์ต้องจำแอดเดรสของแต่ละโปรแกรมย่อย และอ้างแอดเดรสแบบแอบโซลุทให้ตรงกัน ในแต่ละโปรแกรมย่อยเหล่านั้นในช่วงของการ Link • โปรแกรมเมอร์ต้องระวังเรื่องแอดเดรส โดยต้องไม่กำหนดให้สองโปรแกรมย่อยวางทับกัน Loader

  15. หน้าที่ของตัวโหลดเดอร์ 4 อย่าง ในกรณีของโหลดเดอร์ ชนิดแอบโซลุท • Allocation -- ทำโดยโปรแกรมเมอร์ • Linking -- ทำโดยโปรแกรมเมอร์ • Relocation -- ทำโดยตัวแอสเซมเบลอร์ • Loading -- ทำโดยตัวโหลดเดอร์ Loader

  16. การ Link ระหว่างโปรแกรมย่อย (Subroutine Linkage) • ปัญหาของการ Link ระหว่างโปรแกรมย่อยก็คือ • เมื่อโปรแกรมหลัก A ต้องการเรียกโปรแกรมย่อย B • เราสามารถใช้คำสั่ง ในการกระโดดออกจาก A ไปยังโปรแกรมย่อย B ได้ (เช่นคำสั่ง BAL 14,B) • อย่างไรก็ตาม ตัวแอสเซมเบลอร์ไม่รู้ว่าตำแหน่งที่จะกระโดดไปนั้นอยู่ที่ไหน • เช่น กรณีแอดเดรสของ B ตัวแอสเซมเบลอร์จะแสดงข้อความบอกว่า เกิด ERROR ขึ้นมาเช่น ไม่มีการกำหนดสัญลักษณ์มาก่อน (Undefined symbol) • เว้นแต่ว่าเราจะมีคำสั่งพิเศษอย่างอื่นมาช่วย เช่น EXTRN และ ENTRY Loader

  17. ตัวอย่าง Loader

  18. EXTRN • คำสั่งประเภท Pseudo-op ตามด้วยสัญลักษณ์ บอกให้รู้ว่าสัญลักษณ์เหล่านั้นถูกกำหนด (หรือประกาศการใช้) ในโปรแกรมอื่น แต่ถูกเรียกใช้ในโปรแกรมนี้ Loader

  19. ENTRY • ถ้าสัญลักษณ์ถูกกำหนดในโปรแกรมนี้ และถูกเรียกใช้โดยโปรแกรมอื่นๆ • เป็นคำสั่งประเภท Pseudo-op Loader

  20. ตัวอย่าง ASSEMBLER LINKAGE PSEUDO-OPS Subroutine and Entry Naming (START and ENTRY Pseudo-ops) A START defines subroutine A. ENTRY B1,B2,B3,… defines locations B1,…,Bn As additional subroutine entry points : B1 --- B2 --- Loader

  21. โปรแกรมย่อยโดยทั่วไปจะมีลักษณะดังนี้โปรแกรมย่อยโดยทั่วไปจะมีลักษณะดังนี้ BETA START USING *,15 : : BR 14 END Loader

  22. การอ้างแอดเดรสระหว่างโปรแกรมย่อย โดยการใช้ EXTRN CALL BETA กลายเป็น EXTRN BETA : L 15, ABETA BALR 14,15 : ABETA DC A(BETA) Loader

More Related