質問するログイン新規登録

Q&A

解決済

1回答

293閲覧

CASLⅡでInvalid label ~~のエラーが一生直せません。

yukkemerochi

総合スコア2

CASL

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

0グッド

0クリップ

投稿2026/01/04 11:12

0

0

実現したいこと

ラベルのエラーを直したいです。

発生している問題・分からないこと

9の倍数かどうかを判定するプログラムを作っています。
今まで通りの文法で書いたのですが、なぜか255が無効なラベルだというエラーが出てきます。
どなたか解決して頂きたいです。
コピペで文字間隔がおかしくなっています申し訳ないです。

エラーメッセージ

error

1Invalid label "255"

該当のソースコード

COMETⅡ

1MAIN START 2BUF DS 256 3 4 IN BUF,255 5 ST GR0,BUF+255 6 7LOOP LD GR0,BUF 8 CPA GR0,=0 9 JZE END1 10 11 XOR GR2,GR2 12 LAD GR1,BUF+1 13 14SLOOP LD GR0,0,GR1 15 CPA GR0,=0 16 JZE SUM_END 17 AND GR0,=#000F 18 ADD GR2,GR0 19 LAD GR1,1,GR1 20 JUMP SLOOP 21 22SUM_END LD GR4,=9 23 24D9 CPA GR2,GR4 25 JMI CHECK 26 SUB GR2,GR4 27 JUMP D9 28 29CHECK CPA GR2,=0 30 JZE OK 31 JUMP NG 32 33OK OUT OKMSG,1 34 JUMP LOOP 35 36NG OUT NGMSG,1 37 JUMP LOOP 38 39END1 RET 40 41OKMSG DC '9の倍数です',0 42NGMSG DC '9の倍数ではありません',0 43 END 44 45

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

chatgptによればBUF直後のIN命令がラベル扱いになっているとのこと。
ラベル扱いされないようにTABでそろえてあるのですが、どうもうまくいきません。

補足

特になし

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

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

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

cametan

2026/01/04 12:03

エミュレータ名書いたほうがいいかも。 CASL IIはよく知らないんだけど、多分エミュレータによってはINとかOUT等のマクロが実装されてなくって、単にそれでエラー吐いてる、って事が考えられるんじゃないだろうか。
guest

回答1

0

ベストアンサー

IPAのサイトに仕様が書いてあるだろうと思ったのですが、今はもう試験で使われてないんですね。
まあ、過去問のファイルには載ってます。
https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000f3yi-att/2009h21a_fe_pm_qs.pdf

INは、アセンブラマクロ命令で、第一オペランドが入力領域の先頭のラベル、第二オペランドが長さが返されるメモリ領域のラベルです。

上記ファイルより:(コピペできないため打ち直してますので、タイプミスご容赦)

入力文字長領域は、1語長の領域のラベルであり、入力された文字の長さ(≧0)が2進数で格納される。ファイルの終わり(end of file)を検出した場合は、-1が格納される。

IN BUF,255と書いちゃってるので、おそらく第二オペランドに入力領域の長さ(あるいは「長さ-1」)を書くと誤解しているのでしょう。
正しくは上記のように、INが「実際に入力された文字数」を書き込むエリアです。
入力される長さの最大値は256と固定で、指定できません。
INの後で、入力文字長領域の中身をチェックして、何文字入力されたのか、あるいはEOFなのかを判断します。

あと、STARTに実行開始番地が書いてないので、その次のDSのところから実行が始まりますよ。DSは実行プログラムじゃなくてデータです。

5行目以降は見てません。

投稿2026/01/04 14:42

otn

総合スコア86522

yukkemerochi

2026/01/05 05:27

ありがとうございます!解決しました
otn

2026/01/06 03:02

エラーメッセージに素直に向き合えば自力で速く解決できます。 「Invalid label "255"」は、「そこにはラベルを書くべき」という意味です。この読み取りができないのであれば、それは単に経験不足なので、経験を積めばわかるようになります。 「ラベルを書くべきところに255という数値を書いてしまった」ことがわかるので、 IN命令にについての「第2オペランドに数値を書く」という理解が間違っていたことがわかります。 で、IN命令の説明を「自分の理解が間違っていた」という前提を持ったうえで読み返せば、おそらく気づいたはず。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問