---
# System prepended metadata

title: Chapter03 - Loaders and Linkers
tags: [System Software]

---


<style>
    font {
        color: red;
        font-weight: bold;
    }
</style>

## Intro

- A **loader** is a system program that performs the <font>loading</font> function
    - Many loaders also supports <font>relocation</font> and <font>linking</font>
- Some systems have a <font>linker</font> to perform the linking operations
    and a separate loader to handle reloacation and loading
- In most cases all the **program translators** (assemblers & compilers):
    - produce **object program** in <font>the same format</font> on a particular system
    - Thus one system loader or linker can be used **regardless of the original source programming language**

## Absolute Loader

- An absolute loader does <font>not</font> need to perform **linking** and program **relocation**
    - All functions are accomplished in a single pass
- When the **End record** encountered
    - the loader <font>jumps</font> to the **specified address** to **begin execution** of the loaded program

:::info
**Packing Operations**
- SIC **Object Program** is represented in **character format** (ASCII Code)
    - Easy to read, print or display
- When the program is **loaded into memory**, it is represented in **binary format**

For example:
- The object code of `LDA #512` is `010200`
    - In the object program, it is represent in character format `"010200"`, the bit string in **disk** is
        ```
        0011 0000  // '0' (ascii 48)
        0011 0001  // '1' (ascii 49)
        0011 0000
        0011 0010  // '2' (ascii 50)
        0011 0000
        0011 0000
        ```
    - In **memory**, it represented in binary format
        ```
        0000 0001 0000 0010 0000 0000
        ```
- **Packing Operations**
    - **Convert** object program **from character** format **to binary** format
        ```
        0011 0000 => 0000
        0011 0001 => 0001
        0011 0000 => 0000
        0011 0010 => 0010
        0011 0000 => 0000
        0011 0000 => 0000
        ```
:::

- For **efficiency** in terms of both **space** and execution **time**
    - most machines store object programs in a **binary form**
- We must be sure that our **file and device conventions** . . .
    - do <font>not</font> cause some of the object program bytes to be **interpreted** as **control characters**.
- Obviously object programs stored in binary form do not lend themselves well to printing or to reading by human beings.

### A Simple Bootstrap Loader

- When a computer is first **turned on** or **restarted**
    - a special type of *absolute loader*, called a <font>Bootstrap Loader</font>, is executed
- The bootstrap loader, **loads the first program to be run** by the comuter
    - usually an **Operating System**
- Because this loader is used in a **unique situation** (the **initial program** load for thesystem)
    - The **program** to be loaded can be represented in a very **simple format**
        - There is <font>no</font> **Header record**, **End record**, or **control information** (such as addresses or lengths).
    - It <font>skip</font> all other input characters that have ASCII code **less than hexadecimal 30**. (十進位 48，即 `'0'` 的 ASCII code)
        - This causes the bootstrap to <font>ignore</font> any **control bytes** (such as end-of-file) that are read.

## Machine-Dependent Loader Features

- The absolute loader is certainly simple and efficient
-  however, this scheme has several potential <font>disadvantage</font>
    1. Writing **absolute programs** makes it <font>difficult</font> to **use subroutine libraries** efficiently.
    2. To make **efficient use of memory**
        - It is important to be able to **load** object programs **into any appropriate memory space**
        - This could <font>not</font> be done effectively if all of the **subroutines** had preassigned **absolute addresses**.

### Relocation



### Program Linking


