- ベストアンサー
アセンブラでのメモリの動的確保について
自作コンパイラのために最近NASMを使ってアセンブラの勉強を始めたものです。 メモリ領域の確保のためにNASMでは buffer: resb 64 と宣言しますが、C++でのchar* buffer=new char[size]; のような、動的なメモリ領域の確保の記述は可能でしょうか? 普段はC++を主に使っているため、見当違いな質問かもしれませんが、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
アセンブリ言語から、メモリ確保するには、いくつか方法がありますが、 いずれもOS環境に依存します。 ●システムコールを呼び出す。 メモリ管理用のシステムコールが用意されていれば、それを使う事ができます。 ●メモリ管理用のAPIを呼び出す。 API経由でメモリ管理用の機能を実行出来る場合があります。 ●I/Oポートを使用して、メモリ管理用のチップセットを制御する。 システムコールや、専用のAPIが用意されてない環境では、I/Oポート経由で、 メモリ管理を行う事になります。 もし、環境が、MS-Windowsなら、 EMS、XML、DPMIなどの、システムコールや、 API呼び出しによるメモリ管理機能の呼び出しが出来るでしょう。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
広い意味で「アセンブラ」というと Java Virtual Machine の jasmin なども含まれますが, これだとアセンブラレベルで「動的確保」ができますね. ま, 普通のプロセッサでは既に回答があるようにシステム呼び出しか「自力で全部操作」でしょう.
- okazaki0ko
- ベストアンサー率15% (37/238)
OSがあれば、OSのシステムコールを利用する。(OS上のプログラムと同じ) OSがないのであれば、MMUを制御する。(32ビットCPUなら付いている?) MMUがないのであれば、自分でメモリ管理プログラムを作る。(システムコールの実現) メモリをグローバル領域にとるかスタック上にとるかでスコープが変わる。 また、頻繁にmalloc()、free()を繰り返すと連続領域の管理が大変。 ガーベッジコレクションを考えないと無駄にメモリを消費してしまう。 こうしてみると、OSのありがたさが身に染みます。
- BLK314
- ベストアンサー率55% (84/152)
>動的なメモリ領域の確保の記述は可能でしょうか? 動的なメモリの確保は本来OSの仕事だと考えます。 単体だと不可能だと思います。 どうしてもやるのなら ある程度のメモリ・ブロックを事前に予約しておいて newを書き換えて 予約したブロックから割り当てるのがいいと思います。 (コンストラクタを呼び出すのを忘れないでください)
- Tasuke22
- ベストアンサー率33% (1799/5383)
アッセンブラ命令には存在しないでしょう。 OSのマクロ?サービス?忘れたけどOS呼出しです。 syscallかな? 結局、C++も最終的にはOS呼出しでしょう。