-;GR1に格納された数値を表示
-ITOA START
- PUSH 0,GR2
- PUSH 0,GR3
- PUSH 0,GR4
- LAD GR0,0
- LAD GR2,0
- AND GR1,GR1
- JPL ILOOP
- JZE ILOOP
- LAD GR0,1
- CALL INV
-ILOOP CPA GR1,TEN
- JMI INEXT
- CALL DIV
- ADDA GR4,ZCHAR
- ST GR4,STR,GR2
- LAD GR2,1,GR2
- LD GR1,GR3
- JUMP ILOOP
-INEXT ADDA GR1,ZCHAR
- ST GR1,STR,GR2
- LAD GR2,1,GR2
- CPA GR0,=1
- JPL PRT
- JMI PRT
- LD GR1,MINUS
- ST GR1,STR,GR2
- LAD GR2,1,GR2
-PRT ST GR2,LEN
- LAD GR1,STR
- LD GR2,LEN
- CALL REV
- OUT STR,LEN
- POP GR4
- POP GR3
- POP GR2
- RET
-TEN DC 10
-ZCHAR DC '0'
-MINUS DC '-'
-STR DS 6
-LEN DS 1
- END
-;GR1を10で割ったときの商をGR3、剰余をGR4に格納
-DIV LD GR4,GR1
- LAD GR3,0
-DLOOP CPA 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 CPA GR2,GR3
- JMI RNEXT
- LD GR4,GR1
- ADDA GR4,GR3
- LD GR4,-1,GR4
- PUSH 0,GR4
- LAD GR3,1,GR3
- JUMP RPU
-RNEXT LAD GR3,1
-RPO CPA GR2,GR3
- JMI RFIN
- POP GR4
- LD GR5,GR1
- ADDA GR5,GR3
- ST GR4,-1,GR5
- LAD GR3,1,GR3
- JUMP RPO
-RFIN POP GR5
- POP GR4
- POP GR3
- RET
- END
-;GR1の内容をマイナス値にする
-;例: 10 -> -10, -20 -> 20
-INV START
- XOR GR1,=#FFFF
- LAD GR1,1,GR1
- RET
- END