アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

普段はC++を主に使っているため、見当違いな質問かもしれませんが、よろしくお願いします。

A 回答 (5件)

アセンブリ言語から、メモリ確保するには、いくつか方法がありますが、


いずれもOS環境に依存します。

●システムコールを呼び出す。
メモリ管理用のシステムコールが用意されていれば、それを使う事ができます。

●メモリ管理用のAPIを呼び出す。
API経由でメモリ管理用の機能を実行出来る場合があります。

●I/Oポートを使用して、メモリ管理用のチップセットを制御する。
システムコールや、専用のAPIが用意されてない環境では、I/Oポート経由で、
メモリ管理を行う事になります。

もし、環境が、MS-Windowsなら、
EMS、XML、DPMIなどの、システムコールや、
API呼び出しによるメモリ管理機能の呼び出しが出来るでしょう。
    • good
    • 0

広い意味で「アセンブラ」というと Java Virtual Machine の jasmin なども含まれますが, これだとアセンブラレベルで「動的確保」ができますね.


ま, 普通のプロセッサでは既に回答があるようにシステム呼び出しか「自力で全部操作」でしょう.
    • good
    • 0

OSがあれば、OSのシステムコールを利用する。

(OS上のプログラムと同じ)
OSがないのであれば、MMUを制御する。(32ビットCPUなら付いている?)
MMUがないのであれば、自分でメモリ管理プログラムを作る。(システムコールの実現)

メモリをグローバル領域にとるかスタック上にとるかでスコープが変わる。
また、頻繁にmalloc()、free()を繰り返すと連続領域の管理が大変。
ガーベッジコレクションを考えないと無駄にメモリを消費してしまう。

こうしてみると、OSのありがたさが身に染みます。
    • good
    • 0

>動的なメモリ領域の確保の記述は可能でしょうか?



動的なメモリの確保は本来OSの仕事だと考えます。
単体だと不可能だと思います。

どうしてもやるのなら
ある程度のメモリ・ブロックを事前に予約しておいて
newを書き換えて
予約したブロックから割り当てるのがいいと思います。
(コンストラクタを呼び出すのを忘れないでください)
    • good
    • 0

アッセンブラ命令には存在しないでしょう。



OSのマクロ?サービス?忘れたけどOS呼出しです。
syscallかな?
結局、C++も最終的にはOS呼出しでしょう。
    • good
    • 0

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