MAIN START BEGIN LD GR1,A SUBA GR1,B CALL ITOA RET A DC 0 B DC #7FFF C DS 1 END ITOA START PUSH 0,GR2 PUSH 0,GR3 PUSH 0,GR4 LAD GR0,0 LAD GR2,0 AND GR1,GR1 JPL LOOP JZE LOOP LAD GR0,1 CALL MINUS LOOP CPA GR1,=10 JMI NEXT CALL DIV ADDA GR4,='0' ST GR4,STR,GR2 LAD GR2,1,GR2 LD GR1,GR3 JUMP LOOP NEXT ADDA GR1,='0' ST GR1,STR,GR2 LAD GR2,1,GR2 CPA GR0,=1 JPL PRT JMI PRT LD GR1,='-' 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 STR DS 6 LEN DS 1 END ;GR1を10で割ったときの商をGR3、剰余をGR4に格納 DIV LD GR4,GR1 LAD GR3,0 DLOOP CPA GR4,=10 JMI DFIN SUBL GR4,=10 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 MINUS START XOR GR1,=#FFFF LAD GR1,1,GR1 RET END