C=A+B
This presentation is the property of its rightful owner.
Sponsored Links
1 / 11

C=A+B PowerPoint PPT Presentation


  • 51 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


C a b

C=A+B

計算機内部での処理は?

A,B,Cに相互関係はない   3つの変数が必要

move $A, GR0

add $B, GR0

move GR0, $C

なる処理で,メモリ内のデータ領域から,変数AおよびBを読み出しながら加算し,再び演算装置内のレジスタ上にある計算結果をメモリ内の変数Cに書き込むことになる.

(注)$変数と表記することで,これらの変数がメモリ上のアドレスを有し,プログラム(の命令)から参照されていることを示す


C a b

総和の計算

次のように考えることができる

Nまでの総和に変数がN個,2Nまでの総和に変数が2N個という状況は変数がデータ領域に格納される以上,プログラムサイズが問題に応じて変化する不定形となる

とすれば,

部分和Sに関して,初期値S0を無視しても,n個のデータ領域が必要

メモリの使用効率を含めて,面白くない


C a b

固定数の変数で漸化式の表記を実現できるよう,観点を変えて考えてみる

等式(左辺と右辺が等しい)というよりも,代入式(まず右辺を計算し,それを左辺に代入する)と考えられる

まず,変数I,SおよびtempSの3つを考える.

Iの値を確定したとして,現在のSの値に対して,

tempS=S+I を計算する.その結果,tempSを次のSの値として,S=tempS なる代入式で変数Sを更新することができる


C a b

命令部での表現:

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を低減できる


C a b

変数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


C a b

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)


C a b

初期化:S=0,I=0

Flowchart

条件分岐:   if(I >10) goto L2

プログラムの実現方法は千差万別である.従って,そのスタイルを図示するフローチャートもまた,同一問題に対しても複数個存在することはなんら問題ではない

S=S+I

I=I+1

繰返し(loop)


C a b

について考える

部分和を求める方法であれば,前回と同じような考え方が可能である

一般形

今回は,n=20の場合について複数の実現法について述べる


C a b

//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)個


C a b

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までのデータが新規に追加するので,明らかに増加している.これは,扱うデータ数が変化した当然の帰結である


C a b

アドレス修飾の方法について

1)直接アドレス方式(direct addressing)

レジスタ間の演算

add GR1, GR0GR0 ← GR0 + GR1

メモリ-レジスタ間の演算

add A1, GR0GR0 ← 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, GR0GR0 ← GR0 + 1

add #100, GR0GR0 ← GR0 + 100


  • Login