マクロの内部処理を変更
[YACASL2.git] / as / misc / outd_q15_edit.casl
1 ;;; GR1に格納された値を、0以上1未満の、10進数小数値として表示
2 ;;; 例: 1000000000000000:0.5, 1100000000000000:0.75
3 OUTD    START
4         RPUSH
5         XOR     GR3,GR3         ; 文字位置を表すインデックス
6         XOR     GR4,GR4         ; 一時領域
7         LD      GR4,='0'        ; 「0」をSTR領域に格納
8         ST      GR4,STR,GR3     ; ↓
9         LAD     GR3,1,GR3       ; ↓ GR3 <- GR3 + 1
10         AND     GR1,GR1         ; GR1が0の場合、PRTにジャンプ
11         JZE     PRT             ; ↓
12         LD      GR4,='.'        ; 「.」をSTR領域に格納
13         ST      GR4,STR,GR3     ; ↓
14         LAD     GR3,1,GR3       ; ↓ GR4 <- GR4 + 1
15 ;; GR1の内容を小数値と見なし、10進数の文字列に変換してSTRに格納
16 TODIG   AND     GR1,GR1         ; GR1が0の場合は、ループを脱出
17         JZE     PRT             ; ↓
18         PUSH    0,GR2           ; GR1とGR2の積をGR1に格納
19         LAD     GR2,10          ; ↓GR2に10進数の「10」を格納
20         CALL    MULL            ; ↓
21         POP     GR2             ; ↓
22         LD      GR4,GR0         ; GR0をGR4にコピー
23         ADDA    GR4,='0'        ; GR4を文字に変換
24         ST      GR4,STR,GR3     ; (STR + GR3) <- GR4
25         LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
26         JUMP    TODIG           ; ループ
27 PRT     ST      GR3,LEN         ; LEN <- GR3
28         OUT     STR,LEN         ; STR領域の内容を印字
29         RPOP
30         RET
31 STR     DS      20
32 LEN     DS      1
33         END