はじめまして。情報科学を勉強している大学生です。
お時間ございましたら、回答のほどよろしくお願いします。
現在、Pascal→CASL2のコンパイラの作成という課題に取り組んでいます。
意味解析まで終わって、アセンブラ言語に変換するとこまで来たのですが、先生の言っていた言葉の意味がよくわからず困っています。
「CASL2はCASLと違って、スタックポインタがGR4から独立したから、(コンパイラを作る際に)ちょっとした工夫が必要になる」
といった感じのことを言っていたのですが、具体的になぜ工夫が必要なのかわかりません。
理解している友達にも聞いたんですが、いまいちわかりませんでした。
webでもいろいろ調べたんですが、説明しているサイトが見つからず八方塞の状況です。
そこで、
「具体的になぜ、どのような工夫がいるのか」
を教えていただきたく思います。参考になるページを紹介していただけるだけでも結構です。
それでは、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
> CASLでは、スタックトップ以外も参照・書換えできたのに、CASL2ではスタックトップだけしか
> 参照・書換えできない(SPを書き換えられない)。
> という認識で間違ってないでしょうか?
まー、そういう感じですが厳密に言うとCASL2でもスタックトップにも直接アクセスできません。
> 「スタックポインター及びスタックポインタの中身の参照・書き換えを間接的に行う方法」について
> もう少し詳しく教えていただきたいです。
根本的に必要なのはスタックの状態を変えないでスタックの中身にアクセスする方法です。
これをやるにはダミーでPOPをやってアクセスしPUSHで元に戻すしかないでしょうね。
何度も回答していただきありがとうございます。
おかげで、先生の言おうとしていたことがつかめたような気がします。
本当にありがとうございました。
No.1
- 回答日時:
CASL→CASL2の変化というよりはその元になるCOMETという仮想計算機(ハード)の仕様が変わったのです。
本当の所は世の中の計算機の仕様動向に少し近付けたのですが。
一番大きく変わったと思われるのがSP(スタックポインター)です。
従来は汎用レジスターGRの中のGR4をSPとして使っていました。
従って、命令語でスタックポインターを参照・書き換えできました。
またGR4で修飾してスタックの中身の参照・書き換えも出来たのです。
これらはプログラミングテクニック上便利だったのですが
1.仕様として未完成
2.ミスで暴走しやすい
などがあり、改善されたと思われます。
結論として、スタックポインター及びスタックポインタの中身の参照・書き換えを間接的に行う方法を編み出す
と言うのがちょっとした工夫でしょう。
回答ありがとうございます。
>従来は汎用レジスターGRの中のGR4をSPとして使っていました。
>従って、命令語でスタックポインターを参照・書き換えできました。
>またGR4で修飾してスタックの中身の参照・書き換えも出来たのです。
つまり、CASLでは、スタックトップ以外も参照・書換えできたのに、CASL2ではスタックトップだけしか参照・書換えできない(SPを書き換えられない)。
という認識で間違ってないでしょうか?
それから、「スタックポインター及びスタックポインタの中身の参照・書き換えを間接的に行う方法」についてもう少し詳しく教えていただきたいです。
お時間ございましたら、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 中学校 中2、宿題の意味がわからないです。 4 2022/08/13 13:42
- 日本語 意味とは何か? どこにあるのか?(Ⅱ) 4 2022/04/21 13:35
- 物理学 物理工学系学科-調査課題 2 2022/04/26 18:57
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 大学受験 担任が無理です 6 2022/10/18 23:21
- 哲学 説得力を修辞の巧みさまたは論理の強さの2つに分析するにはどうすると良いでしょうか? 0 2022/07/20 05:46
- 医療・介護・福祉 (緊急) 介護関係者!医療従事者!に真面目な質問!! 大変悩んでいます…。 【視覚障害者の方に対して 2 2022/05/01 21:01
- 中学校 中三の二学期で転校。。 3 2023/08/28 16:28
- 日本語 きみの嫁さんは私が見つけてあげるよ。 11 2022/11/13 21:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gccでスタックサイズを変更する...
-
エラー?メッセージ
-
printf / sprintf のスタック消...
-
最大スタックサイズを大きくす...
-
VB.netでDLLを読み込んで実行す...
-
プログラムの規模を表す単位「k...
-
パソコンでインターネット接続...
-
ubuntuで デイスク/deb/loopと...
-
Macと iPadの違いについて 今現...
-
ワープロ検定の勉強法について。
-
エクセルのHLOOKUP関数の検索範...
-
ネットワークアイコンが黄色三...
-
タイピング速度を上げる方法に...
-
RS-FF回路について
-
タイピングの癖
-
Excel VBA マクロ処理 リンク先...
-
ブラインドタッチ、苦手なんで...
-
ブロック化因数(ブロッキング...
-
タイピングを極めたい
-
タッチタイピング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.netでDLLを読み込んで実行す...
-
最大スタックサイズを大きくす...
-
エラー?メッセージ
-
Ethernetヘッダの取得 NDIS
-
GCCで関数の引数が渡らない
-
printf / sprintf のスタック消...
-
スタックフレームの消滅
-
H8マイコン スタック領域に...
-
pthreadのスタックサイズ設定取...
-
_CRTIMPの意味は?
-
スタックを用いて整数配列を入...
-
再帰処理を非再帰処理に書き換...
-
VC++でプログラムから現在のス...
-
cloneのスタック管理
-
マス目上の移動のアルゴリズム
-
gccでスタックサイズを変更する...
-
OCXからのコールバックを繰り返...
-
コンパイラオプション
-
VC++6.0 Stack Overflow !!
-
スタック領域変更
おすすめ情報