;---'1'のビットの個数を求める---CASL2の仕様書にあるプログラム例
MAIN	START
	LD 	GR1,WORD
	CALL 	COUNT1
	ST	GR0,KAZU
	RET
WORD	DC 	55555
KAZU	DS 	1		;答えの'1'のビットの数
	END
;----------------------------
COUNT1 		START		;
; 入力 GR1:検索する語
; 処理 GR1 中の'1'のビットの個数を求める
; 出力 GR0:GR1 中の'1'のビットの個数
	PUSH 	0,GR1		;
	PUSH 	0,GR2	 	;
	SUBA 	GR2,GR2 	; Count = 0
	AND 	GR1,GR1 	; 全部のビットが'0'？
	JZE 	RETURN	 	; 全部のビットが'0'なら終了
MORE 	LAD 	GR2,1,GR2	; Count = Count + 1
	LAD 	GR0,-1,GR1 	; 最下位の'1'のビット 1 個を
	AND 	GR1,GR0	 	; '0'に変える
	JNZ 	MORE 		; '1'のビットが残っていれば繰返し
RETURN LD 	GR0,GR2 	; GR0 = Count
	POP 	GR2		;
	POP 	GR1 		;
	RET			; 呼出しプログラムへ戻る
	END			;
;----------------------------------------------
