pascalじゃないので、fj.lang.miscにふります。
<67bcn3$ee3$1...@news.twin.ne.jp>の記事において
son...@po.twin.ne.jpさんは書きました。
>> 学校の課題で以下のようなCASLプログラムが与えられたのですが、
>> サブルーチン「INPUT」のところがよくわかりません。2行目のPUSHで
>> IN1がスタックに入れられているのですが、「INPUT」の中ではそれを
>> どう使うのかよく分かりません。どなたか分かりませんでしょうか。
略
学校の課題ということなので、授業中にスタックやPUSH, POP, CALL
などについてはすでに習っているはずですよね。そのへんのノートを
読み返せばわかるはずです。わからなければ先生に聞きましょう。
とはいえヒントを。
スタックとは簡単に言えばメモリの1部です。スタックがメモリ
上のどこのアドレスにあるかは、スタックポインタと呼ばれるレジ
スタに格納されています。INPUTの中では直前のPUSHでスタックの
中に格納されたデータ(番地)を取りだして、そこの番地に結果を書
き込んだのちRETすればいいのです。
問題のプログラムリストでは、PUSHのあとCALL INPUTをおこなっ
ていますが、いずれもスタックの内容とスタックポインタが変更さ
れる命令ですので、これらの結果、スタックにはどのような内容が
書かれているか、スタックポインタがそのときスタックのどこを指
しているかを考えれば、回答がでてくるかと思います。
しかし、問題を見ていると引数の受け渡しは当然マスターしてお
り、「10進数を2進数になおす」プログラムの作成が課題で求めて
いる内容のように思えます。だから、引数の受け渡しについてはこ
れより前の課題で教わっているんじゃないですか?だとすればまず、
前回の課題の内容をきちんと復習してからでないと、この課題がで
きるとは思えません。
double x,y,z=1.8;main(a,b){x=(time( /* 金子 裕(Yutaka Kaneko) */
0)%935)/472;while(!0){y=x;x=2-z*(x- /* Sendai National College of Technology */
1)*(x-1);a=(x*631);a%=78;b=(y*95);b /* kan...@cc.sendai-ct.ac.jp */
%=24;printf("\033[%d;%dHx\n",b,a);}}/*Evanx08,Megax05,Escax07,Fushx16,WedPx07*/
In article <67bcks$e6m$1...@news.twin.ne.jp>
"takeshi" <son...@po.twin.ne.jp> writes:
>学校の課題で以下のようなCASLプログラムが与えられたのですが、
>サブルーチン「INPUT」のところがよくわかりません。2行目のPUSHで
>IN1がスタックに入れられているのですが、「INPUT」の中ではそれを
>どう使うのかよく分かりません。どなたか分かりませんでしょうか。
スタックを使ってサブルーチンにパラメータを渡す手法ですね。CやPascal
をコンパイルするときによく使われます。サブルーチン側では、SPを使ったイ
ンデックスアドレッシングでパラメータを取り出します。
参考書などを探せば解説があるでしょう。WWWではこんなのがありました。
http://www.eng.toyo.ac.jp/education/courses/casl/casl.html
シミュレータを使うか、レジスタやスタックの状態を順に紙に書くなどして、
よく考えてみましょう。
--
伊藤隆幸 (ITO Takayuki)