---
tags: 大二, 筆記
---
# System Software
## SIC
+ 假想電腦
+ 有 XE 版本,為進階版
+ SIC/XE 可相容 SIC 的指令 (upward compatible)
### Memory
+ 1 byte = 8 bit
+ 1 word = __3 bytes__
+ Total $2^{15}$ bytes
+ byte addressable
### Registers
+ | Mnemonic | Number | Special use |
| -------- | ------ | ---------------- |
| A | 0 | Accumulator |
| X | 1 | Index register |
| L | 2 | Linkage register |
| PC | 8 | Program counter |
| SW | 9 | Status word |
### Data Formats
+ Integers : 24 bit
+ Characters : 8 bit ASCII codes
+ No floating-point
### Instruction Formats
```
8 1 15
+-----------+-----+--------------------------+
| opcode | X | address |
+-----------+-----+--------------------------+
```
### Address mode
+ | Mode | Indication | TA |
| ------- | ---------- | -------------- |
| Direct | x=0 | = address |
| Indexed | x=1 | = address+ (X) |
## SIC/XE
### Memory
+ can address 1MB ($2^{20}$ bytes)
### Registers
+ | Mnemonic | Number | Special use |
| -------- | ------ | ---------------- |
| A | 0 | Accumulator |
| X | 1 | Index register |
| L | 2 | Linkage register |
| PC | 8 | Program counter |
| SW | 9 | Status word |
| B | 3 | Base |
| S | 4 | General working |
| T | 5 | General working |
| F | 6 | Floating-point |
### Data Formats
+ 有小數可以用了!
```
1 11 36
+---+----------------+---------------------+
| s | exp | frac |
+---+----------------+---------------------+
```
+ Value = $(-1)^s0.f*2^{(exp-1024)}$
### Instruction Formats
+ Format 1 : 1 byte
+ ```
8
+--------------+
| opcode |
+--------------+
```
+ Format 2 : 2 bytes
+ ```
8 4 4
+--------------+---------+---------+
| opcode | r1 | r2 |
+--------------+---------+---------+
```
+ Format 3 : 3 bytes
+ ```
6 1 1 1 1 1 1 12
+-------------------------------------+
| op |n|i|x|b|p|e| disp/address |
+-------------------------------------+
e = 0
```
+ Format 4 : 4 bytes
+ ```
6 1 1 1 1 1 1 20
+------------------------------------------+
| op |n|i|x|b|p|e| address |
+------------------------------------------+
e = 1
```
+ 定址模式
+ PC relative : b=0, p=1
+ 會先檢查這個
+ Base relative : b=1, p=0
+ 再檢查這個
+ Direct : b=0, p=0
+ (+)op c
+ (+)op m
+ c是常數
+ Indexed : n=1, i=1, x=1
+ (+)op m, X
+ Immediate : n=0, i=1, x=0
+ (+)op #c
+ c是常數
+ (+)op #m
+ __要檢查 PC-relative 和 Base-relative__
+ Indirect : n=1, i=0, x=0
+ (+)op @m
+ (+)op @c
+ Simple : n=0, i=0 or n=1,i=1
+ n=0, i=0 : 相容 SIC 用的 , op m
+ (+)op m
+ (+)op c
## Assembler
### 重要功能
+ location counter
+ Write object program
+ 2 pass
### object program
+ Header record :
+ H
+ Program name
+ Starting address
+ Length of object program in bytes
+ Text record
+ T
+ Starting address
+ Length in bytes
+ Object code
+ End record
+ E
+ Address of first executable instruction
### Algorithm and data structures
+ Two-pass assembler
+ OPTAB
+ SYMTAB
+ | Label | Addr |
| ------ | ---- |
| FIRST | 1000 |
| CLOOP | 1003 |
| ENDFIL | 1015 |
| ... | ... |
+ LOCCTR
+ Intermedia file
+ 在pass 1 與 pass 2 之間的溝通檔案
+ 放有 address, error indicators 等資料
### Psudeo code
> 見課本
## SIC/XE Assembler
+ 更多定址模式 & instruction formats
+ Program Relocation
+ START 0
+ SIC/XE 指令對應
+ | | |
| ------------------------- | -------- |
| Immediate | `op #c` |
| Indirect | `op @m` |
| PC-relative/Base-relative | `op m` |
| Extended format | `+op m` |
| Indexed | `op m,x` |
+ Register-to-register instructions
+ Keep the register name and value in __SYMTAB__
+ Large memory
+ multiprogamming and program reallocation
### Address translation
+ PC-relative : -2048 ~ 2047
+ Base-relative : 0 ~ 4095
+ Assembler 會先試 PC-relative, 失敗才試 Base-relative
+ 如果還不夠用就用 format 4,有20 bit
+ ex 1 :
+ ```assembly
;10 1000
FIRST STL RETADR ;17202D
;RETADR = 30h; STL = 14h
```
+ disp = RETADR - (PC) = 30 - 3 = 2Dh
+ opcode = 00010100b
+ nixbpe = 110010
+ ```
opcode nixbpe disp
+---------------------------------+
| 000101 |110010| (02D)h |
+---------------------------------+
(17202D)h
```
+ ex 2 :
+ ```assembly
;40 0017
J CLOOP ;3F2FEC
;CLOOP = 6; J = 3Ch
```
+ disp = 6 - 1A = -14 = -(0000 0001 0100)b = (1111 1110 1100)b = (FEC)b
+ opcode = 00111100
+ nixbpe = 110010
+ ```
opcode nixbpe disp
+---------------------------------+
| 001111 |110010| (FEC)h |
+---------------------------------+
(3F2FEC)h
```
+ ex 3 :
+ ```assembly
;160 104E
STCH BUFFER,X ;57C003
;(B) = 0033; opcode = 54; BUFFER = 0036
```
+ disp = 0036 - 104E(PC) = -1018 <- 超過了
+ disp = 0036 - 0033(B) = 3
+ __不用處理 X __
+ nixbpe = 111100
+ ```
opcode nixbpe disp
+---------------------------------+
| 010101 |111100| (003)h |
+---------------------------------+
(57C003)h
```
+ ex 4 :
+ ```assembly
;12 0003
LDA #LENGTH ;69202D
;opcode = 68; LENGTH = 0033
```
+ __有變數操作,要用relative__
+ disp = 0033 - 0006 = 02D
+ nixbpe = 010010
+ ```
opcode nixbpe disp
+---------------------------------+
| 011010 |010010| (02D)h |
+---------------------------------+
(69202D)h
```
+ ex 5 :
+ ```assembly
;70 002A
J @RETADR ;3E2003
;opcode = 3C
```
### Program relocation
+ HOW TO :
+ `COPY START 0`
+ In SIC/XE :
+ Format 1 2 3
+ Not affect
+ Format 4
+ 要改
+ In SIC :
+ Format 3 with address field
+ 要改
+ 要怎麼改?
+ Modification record
+ M
+ Starting loc of addr to be modified
+ length to be modified, in half-bytes
+ e.g. :
+ `M 000007 05`
+ 真實況下沒有空白
+ 雖然打7,但實際上是7.5
### Symbol-defining
#### Label v.s. Symbols
+ label : 連結 addr
+ symbols : 似 C 裡的 `#define` ,可以定義很多東西
#### Usage
+ `symbol EQU value`
#### How it works?
1. pass 1
+ 遇到直接先寫入 SYMTAB
2. pass 2
+ 把值讀回來
### Program blocks
> 把變數宣告和程式碼本身分開,讓 assembler 自行排列,可避免存取過遠的位置及增加讀取效率
+ 預設為 default block
+ `USE CBLCK`
+ 每個 block 都有自己的 LOCCTR
+ Pass 1 :
+ 針對每個 block 計算相對於其開頭的 address
+ Pass2 :
+ 計算 object code
+ 對於 abslute symbol (非相對),沒有 block number
+ e.g :
+ `107 1000 MAXLEN EQU BUFEND-BUFFER`
+ ex :
+ ```assembly
;20 0006 0
LDA LENGTH ;032060
;~~~~
;100 0003 1
LENGTH RESB 4096
```
+ LENGTH = (block 1 start)+0003 = 0066+0003=0069
+ LOCCTR = (block 0 start)+0009 = 0009
+ PC-relative : disp = 0069 - 0009 = 0060
+ Object code 沒有被動到
+ `USE` 的時候 Text record 會開新的一行(個)
### Control section
+ 相當於 Java 裡的 import 及 JavaScripts 的 export
+ external reference === import
+ `CSECT` tag 可供全域跳躍
+ 一定要用 format 4
+ Define record :
+ D
+ Name1 relative address1
+ Name2 relative address2 ...
+ Refer record
+ R
+ Name1 Name2 ...
+ Modification record
+ M
+ start address
+ length to modify
+ +/-
+ external symbol