アセンブラファイルの整理
[YACASL2.git] / as / casl2lib / outd_q15_.casl
1 ;; GR1に格納された値を、10進数の小数値として表示
2 OUTD    START
3         RPUSH
4         XOR     GR0,GR0         ; 負数フラグ。GR1が負数の場合、GR0は1
5         LAD     GR2,10          ; GR2に10進数の「10」を格納
6         XOR     GR4,GR4         ; インデックス
7         AND     GR1,GR1         ; GR1が0の場合
8         JZE     ZPRT            ; ↓
9 STDN    LD      GR0,='0'        ; 「0」をSTR領域に格納
10         ST      GR0,STR,GR4     ; ↓
11         LAD     GR4,1,GR4       ; ↓ GR4 <- GR4 + 1
12         LD      GR0,='.'        ; 「.」をSTR領域に格納
13         ST      GR0,STR,GR4     ; ↓
14         LAD     GR4,1,GR4       ; ↓ GR4 <- GR4 + 1
15 ;; GR1の内容を小数値と見なし、10進数の文字列に変換してSTRに格納
16 TODIG   AND     GR1,GR1         ; GR1が0の場合は、ループを脱出
17         JZE     PRT             ; ↓
18         CALL    MULL            ; GR1とGR2の、積をGR0、オーバーフロー値をGR3に格納
19         ADDA    GR3,='0'        ; GR0を文字に変換
20         ST      GR3,STR,GR4     ; (STR + GR4) <- GR0
21         LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
22         LD      GR1,GR0         ; GR0をGR1にコピー
23         JUMP    TODIG           ; ループ
24 ZPRT    LD      GR0,='0'        ; 「0」をSTR領域に格納
25         ST      GR0,STR,GR4     ; (STR + GR4) <- GR1
26         LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
27 PRT     ST      GR4,LEN         ; LEN <- GR4
28         OUT     STR,LEN         ; ↓
29         RPOP
30         RET
31 STR     DS      20
32 LEN     DS      1
33         END
34 ;; GR1とGR2の、積をGR0、オーバーフロー値をGR3に格納
35 MULL    START
36         PUSH    0,GR1
37         PUSH    0,GR2
38         PUSH    0,GR4
39         XOR     GR0,GR0
40         XOR     GR3,GR3         ; オーバーフロー値
41         LAD     GR4,1           ; インデックス
42 LOOP    CPA     GR4,GR2         ; GR4がGR2の値になったら、ループ脱出
43         JZE     FIN             ; ↓
44         ADDA    GR0,GR1         ; GR0 <- GR0 + GR1
45         LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
46         JOV     OVADD           ; オーバーフローした場合、OVADDへジャンプ
47         JUMP    LOOP            ; ループにジャンプ
48 OVADD   LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
49         AND     GR1,=#7FFF      ; GR1の最上位ビットをクリア
50         JUMP    LOOP            ; ループにジャンプ
51 FIN     POP     GR4
52         POP     GR2
53         POP     GR1
54         RET
55         END