【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

現在、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






;<Program title>

jmp start

;data

;code

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; 初 期 化 プ ロ グ ラ ム ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



start: nop

di
LXI SP,STACK
;
lxi h,?ramsta
mvi b,0
mvi a,0
;call fill



hlt

A 回答 (2件)

単純に、(どこかで定義されているべき)STACK という名前が「存在しない」と言っているのです。


(多分、SP はアセンブラで定義されているのでしょう)

STACK の開始位置を設定する定義がどこかで必要です。

?ramsta も同じように「未定義」になりそうですが、? で始まっているので、「外部定義」ということなのかもしれません(憶測)

fill はコメントアウトしてあるために、未定義になっていないと言うことですね。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。
この”STACK”というのをアセンブラコードで検索してみたところ


Symbols:
F233" ?BUSFLG_BFF216" ?BUS_OCTLF066" ?C55PAF211" ?C55PBF212" ?C55PB_B
F213" ?C55PB_CF067" ?C55PCF21D" ?CF_CNTF21A" ?CTKHCF217" ?EXT_OCTL

----------(中略)------------------

FF00" STACK27CA' STACOD3CE2' STADAT1B40' STAF021074I'START



このような書き方がされていました。


これはSTACKというのが0FF00hの開始位置に定義されているということになりますでしょうか?




STACK: EQU 0ff00h
このように書いてもエラーは回避できてはいます。




また、”?ramsta”も同様にSymbols:のところで

F20F" ?PO_LEDF210" ?PO_TESF20B" ?PRTPTF23C" ?RAMENDF200" ?RAMSTA


というように書かれていました。

お礼日時:2012/11/27 10:38

スタックポインタをどこに設定するかというのは、実行環境に依存する問題で、インテル純正の開発環境では、ロケーターというものがそれを解決していたのですが、最近の処理系では、リンカがその仕事をしていることでしょう。


当該シミュレーターがどのようになっているのか、少しいじってみましたが、よくわかりませんでした。
さしあたって、ソースに
STACK: EQU 07fffh
などと書いて、やり過ごすのが良いのではないでしょうか?
しかし、実際にはRAM領域の指定もしなければならないでしょう。(?ramsataの部分ですかね)
試しにちょっと動かしてみたら、コードが04200hに出来てました。これの設定部分があれば、シンボルの解決方法がわかるかもしれません。
でもちょっと見た感じ、昔良くあったアセンブラトレーニングツール程度のモノののような気がします。あまり高度なことは出来ないのではないかと。わざわざ80ではなくて85のツールという割には、IO空間が64Kあるのはいいとして、rst6.5,7.5(どこからどこまであるのかもう忘れたけど)や、1bitの入出力も無いですし。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。返事が遅くなり申し訳ありません。

STACK: EQU 07fffh


このようなやり方があるのですね。活用させて頂きます。

お礼日時:2012/12/14 13:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!