+++ /dev/null
-; 数値を表示
-; 入力:
-; GR1: 開始アドレス
-; GR2: 語数
-OUTI START
- RPUSH
- ST GR1,TMP
- LAD GR5,0 ; 語数のカウンタ
- LAD GR6,0 ; 全体の桁数
-WLOOP CPL GR5,GR2 ; GR5がGR2より大きい場合は終了
- JZE IEND
- JPL IEND
- LD GR1,TMP ; GR1をリセット
- ADDL GR1,GR5 ; GR1に(GR1+GR5)の内容をロード
- LD GR1,0,GR1
- LAD GR5,1,GR5 ; GR5をインクリメント
-ILOOP CPL GR1,TEN ; GR1が10未満の場合は次の語
- JMI WLOOP
- CALL DIV10 ; GR1を10で割り、商をGR3、剰余をGR4に格納
- LAD GR4,ZCHAR,GR4
- ST GR4,STR,GR6 ; GR4を(STR+GR6)に格納
- LAD GR6,1,GR6 ; GR6をインクリメント
- LD GR1,GR3
- JUMP ILOOP
-INEXT ADDL GR1,ZCHAR
- ST GR1,STR,GR6
- JUMP WLOOP
-IEND LAD GR6,1,GR6
- LAD GR1,ZCHAR,GR1
- ST GR1,STR,GR6
- ST GR6,LEN
- LAD GR1,STR
- LD GR2,LEN
- CALL REV
- OUT STR,LEN
- RPOP
- RET
-TEN DC 10
-ZCHAR DC '0'
-TMP DS 1
-STR DS 10
-LEN DS 1
- END
-;GR1を10で割ったときの商をGR3、剰余をGR4に格納
-DIV10 LD GR4,GR1
- LAD GR3,0
-DLOOP CPL GR4,TEN
- JMI DFIN
- SUBL GR4,TEN
- LAD GR3,1,GR3
- JUMP DLOOP
-DFIN RET
- END
-;アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
-;例: 12345 -> 54321
-REV START
- PUSH 0,GR3
- PUSH 0,GR4
- PUSH 0,GR5
- LAD GR3,1
-RPU CPL GR2,GR3
- JMI RNEXT
- LD GR4,GR1
- ADDL GR4,GR3
- LD GR4,-1,GR4
- PUSH 0,GR4
- LAD GR3,1,GR3
- JUMP RPU
-RNEXT LAD GR3,1
-RPO CPL GR2,GR3
- JMI RFIN
- POP GR4
- LD GR5,GR1
- ADDL GR5,GR3
- ST GR4,-1,GR5
- LAD GR3,1,GR3
- JUMP RPO
-RFIN POP GR5
- POP GR4
- POP GR3
- RET
- END