• 追加された行はこの色です。
  • 削除された行はこの色です。
  • 割り算処理 へ行く。

*目次 [#k1175a0c]

#contents


*引き算による割り算処理 [#r032f8fd]

 割り算の商と余りを引き算を利用して求めることが出来る。例えば「17÷5=商3・余り2」となるが、次のように引き算をすればよい。

17-5=12~
12-5=7~
7-5=2(これが余り)

 そして引いた回数が商となる。

**CASL兇両豺 [#t08711b3]

例:

#code(asm){{
SMP0312   START     
          LAD       GR1,0
          LD        GR3,A
          LD        GR7,B
LOOP      CPA       GR3,B
          JMI       STEP
          SUBA      GR3,GR7
          LAD       GR1,1,GR1
          JUMP      LOOP
STEP      ST        GR1,SYO
          ST        GR3,AMARI
          RET       
A         DC        17
B         DC        5
SYO       DS        1
AMARI     DS        1
          END       

}}


*高速除算 [#a81006b4]

 筆算の手順をプログラム化することで高速な割り算が可能となる。

**CASL兇両豺 [#m4981175]

例:M(A)÷M(B)を求め、ラベルとしてSYOとAMARIが存在する番地にそれぞれ割り算の結果の商と余りを格納する。

#code(asm){{
SMP0331   START     
          LD        GR1,A
          LD        GR2,B
          LD        GR3,=#0001
LOOP1     CPA       GR1,GR2
          JMI       S1
          SLL       GR3,1
          SLL       GR2,1
          JUMP      LOOP1
;
S1        LAD       GR4,0
LOOP2     CPA       GR1,GR2
          JMI       S2
          ADDA      GR4,GR3
          SUBA      GR1,GR2
S2        SRL       GR2,1
          SRL       GR3,1
          CPA       GR1,B
          JPL       LOOP2
          JZE       LOOP2
STEP      ST        GR4,SYO
          ST        GR1,AMARI
          RET       
A         DC        58
B         DC        5
SYO       DS        1
AMARI     DS        1
          END       

}}

 このプログラム上で「58÷5」を考えてみる。2進数で表記すると「111010÷101」となる。

 LOOP1とLOOP2の2つのループがある。~
 前者は商の最初に1が立つ位置が見つけるためのループである。101を左に1ビットずつシフトして、111010から引けるかどうかをチェックし、引くことができる一番大きな値を求める。実際に筆算の図を見てみればわかるが、「101」を4ビットシフトした「1010000」は「111010」から引くことができないので、ループをここで抜ける。~
 後者は右に1ビットシフトしながら引ける場合は引いて、商のその桁の位置を1とするわけである。

+「111010」から「101000」(「101」を3ビットシフトしたもの)を引けるので、商は「1000」となる。
+「10000」(これは上記で引いた結果)から「10100」(「101」を2ビットシフトしたもの)を引けないので、商は「1000」のままになる。
+「10000」から「1010」(「101」を1ビットシフトしたもの)を引けるので、商は1000+10=1010となる。
+「1000」から「101」を引けるので、商は1010+1=1011となる。


*参考文献 [#x3749395]

-『情報処理試験 CASLII 〜CASLIIの講義と実習〜 [第2版]』