; 数値を表示 ; 入力: ; 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