• ベストアンサー

アセンブラでのメモリの動的確保について

自作コンパイラのために最近NASMを使ってアセンブラの勉強を始めたものです。 メモリ領域の確保のためにNASMでは buffer: resb 64 と宣言しますが、C++でのchar* buffer=new char[size]; のような、動的なメモリ領域の確保の記述は可能でしょうか? 普段はC++を主に使っているため、見当違いな質問かもしれませんが、よろしくお願いします。

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

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.3

アセンブリ言語から、メモリ確保するには、いくつか方法がありますが、 いずれもOS環境に依存します。 ●システムコールを呼び出す。 メモリ管理用のシステムコールが用意されていれば、それを使う事ができます。 ●メモリ管理用のAPIを呼び出す。 API経由でメモリ管理用の機能を実行出来る場合があります。 ●I/Oポートを使用して、メモリ管理用のチップセットを制御する。 システムコールや、専用のAPIが用意されてない環境では、I/Oポート経由で、 メモリ管理を行う事になります。 もし、環境が、MS-Windowsなら、 EMS、XML、DPMIなどの、システムコールや、 API呼び出しによるメモリ管理機能の呼び出しが出来るでしょう。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

広い意味で「アセンブラ」というと Java Virtual Machine の jasmin なども含まれますが, これだとアセンブラレベルで「動的確保」ができますね. ま, 普通のプロセッサでは既に回答があるようにシステム呼び出しか「自力で全部操作」でしょう.

回答No.4

OSがあれば、OSのシステムコールを利用する。(OS上のプログラムと同じ) OSがないのであれば、MMUを制御する。(32ビットCPUなら付いている?) MMUがないのであれば、自分でメモリ管理プログラムを作る。(システムコールの実現) メモリをグローバル領域にとるかスタック上にとるかでスコープが変わる。 また、頻繁にmalloc()、free()を繰り返すと連続領域の管理が大変。 ガーベッジコレクションを考えないと無駄にメモリを消費してしまう。 こうしてみると、OSのありがたさが身に染みます。

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

>動的なメモリ領域の確保の記述は可能でしょうか? 動的なメモリの確保は本来OSの仕事だと考えます。 単体だと不可能だと思います。 どうしてもやるのなら ある程度のメモリ・ブロックを事前に予約しておいて newを書き換えて 予約したブロックから割り当てるのがいいと思います。 (コンストラクタを呼び出すのを忘れないでください)

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

アッセンブラ命令には存在しないでしょう。 OSのマクロ?サービス?忘れたけどOS呼出しです。 syscallかな? 結局、C++も最終的にはOS呼出しでしょう。