• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:GNUSim8085でのアセンブラエラー)

GNUSim8085でのアセンブラエラー

このQ&Aのポイント
  • GNUSim8085というシミュレーターでアセンブラのシミュレーションデバッグを行っています。初期化プログラムを貼り付けてみたところ、LXI SP,STACK という行でエラーが発生しました。
  • エラーの内容は、21 Undefined symbol というものであり、21 Invalid operand or symbol.Check whether operands start with a number. e.g a0H should be 0a0H というメッセージが表示されました。
  • 今回のアセンブラエラーに関する情報をまとめると、GNUSim8085シミュレーターでのシミュレーションデバッグ中に初期化プログラムを貼り付けた際に、LXI SP,STACK という行でエラーが発生しました。エラーの内容は、21 Undefined symbol というものであり、21 Invalid operand or symbol.Check whether operands start with a number. e.g a0H should be 0a0H というメッセージが表示されました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

単純に、(どこかで定義されているべき)STACK という名前が「存在しない」と言っているのです。 (多分、SP はアセンブラで定義されているのでしょう) STACK の開始位置を設定する定義がどこかで必要です。 ?ramsta も同じように「未定義」になりそうですが、? で始まっているので、「外部定義」ということなのかもしれません(憶測) fill はコメントアウトしてあるために、未定義になっていないと言うことですね。

diy_sunny
質問者

お礼

回答頂きありがとうございます。 この”STACK”というのをアセンブラコードで検索してみたところ Symbols: F233" ?BUSFLG_BF F216" ?BUS_OCTL F066" ?C55PA F211" ?C55PB F212" ?C55PB_B F213" ?C55PB_C F067" ?C55PC F21D" ?CF_CNT F21A" ?CTKHC F217" ?EXT_OCTL ----------(中略)------------------ FF00" STACK 27CA' STACOD 3CE2' STADAT 1B40' STAF02 1074I' START このような書き方がされていました。 これはSTACKというのが0FF00hの開始位置に定義されているということになりますでしょうか? STACK: EQU 0ff00h このように書いてもエラーは回避できてはいます。 また、”?ramsta”も同様にSymbols:のところで F20F" ?PO_LED F210" ?PO_TES F20B" ?PRTPT F23C" ?RAMEND F200" ?RAMSTA というように書かれていました。

その他の回答 (1)

回答No.2

スタックポインタをどこに設定するかというのは、実行環境に依存する問題で、インテル純正の開発環境では、ロケーターというものがそれを解決していたのですが、最近の処理系では、リンカがその仕事をしていることでしょう。 当該シミュレーターがどのようになっているのか、少しいじってみましたが、よくわかりませんでした。 さしあたって、ソースに STACK: EQU 07fffh などと書いて、やり過ごすのが良いのではないでしょうか? しかし、実際にはRAM領域の指定もしなければならないでしょう。(?ramsataの部分ですかね) 試しにちょっと動かしてみたら、コードが04200hに出来てました。これの設定部分があれば、シンボルの解決方法がわかるかもしれません。 でもちょっと見た感じ、昔良くあったアセンブラトレーニングツール程度のモノののような気がします。あまり高度なことは出来ないのではないかと。わざわざ80ではなくて85のツールという割には、IO空間が64Kあるのはいいとして、rst6.5,7.5(どこからどこまであるのかもう忘れたけど)や、1bitの入出力も無いですし。

diy_sunny
質問者

お礼

回答頂きありがとうございます。返事が遅くなり申し訳ありません。 STACK: EQU 07fffh このようなやり方があるのですね。活用させて頂きます。

関連するQ&A