• 検索結果がありません。

CASL II

N/A
N/A
Protected

Academic year: 2021

シェア "CASL II"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

CASL II のプログラム例 ( その 4)

山本昌志

2005

1

14

1 復習と本日の内容

1.1

復習

これまで、教科書の第

5

章の「CASL IIプログラム例」で学習した内容は、以下の通りである。冬休み 前にこれだけのことを学習したことを思い出して欲しい。

算術演算・論理演算 算術演算はただの加算と減算、論理演算はビット毎の論理和と積と排他的論理和 条件分岐 比較とジャンプ命令により、実行する文を選択する

マスク処理 特定のビットの内容を調べる

アドレス修飾 ラベルとインデックスレジスタでアクセスするメモリーのアドレスを決める シフト 演算 上手に使えば 、かけ算やわり算ができる

1.2

本日の内容

高級言語のプログラムは、

順次 プログラムの命令は上から下へ実行される。

選択 制御式により実行される分が選択される。これは、FORTRAN

C

言語の

if

文のことである。

繰り返し ループあるいは反復とも呼ばれ 、同じ命令を繰り返す。FORTRANでは

DO

文、C言語では

for

文などである。

の基本構造からなる。順次についてはいままで、気が付かないで使っていたもので、なにも考えることはな い。選択に関しては、例題

[3]

で示した条件分岐

(比較+ジャンプ)

である。本日の例題

[4]

では、繰り返し 文を学習する。

長いプログラムを、この基本構造だけでは作成することは不可能である。技術的には可能であるが、何が 書いてあるか全く分からないプログラムになってしまい。メンテナンスが不可能である。そのため、プログ

国立秋田工業高等専門学校  電気工学科

(2)

ラムを機能毎に細かく分割して、分かりやすくする方法がとられる。この機能毎に分割されたプログラム をサブルーチンという。FORTRANでは 、SUBROUTINEとか

FUNCTION

というものがそれに当たる。本日

2

番目のテーマは、このサブルーチンを

CASL II

で実装する方法をである。

2 [ 例題 6] 繰り返し処理

教科書の

List5-6

のプログラムを例にして、繰り返し処理

(ループ )

について説明する。

2.1

教科書の例

教科書のプログラムは、

ラベル

DATA

から、ラベル

KOSUU

が示す語数の整数のデータが格納されている。

このデータの最大値を探し出し 、それをラベル

MAX

が示す領域に格納する。

という問題を解く、プログラムである。このプログラムは、教科書の

p.98

List5-6

に示されている。まず 最初に、

このプログラムの命令とデータの領域の区別

を考える。これは、さんざんやったので理解できているものとする。

このプログラムの核となる部分は、最大値を探すアルゴ リズムである。教科書の例では、それは、次のよ うなアルゴ リズムとなっている。

1.

最初に読み込むデータ

(アドレス [data])

を暫定最大値とする。

2.

それ以降は繰り返し処理。

(a)

次のデータと最大値を比較する

(b)

個数分のデータの比較が済んでいなければ 、2a(次データ処理)に戻る

である。最大値を探すアルゴ リズムには、次々にデータを最大値と比較する処理が必要である。ここに繰り 返し処理が使われる。

2.2

繰り返し 処理

高級言語では繰り返し専用の命令が用意されているが、アセンブラ言語にはない。そのため、条件分岐を 使い繰り返しを行うことにする。アセンブラ言語では、以前学習したように、条件分岐は比較命令

(CPA,CPL)

(3)

めの機構も必要である。パラメーターの値に従いループを続けるか、そこから抜けるかを決める。それは、

分岐

(比較とジャンプ命令)

で実現できる。

今回の問題であれば 、データの個数分だけ繰り返せばよい。そのために、カウンターを用いて、データ数 のカウントをしている。これはまた、指標レジスターにも使える。

!#" $%

!#" $%

1:

分岐命令を使った繰り返し構造

2.3

プログラムの構造とフローチャート

このプログラムのフローチャートを図

2

に示す。ループ構造になっているのが分かるだろう。それについ ての説明の前に、データを取り扱うレジスターやラベルの内容を表

1

に示しておく。

1:

汎用レジスターとメモリの内容

GR0

読み込んだデータ

(比較すべき対象)

を入れる。

GR1

データ数から

1

引いた値。指標レジスタの最大値。

GR2

データのカウンタ。0から始まり、指標レジスタとしてつかう。

DATA

調べるデータの先頭アドレス。

KOSUU

調べるデータ数が書かれているアドレス。

MAX

調べたデータの最大値を入れるアドレス。

(4)

! "

#

! "

#$

% ! & '

( !

"

)

start

*,+-/.10

start

243

56/798;:/<

5=/>?@BA@9:/<

5C;<9D;E98;:9<

F4GIH4J4K4L

MINPO

5QB@9AR/S;T9S

5U9V

5W/X

e n d

*,+YB.[Z\,]^^

*,+YB.[*+Y_Y

e n d

*+0;.1`aba

c,d,e

A@/6/79f

QB@BAg/hBR/S;T9S

i9jlkm n

AD;E9:/<

*+0;o1p,aq

D;6/h/Q @9ArC;<BD

E98ls,t9u D;6/h/Q @9AR/S;T9S

*,+-/.[*+-vY

c,d,e

A@9h/w ex,y

?

eBz

Q @BA{/|

*,+0 .4}`abav *,+-~€

h/Q @9Ag/h9R/S;T

S

4‚

*,+09ƒ „Bpaq

R/S;T9…B†BQ @9A‡D

E98;h/UBV

ˆ ‰Š‹ Œ9/Ž;

ˆ ‘’“

‘‰”•– —˜™š › œ

*+0;o1p,aq

•–—

rD;EB8ls

4‚

*,+Y,ƒ „B*+-

ˆ‰Š—žŸ ¡ ‰Š—

c,d,e

A@/‡D;E i9jlk

m n

Ah/UBV

Œ9/Ž;£¢¤¤

’“

‘‰” c,d,e

A ˜ D/E

i9j

œ

¥

Ÿ ¥

Ÿ

2:

教科書の

List5-6

のプログラムの構造とフローチャート

(5)

3 [ 例題 7] 繰り返し処理とサブルーチン

3.1

教科書の例

教科書の

[例題 6]

のプログラムの動作内容は、

[例題 5]

と全く同じである。ただし 、最大値を探索する部 分をサブルーチンにして、プログラムの内容を分かりやすくしている。

3.2

サブルーチン

プログラムは、分かりやすく書かなくてはならない。分かりにくいプログラムはメンテナンスが大変であ る。ここでは、最大値を探す機能をサブルーチンとして分割している。

実際、サブルーチンを作成するとにもっとも気にかけることは、データの受け渡しである1。メインルー チンからサブルーチンに、ある処理を依頼するのであるが 、そのためにはデータが必要である。メイン

サブ、メイン

サブと

2

通りある。高級言語ではいろいろな方法があるが 、

CASL II

では汎用レジスター を使うのが一般的である。

例題のプログラムを例にすると、

メインルーチンがサブルーチンに依頼している仕事の内容は、データの最大値を探すことである。

そのために、メインルーチンはサブルーチンに、GR1を用いて、データの個数を渡している。

3.3

プログラムの構造とフローチャート

データを取り扱うレジスターやラベルの内容を表

1

と同じである。また、プログラムのフローチャート を図

3

に示す。。

4 練習問題

4.1

問題

4.1.1

繰り返しとサブルーチン

問題

(1) 1〜1000

までの加算するプログラムの作成

1〜1000

までの加算は、サブルーチンで実行すること。そして、繰り返し構造を用いた加算であ

ること。

加算結果は、メモリーの適当な場所に核のすること。

1受け渡しのデータのことを引数と言う。呼び出し側が渡すデータを実引数、呼び出された側が受け取るデータを仮引数と言う

(6)

!

" ###%$&'()&*+,-.####

/.0

#

0

120

3

1 !

401

1 1 !

4151

6

start

7/89;:=<

start

>@?BABCED

FGIH;J;K

FLIM3NIOIP/Q/R;S

T;U

>@?BA@C@D@V

WBXZY

F[\OI]^;_a`I_

FbIc

Fd;e

e n d

7/8f\:g78fhf

e n d

78<a:=ijkj

l/m

Q]O;n;oIp [\O\]H;q\^;_a`I_

rIsutv3w

]xayIJ;K

78<az={/j|

xan;q;[3OI]}~aK\x

yIu€/I‚

xan;q;[3OI]^;_a`I_

7/89;:g789ƒf l/m

Q]OIq;„Q…/† ‡

Q\ˆ

7/8< :@‰ijkjƒ 7/89ŠŒ‹

q;[3OI]H;qI^;_a`

_

@Ž

7/8<I \{j|

^;_a`I‘\’\[3OI]“x

yIaq;b\c

” •–— ˜I™;ša›

” œžŸ

• ¡¢ £¤¥¦ § ¨

78<az={/j| ¡¢£

}xay\u€

@Ž

7/8f/ \789

”•–£©ª«¬©­ •–£

l/m

Q]O;“xay rIsut

v3w

]q;b\c

˜I™;ša›¯®°°

žŸ

•  l/m

Q]

¤

x;y rIs

¨

±

« ±

«

e n d

²@³

Fn;oIaJ;K

F´;µ‡O\]OIJ;K

F~aKIxayIaJIK

start

7/89;:=<

start

¶j· ·a¸j¹ij¹

start

LIM3NIO\P3Q}ºOIN

3:

教科書の

List5-7

のプログラムの構造とフローチャート

参照

関連したドキュメント

DTPAの場合,投与後最初の数分間は,糸球体濾  

前章 / 節からの流れで、計算可能な関数のもつ性質を抽象的に捉えることから始めよう。話を 単純にするために、以下では次のような型のプログラム を考える。 は部分関数 (

○ 4番 垰田英伸議員 分かりました。.

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

口腔の持つ,種々の働き ( 機能)が障害された場 合,これらの働きがより健全に機能するよう手当

点から見たときに、 債務者に、 複数債権者の有する債権額を考慮することなく弁済することを可能にしているものとしては、

自閉症の人達は、「~かもしれ ない 」という予測を立てて行動 することが難しく、これから起 こる事も予測出来ず 不安で混乱

(自分で感じられ得る[もの])という用例は注目に値する(脚注 24 ).接頭辞の sam は「正しい」と