1 / 11

C=A+B

C=A+B. 計算機内部での処理は?. A,B,Cに相互関係はない    3つの変数 が必要. move $ A , GR0 add $ B , GR0 move GR0, $ C. なる処理で,メモリ内のデータ領域から,変数 A および B を読み出しながら加算し,再び演算装置内のレジスタ上にある計算結果をメモリ内の変数 C に書き込むことになる.. (注) $変数と表記することで,これらの変数がメモリ上のアドレスを有し,プログラム(の命令)から参照されていることを示す. 総和の計算. 次のように考えることができる.

hope-klein
Download Presentation

C=A+B

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C=A+B 計算機内部での処理は? A,B,Cに相互関係はない   3つの変数が必要 move $A, GR0 add $B, GR0 move GR0, $C なる処理で,メモリ内のデータ領域から,変数AおよびBを読み出しながら加算し,再び演算装置内のレジスタ上にある計算結果をメモリ内の変数Cに書き込むことになる. (注)$変数と表記することで,これらの変数がメモリ上のアドレスを有し,プログラム(の命令)から参照されていることを示す

  2. 総和の計算 次のように考えることができる Nまでの総和に変数がN個,2Nまでの総和に変数が2N個という状況は変数がデータ領域に格納される以上,プログラムサイズが問題に応じて変化する不定形となる とすれば, 部分和Sに関して,初期値S0を無視しても,n個のデータ領域が必要 メモリの使用効率を含めて,面白くない

  3. 固定数の変数で漸化式の表記を実現できるよう,観点を変えて考えてみる 等式(左辺と右辺が等しい)というよりも,代入式(まず右辺を計算し,それを左辺に代入する)と考えられる まず,変数I,SおよびtempSの3つを考える. Iの値を確定したとして,現在のSの値に対して, tempS=S+I を計算する.その結果,tempSを次のSの値として,S=tempS なる代入式で変数Sを更新することができる

  4. 命令部での表現: move $S, GR0 ① move $I, GR1 ② add GR1, GR0 ③ move GR0, $tempS ④ move $tempS, GR0 ⑤ move GR0, $S ⑥ ここで,④と⑤は明らかに無駄である.④⑤を省略しても,計算に支障は生じない move $S, GR0 ① move $I, GR1 ② add GR1, GR0 ③ move GR0, $S ④ 命令数で2,データ数(変数の個数)で1を低減できる

  5. 変数Iの値を更新する計算手順: I=I+1を考える(もし,代入式であると理解するのが,難しければ,tempI=I+1そしてI=tempIとしても良いが上記と同様の理由で,tempIは省略可能となるが) move $I, GR1 ① add #1, GR1 ② move GR1, $I ③ move $S, GR0 ① move $I, GR1 ② add GR1, GR0 ③ move GR0, $S ④ add #1, GR1 ⑤ move GR1, $I ⑥ S=S+I I=I+1

  6. move #0, GR0 move GR0, $S move #0, GR1 move GR1, $I L1: move $I, GR1 sub #10, GR1 jpgt L2 move $S, GR0 move $I, GR1 add GR1, GR0 move GR0, $S add #1, GR1 move GR1, $I jump L1 L2: halt S: I: 初期化:S=0,I=0 条件分岐:   if(I >10) goto L2 S=S+I I=I+1 繰返し(loop)

  7. 初期化:S=0,I=0 Flowchart 条件分岐:   if(I >10) goto L2 プログラムの実現方法は千差万別である.従って,そのスタイルを図示するフローチャートもまた,同一問題に対しても複数個存在することはなんら問題ではない S=S+I I=I+1 繰返し(loop)

  8. について考える 部分和を求める方法であれば,前回と同じような考え方が可能である 一般形 今回は,n=20の場合について複数の実現法について述べる

  9. //n=20 move #0, GR0 move GR0 , $S add $A1, GR0 add $A2, GR0 add $A3, GR0 add $A4, GR0 add $A5, GR0 add $A6, GR0 add $A7, GR0 add $A8, GR0 add $A9, GR0 add $A10, GR0 add $A11, GR0 add $A12, GR0 add $A13, GR0 add $A14, GR0 add $A15, GR0 add $A16, GR0 add $A17, GR0 add $A18, GR0 add $A19, GR0 add $A20, GR0 halt S: A1: (data) ・・・・ A20: (data) // end of program 扱う数列の数(データ数)が増加する時,命令数も増加することである.やはりここでも条件分岐と繰返しを巧み使用することで,命令数の増加を低減する(固定する)方策を検討したい(多くの場合,計算機の命令セットorレパートリを広げることになる) 命令数: (2+n+1)個 データ数: (1+n)個

  10. move #0, GR0 move GR0, $S move #0, GR1 move GR1, $I L1: move $I, GR1 sub #n, GR1 jpgt L2 move $S, GR0 move $I, GR1 add A1(GR1), GR0 move GR0, $S add #1, GR1 move GR1, $I jump L1 L2: halt S: I: A1: (data) ・・・ An: (data) // end of program add GR1, GR0 (旧) という表現が, add A1(GR1), GR0 (新) に修正されている(だけ!) 命令数: (4+3+6+1+1)個 データ数: (1+n)個 同じ数 データ部分はA1~Anまでのデータが新規に追加するので,明らかに増加している.これは,扱うデータ数が変化した当然の帰結である

  11. アドレス修飾の方法について 1)直接アドレス方式(direct addressing) レジスタ間の演算 add GR1, GR0 GR0 ← GR0 + GR1 メモリ-レジスタ間の演算 add A1, GR0 GR0 ← GR0 + ContentOfMemoryAddress( A1 ) 2)間接アドレス方式(indirect addressing) インデックス修飾方式 add A1(GR1), GR0GR0 ← GR0 + ContentOfMemoryAddress( A1+(GR1) ) その特殊ケース add 0(GR1), GR0GR0 ← GR0 + ContentOfMemoryAddress( (GR1) ) レジスタの値をアドレスとして,メモリ上のデータを読出し,加算する 3)即値(イミーディエイトヴァリュ)指定(immediate value addressing) add #1, GR0 GR0 ← GR0 + 1 add #100, GR0 GR0 ← GR0 + 100

More Related