2017-12-08 8 views
-1

MASMを使用して行列計算機を構築しようとしていますが、行列を動的に割り当てるのに問題があります。例についてどのように動的にMASMで行列を割り当てますか?

行列は3×3であるユーザの入力した場合、私は、メモリ内に3×3行列を保持する空間を割り当てます。

私は誰かが私にどのように表示されることを望んでいました。

+0

あなたはいくつかの狂った数字を入力するか、1000などのハードコーディングされた最大値で逃げることができますか?その後、 '.bss'セクションに1millionのセルを予約し、そのメモリの一部だけを使用します。セルが浮動小数点の 'double '型= 8バイトの場合、それは8MiBのRAMだけが無駄になり、現代のPCには問題ありません。 – Ped7g

+0

*動的*割り当てが本当に必要ですか、または実行時に可変容量のスタックスペースが使用できますか?それは簡単です。 –

+0

@PeterCordesターミナル画面でプロンプトが表示されたときにユーザーが入力する行列のサイズに合わせて、多次元配列を作成したいと考えています。 –

答えて

1

どのように動的にMASMに行列を割り当てますか?

(すなわちローレベル、動的割り当ては全く厳密を有していないため)あなたは動的アセンブラの配列を割り当てません。

ダイナミックアロケーションを行う関数をアセンブラで呼び出すことができます。たとえば、mallocC standard libraryから呼び出すことができます。

一部の(既知の)オペレーティングシステム用にuser-modeアプリケーションをコーディングする場合は、system callを実行してvirtual address spaceを変更することを検討することがあります。 Linuxでは、それは(例えば)mmap(2)かもしれません。

どちらの場合も、呼び出される関数またはシステムコールによって使用されるcalling conventionsに従う必要があります。お使いのシステムにはおそらくApplication Binary Interfaceが必要です。 Linux/x86-64では、here

を参照してください。通話規則は、通常、特定のオペレーティングシステム固有のinstruction set architectureです。スタンドアロンのライブラリやフレームワークを使用している場合、そのことも呼び出し規約を文書化する必要があります。

thisも参照してください。

call stackに割り当てることもできます(スタックポインタを適切に変更します)。

+0

しかし、 "HeapAlloc"を使って動的に配列を割り当てるには、Irvine32などのライブラリを使用できますか? –

+0

確かにはい。次に、呼び出し規約(そのライブラリとシステムに関連するもの)を理解する必要があります。 –

関連する問題