はじめまして。情報科学を勉強している大学生です。
お時間ございましたら、回答のほどよろしくお願いします。
現在、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ランキング
-
CASLとCASL2の違いについて
-
基本情報技術者のデータ構造あ...
-
再帰関数を使うとき、ソフトウ...
-
gccでスタックサイズを変更する...
-
リストを使った逆ポーランド記...
-
VB.netでDLLを読み込んで実行す...
-
プログラムの規模を表す単位「k...
-
パソコンでインターネット接続...
-
ライン数とステップ数の違いに...
-
ubuntuで デイスク/deb/loopと...
-
ステップ数について
-
ワープロ検定の勉強法について。
-
同じサブネットに属するIPアドレス
-
ミキサの原理
-
シェルスクリプトについて
-
セレン整流器は金属のセレンが...
-
命令口調について
-
hdmiはパラレル?シリアル?
-
暗号解読について教えてください
-
TLBミスの扱いについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ゆゆにゃ。
-
エラー?メッセージ
-
VB.netでDLLを読み込んで実行す...
-
printf / sprintf のスタック消...
-
スタック領域変更
-
関数のプロローグとエピローグ...
-
スタックフレームの消滅
-
逆ポーランド記法
-
_CRTIMPの意味は?
-
マス目上の移動のアルゴリズム
-
gccでスタックサイズを変更する...
-
再帰処理を非再帰処理に書き換...
-
最大スタックサイズを大きくす...
-
C言語のリスト、スタック、キュ...
-
C言語・スタックを使用した逆...
-
C言語での配列初期化について
-
情報処理の問題で理解ができま...
-
objective-c undo機能について
-
基本情報技術者のデータ構造あ...
-
再帰関数を使うとき、ソフトウ...
おすすめ情報