- 876 名前:デフォルトの名無しさん [2016/10/13(木) 22:02:03.31 ID:7rM2EKzx.net]
- >>816 つづき。
8080系では、処理の速さからスタック領域に変数を置く傾向がある。 ところが、スタックによるメモリー破壊を検出する、メモリー保護の例外、という事象が発生しない。 メモリー保護用レジスタがないし、関係命令もない。 スーパーバイザー以外のタスクが使用するメモリーをスーパーバイザーが決定するのが、マルチタスク処理の基本ではあるが、 8080系は、シングルタスク用CPUなので、関係命令がない。 結果として、やたら処理中に原因不明の障害を発生しやすくなる。 makoto-watanabe.main.jp/freebasic/CompilerOptt.html には、スタックの初期値(無指定時の容量)が記載されていない。MA-DOSの処理では、 サブルーチンコールに、全レジスタの3-5倍ぐらい(8086 で16レジスタ位、32バイトの20倍512バイトをシステム割り込み(INT 21他)用に確保するように記載があったと記憶している。 FCだったかな、80480以後の旧隠し命令、全レジスタのPOPをサブルーチンコールとしてユーザーが使用するようになったのは。 非公開レジスタを含めてPOPするので、かなり巨大なスタック領域を確保する必要がある。 (細かいことはken-crate.blue.coocan.jp/asm/asm_menu.htm のようなサイトを探してくれ) 使う変数の目安としては、入力変数+出力変数の合計を作業変数と近似して >>814 だと、 入力ファイル 50KB(内1KBを読み取る), 出力ファイル100KB(内4KBか可変、残りは表題などの定数)、出力変数2kbより、作業変数7KB、合計14KBを用意して ここに、FreeBasic 内ルーチンの参照分(これが不明)を足す。 スタックの消費量の管理については、在庫管理が参考になる。 www2.rku.ac.jp/takada/logist/plan_zaiko.html 在庫が不足すれば、ハングアップという結果が待っているわけで、 目安としては、全容積の50%位を消費するようにして、66%を超えないように管理する。 理論としてはわかっているが、実際のスタックの状況をユーザーレベル(タスク)で検出できないと、対応も取れない。
|

|