;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