バージョンv0.5p16
[YACASL2.git] / as / sample / count1.casl
1 COUNT1  START                    ;
2 ;       入力    ; GR1:検索する語
3 ;       処理    ; GR1 中の'1'のビットの個数を求める
4 ;       出力    ; GR0:GR1 中の'1'のビットの個数
5         PUSH    0,GR1            ;
6         PUSH    0,GR2            ;
7         SUBA    GR2,GR2          ; Count = 0
8         AND     GR1,GR1          ; 全部のビットが'0'?
9         JZE     RETURN           ; 全部のビットが'0'なら終了
10 MORE    LAD     GR2,1,GR2        ; Count = Count + 1
11         LAD     GR0,-1,GR1       ; 最下位の'1'のビット 1 個を
12         AND     GR1,GR0          ; '0'に変える
13         JNZ     MORE             ; '1'のビットが残っていれば繰返し
14 RETURN  LD      GR0,GR2          ; GR0 = Count
15         POP     GR2              ;
16         POP     GR1              ;
17         RET                      ; 呼出しプログラムへ戻る
18         END                      ;