X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2FYAKUWA%2Fbinout.casl;fp=as%2FYAKUWA%2Fbinout.casl;h=1d920aa5d41f8687a78a844ca1d5676235c1acda;hp=0000000000000000000000000000000000000000;hb=fb54b1c9d2fbc3d4a62c6b4d38ff68e9d3b25c26;hpb=b4e48008c95b35c692827326191698c22b06124f diff --git a/as/YAKUWA/binout.casl b/as/YAKUWA/binout.casl new file mode 100644 index 0000000..1d920aa --- /dev/null +++ b/as/YAKUWA/binout.casl @@ -0,0 +1,55 @@ +;;; BINOUT: 主プログラムから渡された1語の内容を、 +;;; ゼロ抑制を行った2進表記で出力する +;;; 八鍬幸信『基本情報処理試験 らくらく突破 CASL II』172ページ +;;; BINOUTを呼び出す +MAIN START + LAD GR2,0 +MLOOP CPA GR2,MLEN + JZE MFIN + LD GR1,MWORD,GR2 + CALL BINOUT + LAD GR2,1,GR2 + JUMP MLOOP +MFIN RET +MWORD DC #0000,#0001,#09CD,#8001 +MLEN DC 4 + END +;;; BINOUT +BINOUT START + PUSH 0,GR1 ; レジスタの退避 + PUSH 0,GR2 ; ↓ + PUSH 0,GR3 ; ↓ + PUSH 0,GR4 ; ↓ + LAD GR2,0 ; 出力ポインタの初期化 + LAD GR3,15 ; カウンタの初期化 + LD GR4,GR1 ; 全ビット = 0? + JZE OUT1 +LOOP1 JMI ONE ; 先行するビット処理 + LAD GR3,-1,GR3 ; ↓ + SLL GR1,1 ; ↓ + JUMP LOOP1 +LOOP2 JMI ONE ; 符号ビットの判定 +ZERO LAD GR0,48 ; '0'→GR0 + JUMP STORE +ONE LAD GR0,49 ; '1'→GR1 +STORE ST GR0,OBUF,GR2 + LAD GR2,1,GR2 + LAD GR3,-1,GR3 + CPA GR3,NZERO + JMI OUT2 ; 全ビット終了? + SLL GR1,1 + JUMP LOOP2 +OUT1 LAD GR0,48 + ST GR0,OBUF,GR2 + LAD GR2,1,GR2 +OUT2 ST GR2,OLNG + OUT OBUF,OLNG + POP GR4 ; レジスタの復元 + POP GR3 ; ↓ + POP GR2 ; ↓ + POP GR1 ; ↓ + RET +OBUF DS 16 +OLNG DS 1 +NZERO DC 0 + END