Merge branch 'master' into cmd-casl
[YACASL2.git] / as / misc / count1.casl
1 ;;; 「アセンブラ言語の使用」に掲載されているサンプル
2 COUNT1  START
3 ;       入力    GR1:検索する語
4 ;       処理    GR1中の'1'のビットの個数を求める
5 ;       出力    GR0:GR1中の'1'のビットの個数
6         PUSH    0,GR1           ;
7         PUSH    0,GR2           ;
8         SUBA    GR2,GR2         ; Count = 0
9         AND     GR1,GR1         ; 全部のビットが'0'?
10         JZE     RETURN          ; 全部のビットが'0'なら終了
11 MORE    LAD     GR2,1,GR2       ; Count = Count + 1
12         LAD     GR0,-1,GR1      ; 最下位の'1'のビット1個を
13         AND     GR1,GR0         ;  '0'に変える
14         JNZ     MORE            ; '1'のビットが残っていれば繰返し
15 RETURN  LD      GR0,GR2         ; GR0 = Count
16         POP     GR2             ;
17         POP     GR1             ;
18         RET                     ; 呼び出しプログラムへ戻る
19         END                     ;