[SP]系統程式筆記2

2.1 assembler

將原始程式翻成machine code

assembler listing (LST file)

獲得相關的地址給出可辨識的列表,進行cross reference。

cross reference: 定義的label與對映的address列表出來。

linux可以透過此指令輸出assembler listing

as -aln example.s | less  

obj file

用於loader載入使用

assembler

可重定位指令: 載入起始點不同需要計算絕對地址,不過calljmpLOOP是計算距離不用relocation。

2.2 SIC Assembly

組譯器指引 assembler directives

SIC/XE與SIC差異

disp主要以pc為基準計算

PC Relative無法描述位置,則使用base reg reloaction。

2.3 80xx assembly

在翻譯code時,如disp需要以little endian表示

2.4 Assembler Algorithm

組譯器演算法

  1. 轉譯指令成機器碼
  2. 獲取symbol對映的address
  3. 解決forward reference問題
  4. 處理 pseudo instructions
  5. 產生obj與assembly listing

通用設計程序

two passes assembler

pass1

主要找出label與addr對應的位置建立SYMTABLE

  1. 判斷指令長度(透過OPTAB)
  2. 計算LOCCTR
  3. 將lable的地址保存到SYMTABLE
  4. 處理pseudo instruction

pass2

產生obj

  1. 透過SYMTAB帶入pass1沒有處理的symbol
  2. 透過OPTABLE產生機器碼
  3. 計算LOCCTR
  4. 產生pseudo定義的數據如BYTE, WORD
  5. 處理pass1未處理的pseudo

2.5 Data Structures

需求

  1. 輸入程式碼與輸出obj
  2. 輸出assembly reports 與一些message
  3. LOCCTR
  4. OPTAB
  5. SYMTAB: SIC當中的Type用來判斷是絕對地址或相對地址
  6. 其他輔助表LITTAB(literal name table)

literal為常數,但定址方式不為立即定址immediate addressing, 例如foo = bar * 35的35為literal

2.6 Machine Independent Assembler

configuration table

處理forward reference,透過連結串列紀錄有forward reference的位置,保存指令的loc到configuration table,直到對應的addr出現之後,將連結串列透過找到的地址取代。

back認為可能透過1 pass的方式處理,而原始程式forward reference的數量有限,大多數都是接受的情況,因此可以透過configuration table處理。在理論上探討,如在worst case情況下可能效果如同Two pass

1 pass是否有辦法解決

程式重定位

如何解決 relocation

  1. 加入修改紀錄,保存地址相關的變數,保存在修改紀錄檔內,讓載入器可以讀取。
  2. 採用基底暫存器,不用修改地址。
  3. 使用程式計數器,如SIC

2.7 Separate assemble and relocation

SIC obj紀錄

下面以偽代碼表示結構

nibble H, nameLen[2], name[11], programSize[4];
nibble T, codeStartAddr[4], codeSize[2], code[65];
nibble E, programeStartAddr[4];
nibble M, [4], 修訂碼, 外部參考名稱[8]
// 修訂碼 +-此變數的位置,為program relocation
// &為與此變數相對位置,因為linking無法算出offset,必須在linking才能處理
nibble R, name[71];
nibble D, varName[8], varAddr[4], repeat[59];
// varAddr通常為相對地址
// repeat: varName and varAddr

外部參考與內部參考

External reference定義在不同function,internal reference定義在相同的function,External definition在function當中定義的symbols,並且其他function有機會使用該symbols

程式重定位

program relocation與linking需要透過linker/loader處理

Assembler概念

其他基本概念


System Program