root/as/app/count1.casl

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

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