root/as/sample/count1.casl

/* [<][>][^][v][top][bottom][index][help] */
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                      ;

/* [<][>][^][v][top][bottom][index][help] */