ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
บทที่ 5 โหลดเดอร์ (Loader) Loader
2
แอสเซมเบลอร์ และโหลดเดอร์
Source program ที่เป็นภาษาแอสเซมบลี้ ของผู้ใช้ จะถูกแปลงให้เป็น Object program (หรือภาษาเครื่อง) โดยตัว แอสเซมเบลอร์ ตัวโหลดเดอร์ ก็คือโปรแกรมที่ยอมรับ Object หรือภาษาเครื่องที่ได้ แล้วจัดการเตรียมส่งให้เครื่องคอมพิวเตอร์ทำงาน Loader
3
แสดงผังการทำงานทั่วไปของตัวโหลดเดอร์
A B LOADER DATABASE Loader
4
โหลดเดอร์ ทำหน้าที่ 4 อย่าง
จัดหาที่ว่างในหน่วยความจำ เพื่อจะนำโปรแกรมไปใส่ในที่ว่างนั้น (Allocation) แก้ปัญหา การเชื่อมโยงแอดเดรสของสัญลักษณ์ต่างๆ (Symbolic references) ระหว่าง Objects (ที่มาจากแต่ละโปรแกรมย่อย) (Linking) ปรับตำแหน่งแอดเดรสที่ไม่อิสระทั้งหมด (เช่น แอดเดรสที่เป็นค่าคงที่ แอดเดรสที่ต้องอ้างอิงตารางอื่น) ให้สัมพันธ์กับที่ว่างในหน่วยความจำ ที่ได้จัดเตรียมไว้ (Relocation) วางภาษาเครื่อง (คำสั่ง และข้อมูล) ลงไปในหน่วยความจำ (Loading) Loader
5
Segment เป็นหน่วยของสารสนเทศที่ป้อนเข้าไป ซึ่งอาจจะเป็นข้อมูล หรือโปรแกรมก็ได้ (Data or Program) โดยปกติ Segment หมายถึง แหล่งข้อมูลชุดเดียว หรือ Object ชุดเดียว Loader
6
“Compile-and-Go” Loader
Source Program Deck Compile-and-go Translator (e.g. assembler) Loaded In Memory Assembler Loader
7
“Compile-and-Go” Loader
คอมไพล์ หรือแอสเซมเบิลเสร็จ ก็ให้โปรแกรมทำงานเลย ตัวแอสเซมเบลอร์จะวางภาษาเครื่องที่ได้ลงในหน่วยความจำ และตัวโหลดเดอร์ (ซึ่งประกอบด้วยเพียงคำสั่งเดียว) จะทำหน้าที่บอกแอดเดรสเริ่มต้นของโปรแกรมภาษาเครื่องในหน่วยความจำนั้น เพื่อให้เครื่องเริ่มทำงานที่แอดเดรสเริ่มต้นนั้น ง่ายต่อการออกแบบและเขียนโปแกรม Loader
8
ข้อเสีย บางส่วนของหน่วยความจำต้องสูญเสียไปเพราะว่าตัวแอสเซมเบลอร์ต้องถูกใช้งานด้วย จะต้องแปลงภาษาแอสเซมบลี้ ให้เป็นภาษาเครื่องทุกครั้ง ที่จะทำการ Run โปรแกรม ในกรณีที่โปรแกรมมีหลาย Segments (เช่น มีหลายโปรแกรมย่อย หรือ Source program มาจากหลายภาษาที่ต่างกัน ) โหลดเดอร์วิธีนี้จะไม่สามารถทำได้ Loader
9
โหลดเดอร์ที่ใช้งานโดยทั่วไป
Source Program Translator Object Programs Ready for Execution Loader Program 1 Program 2 Loader
10
โหลดเดอร์ที่ใช้งานโดยทั่วไป
แทนที่เราจะเอาภาษเครื่องที่ได้ลงไปไว้ในหน่วยความจำ เราก็เอาไปเก็บไว้ในหน่วยความจำสำรองก่อน (เช่น ดิสก์ เป็นต้น) จะทำการโหลดมาไว้ในหน่วยความจำหลัก ก็เฉพาะตอนที่เราจะทำการ Run โปรแกรม เราสามารถโหลดโปรแกรมภาษาเครื่อง ลงแทนที่พื้นที่เดิมของตัวแอสเซมเบลอร์ได้ ถ้าภาษาเครื่องที่ได้จากตัวแอสเซมเบลอร์ หรือตัวคอมไพเลอร์ อยู่ใน Format เดียวกัน ใช้ข้อตกลงการ Link โปรแกรมร่วมกัน ก็จะทำให้สามารถ เขียนโปรแกรมย่อย ที่มาจากภาษาที่แตกต่างกันได้ (เช่น ภาษา C หรือปาสคาล เป็นต้น) Loader
11
โหลดเดอร์ชนิด แอบโซลุท (Absolute Loader)
ง่ายต่อการออกแบบและเขียนโปรแกรม ภาษาเครื่องที่ได้จากตัวแอสเซมเบลอร์จะเกือบเหมือนกับวิธี Assemble-and-Go เพียงแต่ภาษาเครื่องที่ได้ จะถูกเก็บลงในดิสก์ก่อน แทนที่จะส่งไปหน่วยความจำโดยตรง วิธีนี้จะเหลือพื้นที่ในหน่วยความจำไว้ใช้งานเยอะ เพราะตัวแอสเซมเบลอร์ ไม่จำเป็นต้องอยู่ในหน่วยความจำในช่วงของการโหลด Loader
12
FROM ABSOLUTE ASSEMBLER Location Instruction 100 BALR 12,0 102 : : :
MAIN program MAIN START 100 BALR 12,0 USING MAIN+2,12 : L 15,ASQRT call BALR 14, SQRT ASQRT DC F’400’ address OF SQRT END SQRT subroutine SQRT START 400 USING *,15 : compute square root BR 14 OBJECT DECK OUTPUT FROM ABSOLUTE ASSEMBLER Location Instruction 100 BALR 12,0 102 : : : 120 L 15,142(0,12) 124 BALR 14,15 126 : 244 F’400’ 248 400 476 BCR 15,14 Loader
13
ตัวอย่างของโหลดเดอร์ชนิด แอบโซลุท
MAIN SQRT Object decks Absolute Loader 100 248 400 478 Loader
14
ข้อเสีย โปรแกรมเมอร์ ต้องกำหนดแอดเดรสในหน่วยความจำของโปรแกรม ให้กับตัวแอสเซมเบลอร์ ว่าโปรแกรม จะถูกโหลดลงที่แอดเดรสไหน ถ้าโปรแกรมนั้น มีหลายโปรแกรมย่อย โปรแกรมเมอร์ต้องจำแอดเดรสของแต่ละโปรแกรมย่อย และอ้างแอดเดรสแบบแอบโซลุทให้ตรงกัน ในแต่ละโปรแกรมย่อยเหล่านั้นในช่วงของการ Link โปรแกรมเมอร์ต้องระวังเรื่องแอดเดรส โดยต้องไม่กำหนดให้สองโปรแกรมย่อยวางทับกัน Loader
15
หน้าที่ของตัวโหลดเดอร์ 4 อย่าง ในกรณีของโหลดเดอร์ ชนิดแอบโซลุท
หน้าที่ของตัวโหลดเดอร์ 4 อย่าง ในกรณีของโหลดเดอร์ ชนิดแอบโซลุท Allocation -- ทำโดยโปรแกรมเมอร์ Linking -- ทำโดยโปรแกรมเมอร์ Relocation -- ทำโดยตัวแอสเซมเบลอร์ Loading -- ทำโดยตัวโหลดเดอร์ Loader
16
การ Link ระหว่างโปรแกรมย่อย (Subroutine Linkage)
เมื่อโปรแกรมหลัก A ต้องการเรียกโปรแกรมย่อย B เราสามารถใช้คำสั่ง ในการกระโดดออกจาก A ไปยังโปรแกรมย่อย B ได้ (เช่นคำสั่ง BAL 14,B) Branch and link อย่างไรก็ตาม ตัวแอสเซมเบลอร์ไม่รู้ว่าตำแหน่งที่จะกระโดดไปนั้นอยู่ที่ไหน เช่น กรณีแอดเดรสของ B ตัวแอสเซมเบลอร์จะแสดงข้อความบอกว่า เกิด ERROR ขึ้นมาเช่น ไม่มีการกำหนดสัญลักษณ์มาก่อน (Undefined symbol) เว้นแต่ว่าเราจะมีคำสั่งพิเศษอย่างอื่นมาช่วย เช่น EXTRN และ ENTRY Loader
17
ตัวอย่าง MAIN START --- L 15,=A(B) call B BALR 14,15 : END EXTRN B
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 EXTRN C : 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
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.