
次のプログラムに、
指定された整数値配列の中から最大値を調べるサブルーチンMAXを作成する、
指定された整数値配列の中から最小値を調べるサブルーチンMAXを作成する、
指定された整数値配列を昇順にソートするサブルーチンSORTを作成する、
指定された整数値配列の平均値(整数値)を調べるサブルーチンAVEを作成する、
これらについて教えてください。
PGM START
LAD GR1, DATA
LD GR2, =10
CALL SUM
ST GR0, RESULT
RET
DATA DC 1,9,3,7,5,10,2,8,4,6
RESULT DS 1
END
SUM START
PUSH 0, GR1
PUSH 0, GR7
LD GR0, =0
LD GR7, =0
MAIN CPA GR7, GR2
JZE QUIT
ADDA GR0, 0, GR1
LAD GR1, 1, GR1
LAD GR7, 1, GR7
JUMP MAIN
QUIT POP GR7
POP GR1
RET
END
GR1はデータの先頭番地、SUMをコールするとGR1が1ずつ加算されてデータが参照できる。
GR2はデータの個数、ラベルMAINで個数を比較している。
などのことはわかるのですが、
プログラムを作るとなるとまったくわかりません。
どなたか教えていただけませんか??
お願いします!!
No.1ベストアンサー
- 回答日時:
回答がないので調べてみました。
アセンブルは下記を使用しました。バグがあるようなのと知らないのであまり自信がありません。http://www.chiba-fjb.ac.jp/fjb_labo/casl/index.h …
PGM START
LAD GR1, DATA
LD GR2, =10
CALL SUM
ST GR0, RESULT
CALL AVE
ST GR7,WK2
CALL MAX
ST GR0,WK3
DUMP RESULT,3 ;システムコール、結果の確認
RET
DATA DC 1,9,3,7,5,10,2,8,4,6
RESULT DS 1
WK2 DS 1
WK3 DS 1
SUM
PUSH 0, GR1
PUSH 0, GR7
LD GR0, =0
LD GR7, =0
MAIN CPA GR7, GR2
JZE QUIT
ADDA GR0, 0, GR1
LAD GR1, 1, GR1
LAD GR7, 1, GR7
JUMP MAIN
QUIT POP GR7
POP GR1
RET
;---------------------
; 割り算
; GR7=GR0/GR2
;HOLD : GR1-GR6
;---------------------
AVE
LD GR7,=0
LOOP2
SUBA GR0,GR2
JMI QUIT2
LAD GR7,1,GR7
JUMP LOOP2
QUIT2
RET
;-----------------------------
; 最大値の検索
; IN : GR1=DATA TOP
; : GR2=DATA SU
;HOLD : GR1-GR6
;---------------------
MAX
PUSH 0,GR1
LD GR0,0,GR1
LD GR7,=0
LOOP3
LAD GR7,1,GR7
CPA GR7,GR2
JZE QUIT3
LAD GR1,1,GR1
CPA GR0,0,GR1
JPL LOOP3
LD GR0,0,GR1
JUMP LOOP3
QUIT3
POP GR1
RET
END
;--------------
; 以下はソート
;--------------
PGM START
LAD GR1, DATA
LD GR3, =10 ;DATA SU
CALL SORT
DUMP DATA,10 ;システムコール、結果の確認
RET
DATA DC 1,9,3,7,5,10,2,8,4,6
;-------------------------------------
; バブルソート
; IN : GR1=DATA TOP
; : GR3=DATA SU
; WORK : GR2=比較用 DATA TOP
; : GR4=SWAP用WORK
; : GR6=基準データ数カウンタ
; : GR7=比較データ数カウンタ
;DESTORY : GR3,GR5以外すべて
;-------------------------------------
SORT
LD GR6, =0 ;I=0
FOR_I
LAD GR2,0,GR1 ;D[I]=D[J] DATA TOP アドレスを同じにする
LAD GR6,1,GR6 ;I=I+1
CPA GR6, GR3
JZE QUIT ;I==DATA SU
LD GR7,GR6 ;J=I
FOR_J
LAD GR7,1,GR7 ;J=J+1
LAD GR2, 1, GR2 ;D[J] 比較用のデータアドレスを進める
LD GR0,0,GR2 ;GR0=D[I]
CPA GR0,0,GR1
JPL NEXT ;D[J]>D[I] 順の入れ替え不要
JZE NEXT ;D[J]=D[I] ”
LD GR5,GR0 ;GR5=D[J]
LD GR0,0,GR1 ;GR0=D[I]
ST GR0,0,GR2 ;D[J]=GR0
ST GR5,0,GR1 ;D[I]=GR5 SWAP D[I],D[J]
NEXT
CPA GR7, GR3
JMI FOR_J ;J<DATA SU
LAD GR1,1,GR1 ;D[I]のアドレスをつぎの配列に進める
JUMP FOR_I
QUIT
RET
END
丁寧で迅速な説明、ありがとうございます!!
今更なんですが、問題にへんなところがありました。。
最小値のほうのサブルーチンはMAXではなくてMINですね。。
ごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
初歩的な質問なのですが、サブ...
-
cobol サブルーチンのlink
-
オフコン(富士通Kシリーズ)...
-
VBAで2重のDoLoop関数から抜け...
-
初心者です。Perlではどんな時...
-
perlで文字の一部を削除したい
-
サブルーチン実行前後に処理
-
perlの構文でカンマの意味が分...
-
モジュールからフォームのボタ...
-
「デバイスは PRN を初期化でき...
-
印刷後メッセージボックスを表...
-
vba userFormのSubを標準モジュ...
-
Excel VBAでリンク切れをチェッ...
-
VBAProjectのモジュ...
-
モジュールの最大数はいくつな...
-
エクセルVBAでシートモジュール...
-
Excel VBAで、ユーザーフォーム...
-
ユーザー定義関数に#NAME?が返...
-
クラスモジュールについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
モジュールとサブルーチン
-
”:”がいっぱいの文について。
-
オフコン(富士通Kシリーズ)...
-
エラトステネスの篩について。
-
My関数の有効な使い方。
-
初歩的な質問なのですが、サブ...
-
Perlのサブルーチンで連想配列...
-
perlで文字の一部を削除したい
-
COBOLで、Shellを起動するには?
-
このプログラムはどのような仕...
-
日記CGIの改造(ログを逆順に表示)
-
My Sqlのデータベースを扱うサ...
-
配列と互換性のない型の要素に...
-
perlの構文でカンマの意味が分...
-
GOSUB命令とは
-
ACCESSのVBAでPrivate Sub ~en...
-
VC++ 高速演算コードの沢山の変...
-
サブルーチン実行前後に処理
おすすめ情報