質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

CASL

CASLは、情報処理技術者試験のプログラミング能力試験のために独自に開発されたアセンブリ言語です。架空の演算装置であるCOMETに対応可能。2001年からはCASLIIが後継として利用されています。

Q&A

解決済

3回答

2503閲覧

CASL2のLD命令について

inumaeda

総合スコア12

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

CASL

CASLは、情報処理技術者試験のプログラミング能力試験のために独自に開発されたアセンブリ言語です。架空の演算装置であるCOMETに対応可能。2001年からはCASLIIが後継として利用されています。

0グッド

0クリップ

投稿2020/02/29 01:03

質問内容

CASL2のLD命令で
ld gr1,=1 ;gr1に1が代入される
ld gr1,1 ;gr1に8000が代入される

なぜこのような違いが出るのでしょうか?
ご教示いただけたら幸いです。

該当のソースコード

casl2

1TEST START 2 RPUSH 3 ld gr1,=1 ;gr1に1が代入される 4 ld gr1,1 ;gr1に8000が代入される 5 rpop 6 ret 7 END

補足情報(FW/ツールのバージョンなど)

CASL2
COMET2

↓こちらのweb版シミュレータを使用しました。
http://www.chiba-fjb.ac.jp/fjb_labo/casl/casl2.cgi

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

この理解のために必要な前提知識は 2 つあります:

  • LD は指定アドレスにある値をレジスタへ格納する.
  • = のついた数値はリテラル.

1 つ目, LD指定したアドレスにある値 をレジスタへ格納する命令です.

決して 指定した値 をレジスタへ格納する命令 ではありません. よって:

CASL2

1LD GR1, 1

というコードの意味は「メモリ上のアドレス 1 番地にある値を, GR1 へ格納する」であり,
8000 という値は たまたま 1 番地に 8000 という値があった ため結果的にそう動いたに過ぎません.

2 つ目, = のついた数値はリテラルです. リテラルについては同シミュレータに付属の仕様にも記載があります.

http://www.chiba-fjb.ac.jp/fjb_labo/casl/CASL2spec.html#2-5

2.5 機械語命令

 機械語命令のオペランドは、次の形式で記述する。
r,r1,r2 GRは、記号GR0〜GR7で指定する。
x 指標レジスタとして用いるGRは、記号GR1〜GR7で指定する。
adr アドレスは、10進定数、16進定数、アドレス定数又はリテラルで指定する。
リテラルは、ひとつの10進定数、16進定数又は文字定数の前に等号(=)を付けて 記述する。CASLⅡは、等号の後の定数をオペランドとするDC命令を生成し、 そのアドレスをadrの値とする。

つまり, =1 という記述があるので, CASL2 アセンブラは DC 命令を自動的に追加し,

CASL2

1 LD GR1, DATA0001 ; DATA0001 というのは説明用に仮に付けた名前です 2 (中略) 3 RET 4DATA0001 DC 1 ; =1 の本体

のようなコードとしてアセンブルします.

よって, LDDC 1 のあるアドレスが渡されて GR11 が格納されるのです.

投稿2020/02/29 01:34

kagilinn

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inumaeda

2020/02/29 02:21

大変わかりやすい説明ありがとうございます! 仕様を見ても理解できなかったため助かりました!
guest

0

最近のCASLは詳しくないですが、

ld gr1,1 ;gr1に8000が代入される

この場合は、1番地のデータが GR1に設定(Load)されるようです。
仕様を確認しましょう。

投稿2020/02/29 01:19

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CASLⅡ- プログラミングの基礎(ロード,ストア,ロードアドレス)

ld gr1,1
という命令は、1番地に格納されているデータをgr1に格納する、というものです

投稿2020/02/29 01:12

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問