root/as/misc/outd_q15_edit.casl

/* [<][>][^][v][top][bottom][index][help] */
   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

/* [<][>][^][v][top][bottom][index][help] */