--- /dev/null
+;;; 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